3. Globalny obszar pamięci SGA
SGA (System
Global Area) jest buforem pamięci alokowanym podczas startu
instancji. Przechowuje informacje współdzielone przez różne
procesy bazy danych. M.in przechowuje:
- Kopie danych z dysku (w buforze danych znajdującym się w SGA)
- Bufor dziennika powtórzeń
- Plany wykonania zapytań SQL
- ...
Ogólnie ujmując
wszystko to co jest potrzebne bazie danych do działania i musi być
pod ręką (w pamięci dostępnej dla serwera).
Generalnie SGA
dzieli się na kilka części.
Bufor danych
- dane do których sięgamy zapytaniem, nie zawsze muszą być
czytane z dysku. Jeśli ktoś wcześniej sięgał do danych których
nie było w tym buforze, dane te musiały zostać odczytane z dysku a
następnie wrzucone do bufora danych. Dzięki temu kiedy następna
osoba zażąda tych samych danych, nie będzie już konieczności
odczytywania ich z dysku, ponieważ będą one dostępne w buforze
danych. Czas operacji odczytu z pamięci jest nieporównywalnie
krótszy od czasu operacji odczytu z dysku. Działa to też w drugą
stronę. Zmieniane czy dodawane dane nie od razu pakowane są na
dysk, są zmieniane najpierw w buforze danych, dzięki czemu są one
szybciej dostępne. Oczywiście w pewnym momencie zapisuje je na dysk
specjalny proces (DBWR).
Wiadomo że nie
wszystkie dane mogą tu być przechowywane choćby ze względu na
pojemność takiego bufora. Jeżeli bufor się przepełni, usuwane są
dane najdawniej wykorzystywane. Jeżeli jakieś dane znajdujące się
już w buforze zostaną wykorzystane ponownie, trafiają na początek
listy. O to dba nam proces serwera. Takie działanie nazywa
algorytmem LRU (Last Recently Used).
Bufor
dziennika powtórzeń - wszystkie zmiany danych są rejestrowane.
Dzięki temu, nawet jeśli zmienione dane nie zostały jeszcze trwale
zapisane na dysk, jesteśmy w stanie je odtworzyć. Istnieją
specjalne pliki dziennika powtórzeń w których zapisywane są
wszelkie zmiany, jednak informacja zanim tam trafi, trafia do bufora
dziennika powtórzeń.
Bufor
biblioteczny - jeśli zadamy jakieś zapytanie SQL do instancji,
owo zapytanie musi najpierw zostać sprawdzone pod kątem
składniowym, również czy mamy odpowiednie uprawnienia do
odczytu/zapisu konkretnych danych. Oracle musi też wymyślić jak
wykonać dane polecenie tak by zostało ono zakończone jak
najszybciej. W tym celu wymyśla kilka planów wykonania zapytania, a
następnie wybiera najbardziej optymalny. Gdyby Oracle za każdym
razem miał wykonywać te same operacje dla tych samych zapytań
byłaby to strata czasu. Dlatego wykonuje je za pierwszym razem, a
następnie wrzuca właśnie do bufora bibliotecznego. Dzięki temu
jeśli inny użytkownik wykona to samo zapytanie, Oracle sięgnie
sobie do bufora bibliotecznego w którym już ma opracowany plan
wykonania zapytania, sprawdzone czy zapytanie jest poprawne
składniowo i nie musi tego wszystkiego wykonywać od początku.
Bufor
słownika - w Oracle funkcjonują specjalne słowniki w których
zapisane jest jakie w bazie znajdują się obiekty, jakie są
pomiędzy nimi zależności i kto ma do nich uprawnienia. Do tych
danych trzeba sięgać często, właściwie to przy każdym
zapytaniu. Dlatego słowniki te są ładowane do pamięci, dzięki
czemu jest do nich szybszy dostęp.
Ponadto w SGA
znajdują się jeszcze inne bufory:
JAVA_POOL -
czyli bufor służący do przechowywania kodu Java. W Oracle
możemy przechowywać poza danymi również klasy Javy które w
trakcie wykonania potrzebują pewnej przestrzeni pamięci - do tego
służy właśnie bufor JAVA_POOL.
LARGE_POOL
- Opcjonalny bufor który jest wykorzystywany przy okazji dużych
operacji dyskowych np. backupu danych.
STREAMS_POOL
- specjalny bufor wykorzystywany przy replikacji bazy danych.
Bufor danych
domyślnie ma jedną część - DEFAULT. W razie potrzeby
możemy jeszcze go podzielić na część KEEP, RECYCLE,
oraz nK BUFFER.
Bufor KEEP
-służy do przechowywania obiektów które chcemy trwale
przechowywać w pamięci, w taki sposób by nie zostały "wypchnięte"
przez nowe bloki danych. Przykładowo jeśli jakaś tabela jest
wykorzystywana często, chcemy by zawsze był do niej szybki dostęp.
W takim wypadku musimy stworzyć taki bufor i określić że ta
tabela ma byc przechowywana w nim.
Bufor RECYCLE
- do tego bufora możemy załadować obiekty z których korzystamy
sporadycznie i nie chcemy by zajmowały nam cenne miejsce w buforze
DEFAULT. Tu również musimy włączyć korzystanie z tego bufora i
określić że dany obiekt ma być przechowywany właśnie w nim.
Bufor nK-
Bufor do przechowywania obiektów o niestandardowej wielkości
bloków. Nie będziemy się tym tutaj zajmować.
]
Obszar
pamięci PGA
Ponieważ
procesy serwera aby wykonać dla nas jakieś czynności też
potrzebują pewnej ilości pamięci, alokowany jest dla każdego z
nich obszar PGA. To specjalny wydzielony kawałek pamięci w którym
proces serwera może :
- Sortować dane
- Trzymać informacje o sesji użytkownika
- Przechowywać informacje o zmiennych, tablicach, kursorach, danych przetwarzanych przez proces.
Oczywiście w
momencie zakończenia sesji użytkownika bufor ten nie jest już
potrzebny i alokowana dla niego pamięć jest zwalniana.
Bardzo przydatny artykuł !
OdpowiedzUsuńBardzo fajnie opisane. Brawo !
OdpowiedzUsuń