sobota, 11 grudnia 2010

Konfiguracja parametrów SGA

Zanim zaczniemy konfigurować sobie parametry SGA wypadałoby sprawdzić które z nich są zmienialne w ogóle i które jakie są ich aktualne wartości  :)
Do sprawdzania obu tych rzeczy mamy specjalne słowniki:

  • v$sgainfo - podstawowe informacje o wartościach i informacje czy dane parametr możemy dynamicznie zmieniać czy nie.
  • v$sga_dynamic_components - tutaj są informacje znacznie szersze od sgainfo. Mamy też info o aktualnym wykorzystaniu buforów. Jednak nie ma informacji o tym czy dany parametr jest rozszerzalny czy nie.

Sprawdźmy aktualne ustawienia buforów:


Kodzik: 

select * from v$sgainfo;

To jaki parametr ustawiamy na jaką wartość zależy od tego do czego nam będzie służyć baza i czego od niej oczekujemy. 

Ostatnio bardzo się zdziwiłem kiedy zacząłem zmieniać różne parametry i ku memu wielkiemu zdziwieniu Oracle olewał to co mu ustawiałem. Ja mu ustawiam jakiś parametr a on mi swoje. Chłopaki z Oracla wpadli na przegenialny pomysł by te parametry ustawiały się same, obsrywając to co ustawia admin. To funkcjonuje od wersji 10 Oracle. Niestety nie byli na tyle sprytni by poinformować o tym fakcie jakimś ładnym komunikatem podczas próby ustawienia. Aby nasze zmiany odniosły jakikolwiek skutek musisz wyzerować parametr SGA_TARGET podłóg którego to pozostałe parametry ustawiają się same. SGA_TARGET określa docelową wielkość SGA (nie maksymalną) do jakiej Oracle ma dążyć. Przed ustawianiem czegokolwiek wykonaj więc:

alter system set sga_target=0;

Które to zeruje sga_target jednocześnie wyłączając automagiczne strojenie wielkości buforów. Dopiero teraz możesz zacząć ustawiać pozostałe parametry.

Swoją konfigurację najlepiej zacząć od ustawienia maksymalnej wartości SGA_MAX_SIZE który to parametr określa maksymalną wielkość SGA. Dlatego od tego zaczynamy, bo według tej wartości ustawia się inne parametry które to jako składowe SGA nie mogą sumarycznie przekroczyć jej wartości.

Parametru SGA_MAX_SIZE nie możemy modyfikować dynamicznie, musimy to ustawić w pliku konfiguracyjnym a następnie zrestartować instancję. Zmieniamy więc SGA_MAX_SIZE:

alter system set sga_max_size=700M scope=spfile;

700M to oczywiście 700 megabajtów. Możesz też dać K i wtedy będziesz mógł podać w kilobajtach. SCOPE=SPFILE oznacza że zmiana ma dotyczyć pliku konfiguracyjnego który czytany jest przy starcie instancji.

Zaloguj się jako sys przy użyciu sql plusa ( conn sys/haslo as sysdba )  Teraz zrestartuj instancję:


Kodzik:

Najpierw : SHUTDOWN IMMEDIATE;
Następnie: STARTUP;

Sprawdź aktualną wartość:


Mamy ustawione tak jak chcieliśmy - przy Maximum SGA Size widnieje ustawiona przez nas wartość. Jest ona podana w bajtach, a jak każdy wie 1 kB to 1024 B, a 1MB to 1024kB. Dlatego taka dziwna wartość.

Teraz nazwy buforów i nazwy parametrów:

Bufor danych - DB_CACHE_SIZE
Obszar współdzielony - SHARED_POOL_SIZE
Bufor dziennika powtórzeń - LOG_BUFFER
Bufor Javy - JAVA_POOL_SIZE
Duży bufor - LARGE_POOL_SIZE
Bufor streams - STREAMS_POOL_SIZE


Ustawiam sobie konfigurację dla siebie. Nie będę korzystał z JAVY w Oracle, ani też raczej nie planuję na ten moment jakichś wielkich backupów. Za to oczekuję szybkiego działania bazy danych bez zbędnego oczekiwania na odczyt z dysku. Ustawiam sobie więc db_cache size na 500MB (by mieć dużo rzeczy pod ręką) , java_pool_size i large_pool_size ustawiam na bardzo małe wartości. Obszarowi współdzielonemu też rzucę te 100MB, niech zna łaskę Pana :) Przynajmniej będę miał zbuforowane poparsowane zapytania więc jak będzie mi śmigał duży system to zyskam na czasie parsowania SQLi.




1 komentarz:

  1. Ja tu tak tylko z ciekawości i przypadkiem :)
    Zmiana parametrów wartości poszczególnych buforów (shared pool, cache_size itp.) przy jednoczesnym włączonym mechanizmie ASMM - Automatic Shared Memory Management, określa minimalną wartość pamięci poniżej, której Oracle nie może obciąć bufora. Czyli zmiana tych parametrów dla sga_target>0 ma bardzo istotny wpływ na cały mechanizm.
    Warto także dodać, że w 11g mamy dodatkowo AMM - Automatic Memory Management.
    No i jeszcze może najważniejsza sprawa: zmiana wielkości buforów, a szczególnie ich zmniejszanie ma ogromny wpływ na wydajność. Wszystko należy ustawić tak aby Oracle nie robił tego za często ;) Długo można by się jeszcze na ten temat rozpisywać jak to Oracle zawiesza sesje przy obcinaniu shared poool itp. itd. ale komentarz już za długi :)

    Pozdrawiam
    Oskar

    OdpowiedzUsuń