Wskazówka APPEND – Co Właściwie Robi I Kiedy Z Niej Korzystać?

Wskazówka APPEND (hint APPEND) – jak może się przysłużyć, kiedy i czy w ogóle z niej korzystać? W których przypadkach sprawdzi się doskonalne, a w których będzie opóźniać instrukcje?

DROP TABLE T1
/

DROP TABLE T2
/

CREATE TABLE T1(id NUMBER, descr CHAR(2000))
/
CREATE TABLE T2(id NUMBER, descr CHAR(2000))
/

INSERT INTO T1
  SELECT ROWNUM, 'A' FROM DUAL
    CONNECT BY ROWNUM <= 1000000
/

COMMIT
/

/*Przygotowanie tabeli T2*/
INSERT INTO T2
  SELECT * FROM T1
/ 

/*Podziurawienie segmentu pamięci*/
DELETE FROM T2
 WHERE MOD(id, 10) = 0
/

COMMIT
/
INSERT INTO T2
  SELECT * FROM T1
/  
Task completed in 39.402 seconds
INSERT /*+ APPEND */ INTO T2
  SELECT * FROM T1
/ 
Task completed in 21.975 seconds

W powyższym przykładzie wykorzystanie hintu APPEND skróciło czas wstawiania prawie o połowę. Co właściwie się stało i czy zawsze będzie szybciej?

  • Wskazówka APPEND nie jest lekiem na całe zło wolniejszego wstawiania rekordów do tabeli
  • Wskazówka APPEND wymusza pomijanie buffer cache i wstawia dane bezpośrednio na dysk
  • Wymusza wstawianie danych ponad high water mark, czyli nie szuka wolnych miejsc w pamięci, a bezwarunkowo wstawia dane w nowe bloki pamięci, co powoduje rozrost wykorzystanej pamięci
  • W przypadku nie zakończenia transakcji, pomiędzy instrukcjami INSERT, a COMMIT niemożliwe jest odpytanie o zawartość tabeli, wstawianie, modyfikowanie ani usuwanie rekordów (ORA-12838)
  • Konieczna przy kompresji BASIC, inaczej nowowstawiane rekordy nie będą kompresowane
  • Przy małej puli danych do wstawienia, lepiej sprawdza się podejście konwencjonalne
  • W przypadku wstawiania ogromu danych, lepiej sprawdzi się bezpośrednie wstawianie z wykorzystaniem wskazówki APPEND

Szymon

Komentarze |0|

Legenda *) Pola oznaczone gwiazdką są wymagane
**) Możesz używać tych znaczników i atrybutów HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>