administracja bazami danych

Transkrypt

administracja bazami danych
ADMINISTRACJA
BAZAMI DANYCH
Rozdziaáy 27-29
Rok akademicki – 2007/2008
Notatki do przedmiotu „Administracja bazami danych”
SPIS TREĝCI
27. GàÓWNA KONCEPCJA DZIAàANIA ORACLE DATA GUARD (ODG) ................................................................................................... 278
§ 27.1. NiezawodnoĞü wedáug Oracle a Data Guard ............................................................................................................................................ 278
§ 27.2. Funkcjonowanie i ogólny zarys mechanizmu. ......................................................................................................................................... 280
§ 27.3. Logiczna i fizyczna zastĊpcza baza danych ............................................................................................................................................. 283
27.3.1. Fizyczna zapasowa baza danych ..................................................................................................................................................... 283
27.3.2. Logiczna zapasowa baza danych ..................................................................................................................................................... 286
§ 27.4. Podsumowanie .......................................................................................................................................................................................... 288
28. STROJENIE INSTANCJI ................................................................................................................................................................................... 290
§ 28.1. Strojenie pamiĊci....................................................................................................................................................................................... 292
28.1.1. Strojenie bufora dziennika powtórzeĔ (REDO BUFFERS) ............................................................................................................ 293
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
SPIS TREĝCI
28.1.2. Strojenie przydziaáu prywatnego obszaru poleceĔ SQL ................................................................................................................. 295
28.1.3. Strojenie pamiĊci wspóádzielonej (Shared pool)...................................................................................................................... 296
28.1.4. Strojenie bufora danych ................................................................................................................................................................... 304
28.1.5. Zmniejszenie zajĊtoĞci pamiĊci operacyjnej ................................................................................................................................... 306
§ 28.2. Strojenie wykorzystania urządzeĔ dyskowych ......................................................................................................................................... 307
28.2.1. Diagnostyka obciąĪenia urządzeĔ dyskowych ................................................................................................................................ 307
28.2.2. RównowaĪenie obciąĪenia............................................................................................................................................................... 309
28.2.3. Migracja i áaĔcuchowanie bloków................................................................................................................................................... 311
28.2.4. Unikanie dynamicznego zarządzania rozszerzeniami ..................................................................................................................... 316
28.2.5. Strojenie procesu DBWR ................................................................................................................................................................ 318
28.2.6. Strojenie segmentów wycofywania ................................................................................................................................................. 318
28.2.7. Strojenie serwera w trybie SMU- System Management Undo ....................................................................................................... 319
28.2.8. Strojenie serwera w trybie RBU ...................................................................................................................................................... 321
§ 28.3. Strojenie punktów kontrolnych................................................................................................................................................................. 321
§ 28.4. Strojenie sortowaĔ .................................................................................................................................................................................... 323
§ 28.5. Zmniejszenie rywalizacji o semafory bufora dziennika powtórzeĔ ......................................................................................................... 325
§ 28.6. Minimalizacja rywalizacji o listĊ wolnych bloków .................................................................................................................................. 328
29. WYZWALACZE INSTEAD OF I SYSTEMOWE ............................................................................................................................................ 330
§ 29.1. Wyzwalacze INSTEAD OF ...................................................................................................................................................................... 330
§ 29.2. Wyzwalacze systemowe ........................................................................................................................................................................... 330
§ 29.3. Wyzwalacze a transakcje autonomiczne .................................................................................................................................................. 333
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
- 277 -
27. GàÓWNA KONCEPCJA DZIAàANIA ORACLE DATA GUARD
- 278 -
27. GàÓWNA KONCEPCJA DZIAàANIA ORACLE DATA GUARD (ODG)
Oprócz podstawowych narzĊdzi backupu zabezpieczających przed utratą danych Oracle wprowadziáo do
swojego produktu narzĊdzie pod nazwa Oracle Data Guard (ODG).
System oparty o takie rozwiązanie, skáada siĊ z bazy produkcyjnej1 oraz z baz zapasowych2, gotowych
w kaĪdej chwili przejąü kontrolĊ w przypadku awarii bazy gáównej.
W Oracle Database 10g rozbudowano mechanizm Data Guard, wprowadzając opcjonalną moĪliwoĞü
kompresji i szyfrowania zapisów w dzienniku powtórzeĔ.
§ 27.1. NiezawodnoĞü wedáug Oracle a Data Guard
x
OdtwarzalnoĞü – jest to cecha pozwalająca na przywrócenie stanu systemu sprzed awarii tj.
poczynając od drobnych pomyáek typu usuniĊcie wiersza z tabeli lub caáej tabeli, a skoĔczywszy na
awarii platformy sprzĊtowej, gdzie utracie ulega wiĊkszoĞü danych.
x CiągáoĞü pracy – jest to dobrze zdefiniowany poziom dostĊpnoĞci, który najczĊĞciej wyraĪany jest
jako procentowa wartoĞü nieprzerwanego jego dziaáania w ciągu caáego roku.
1
2
Ang. Primary database – czasami nazywana teĪ bazą produkcyjną na której pracują aplikacje klienckie
Ang. Standby database – baza gotowa do przejĊcia roli bazy gáównej w przypadku jej awarii
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
27. GàÓWNA KONCEPCJA DZIAàANIA ORACLE DATA GUARD
-279-
x Wykrywanie uszkodzeĔ – potencjalne zagroĪenia powinny byü automatycznie wykrywane przez
odpowiednie narzĊdzia systemu oraz przekazywane do informacji osoby administrującej nim.
Analiza moĪliwoĞci Oracle Data Guard Ğwiadczy, Īe system opierający na nim swoją dziaáalnoĞü posiada
wszystkie wymienione wyĪej cechy. Jest on odtwarzalny, a moĪliwoĞü utraty danych w wypadku posiadania
kilku baz zapasowych jest redukowana do minimum.
DziĊki mechanizmowi fast-start failover klienci korzystający z systemu w wiĊkszoĞci przypadków nie
są nawet w stanie zauwaĪyü, Īe zaszáa awaria, poniewaĪ podczas usterki bazy produkcyjnej jedna z baz
zastĊpczych przejmuje automatycznie jej rolĊ.
Zaawansowane monitorowanie i zarządzanie pracą caáego sytemu opartego o Data Guard dostĊpne jest
z poziomu Enterprise Menager (Oracle 10g, 11g), przez co w áatwy sposób moĪna wykryü i zapobiec wielu
problemom mogącym doprowadziü w póĨniejszym czasie do awarii.
Fizyczne bazy zapasowe w Oracle Data Guard mogą byü uĪywane do generowania raportów, dziĊki
czemu znacznie zwiĊkszona zostaje wydajnoĞü systemu.
Technologia Data Guard zapewnia nie tylko wysoką niezawodnoĞü systemu i dostĊpnoĞü, ale potrafi
równieĪ znacznie zwiĊkszyü jego wydajnoĞü.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
27. GàÓWNA KONCEPCJA DZIAàANIA ORACLE DATA GUARD
-280-
§ 27.2. Funkcjonowanie i ogólny zarys mechanizmu.
PoniĪszy rysunek przedstawia nam ogólną koncepcjĊ funkcjonowania Oracle Data Guard.
Rysunek 27.2.1. Ogólna koncepcja funkcjonowania Oracle Data Guard
Do poprawnego dziaáania Data Guard muszą byü speánione nastĊpujące wymagania:
x Gáówna baza danych musi dziaáaü w trybie ARCHIVELOG – tryb archiwizacji dziennika powtórzeĔ.
x KaĪda z baz musi posiadaü swój plik kontrolny.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
27. GàÓWNA KONCEPCJA DZIAàANIA ORACLE DATA GUARD
-281-
Konfiguracja Oracle Data Guard opiera siĊ na jednej bazie produkcyjnej oraz jednej lub wiĊcej
bazach zastĊpczych.
ODG umoĪliwia skonfigurowanie do dziewiĊciu baz zastĊpczych(???) dla produkcyjnego systemu
serwera bazy danych.
Bazy te są poáączone ze sobą za pomocą sieci Oracle Net i mogą znajdowaü siĊ w dowolnych
lokalizacjach.
WaĪne jest, aby miaáy zapewnione swobodną transmisjĊ plików dziennika powtórzeĔ.
Przykáadowo moĪemy posiadaü jedną bazĊ zastĊpczą na maszynie, na której znajduje siĊ baza
produkcyjna oraz kilka baz zapasowych rozproszonych na zdalnych platformach sprzĊtowych.
Gáówna baza danych (produkcyjna) to baza, z którą áączy siĊ wiĊkszoĞü aplikacji. MoĪe ona byü záoĪona
z jednej instancji lub wielu instancji tej samej bazy danych.
Zapasowe bazy uaktualniane są poprzez aplikowanie do nich zmian, które zarejestrowane zostaáy
w plikach dziennika powtórzeĔ gáównej bazy produkcyjnej.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
27. GàÓWNA KONCEPCJA DZIAàANIA ORACLE DATA GUARD
-282-
Transfer danych w kierunku z bazy gáównej do zapasowej jest automatyczny i moĪe odbywaü siĊ w
jednym z dwóch trybów:
x synchronicznym;
x asynchronicznym.
W trybie synchronicznym, kaĪda z wprowadzonych i zatwierdzonych zmian na bazie produkcyjnej nie
zostanie utracona w przypadku jej nieoczekiwanej awarii. Dzieje siĊ tak, poniewaĪ transakcje gáównej
bazy danych zostają zatwierdzone dopiero po pomyĞlnej ich transmisji do co najmniej jednej bazy
zapasowej. Tryb ten jest zazwyczaj wykorzystywany przy dziaáaniu ODG, gdzie skupiamy siĊ gáównie na
maksymalnej ochronie danych i maksymalnej dostĊpnoĞci.
JeĪeli zaĞ podczas konfiguracji, najwaĪniejsze bĊdzie dla nas uzyskanie maksymalnej wydajnoĞci, to
wtedy dane dziennika powtórzeĔ bazy produkcyjnej przesyáane bĊdą w trybie asynchronicznym do
pozostaáych baz zapasowych.
Oznacza to, Īe transakcje na bazie gáównej mogą byü zatwierdzane przed ich poprawnym
przetransmitowaniem na bazy zapasowej.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
27. GàÓWNA KONCEPCJA DZIAàANIA ORACLE DATA GUARD
-283-
WiąĪe siĊ to z czĊĞciową rozbieĪnoĞcią danych pomiĊdzy bazą produkcyjną, a zapasowymi co moĪe
prowadziü do utraty niektórych informacji podczas awarii.
§ 27.3. Logiczna i fizyczna zastĊpcza baza danych
27.3.1. Fizyczna zapasowa baza danych
Zapasowe bazy danych mogą byü fizycznymi albo logicznymi kopiami bazy produkcyjnej.
Fizyczna baza danych jest kopią bazy produkcyjnej, synchronizowaną poprzez aplikowanie binarnych
zmian zarejestrowanych w dziennikach powtórzeĔ bazy produkcyjnej.
MoĪe ona pracowaü w trybie tylko do odczytu co pozwala na znaczne zwiĊkszenie mocy obliczeniowej
caáego systemu, niezbĊdnej miĊdzy innymi do szybkiego generowania raportów.
Spójrzmy na przykáad dziaáania bazy danych z mechanizmem Oracle Data Guard opartym o fizyczną
zapasową bazĊ danych i transportem danych poprzez proces ARC.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
27. GàÓWNA KONCEPCJA DZIAàANIA ORACLE DATA GUARD
-284-
Rysunek 27.3.1.1. ODG z bazą fizyczną i przesyáaniem danych przez proces ARC0
W przypadku dziaáania takiej konfiguracji bazy danych, wszystkie transakcje aplikowane na bazĊ
produkcyjną trafiają do procesu LGWR3, który to rejestruje w bieĪących plikach dziennika powtórzeĔ zmiany
3
LGWR – proces odpowiedzialny za rejestrowanie w bieĪących plikach dziennika powtórzeĔ wszystkich zmian wprowadzonych do bazy danych
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
27. GàÓWNA KONCEPCJA DZIAàANIA ORACLE DATA GUARD
-285-
wprowadzone na tą bazĊ.
NastĊpnie pliki dziennika powtórzeĔ są archiwizowane na bazie gáównej przez proces ARC4 oraz
przesyáane do baz zapasowych.
Proces RFS5 na bazie zapasowej odbiera zarchiwizowane pliki z dziennika powtórzeĔ bazy produkcyjnej
i zapisuje je na bazie zastĊpczej.
W dalszym kroku pliki te przejmuje proces MRP6, który to aplikuje zmiany na fizyczną bazĊ danych.
W zaleĪnoĞci od trybu ochrony bazy danych moĪliwe jest odtwarzanie plików dziennika powtórzeĔ na
bazie zapasowej.
W przypadku, gdy czĊĞü plików przesyáanych z bazy produkcyjnej nie dotaráo do bazy czuwającej na
skutek awarii bądĨ duĪego obciąĪenia sieci, powinna nastąpiü operacja odtworzenia transmisji tych plików.
Odpowiedzialny jest za to proces FAL7.
Fizyczne bazy danych wymagają do poprawnego dziaáania identycznych platform sprzĊtowoprogramowych na wszystkich wspóádziaáających ze sobą bazach.
4
ARC – proces archiwizujący pliki dziennika powtórzeĔ
RFS – proces odbierający pliki dziennika powtórzeĔ z bazy produkcyjnej
6
MPR – proces aplikujący zmiany z plików dziennika powtórzeĔ do fizycznej bazy danych
7
FAL – proces, który odtwarza powstaáe na skutek awarii transmisji danych dziury w plikach dziennika powtórzeĔ przesáanych do czuwającej bazy danych
5
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
27. GàÓWNA KONCEPCJA DZIAàANIA ORACLE DATA GUARD
-286-
Tak restrykcyjnych wymagaĔ nie posiada inny typ baz zapasowych, a mianowicie bazy logiczne.
27.3.2. Logiczna zapasowa baza danych
Logiczna baza danych jest logiczną kopiĊ obiektów (indeksów, widoków, tabel itp.) i danych z bazy
gáównej poprzez aplikowanie poleceĔ SQL.
Polecenia SQL wydobywane są za pomocą narzĊdzia LogMiner z przesyáanych do baz zapasowych
zarchiwizowanych plików dziennika powtórzeĔ bazy produkcyjnej.
Logiczne zapasowe bazy danych pracują w trybie odczyt-zapis i mogą byü dodatkowo wykorzystywane
jako hurtownie danych.
PoniĪszy rysunek przedstawia pracĊ systemu opartego o logiczną zapasową bazĊ danych.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
27. GàÓWNA KONCEPCJA DZIAàANIA ORACLE DATA GUARD
-287-
Rysunek 27.3.2.1. ODG z bazą logiczną i przesyáem danych przez proces ARC0
Gáówną róĪnicą w stosunku do bazy fizycznej jest tu proces aplikujący zmiany na logiczną bazĊ
zapasową, w tym przypadku jest to LSP8.
8
LSP - proces aplikujący polecenia SQL znajdujące siĊ w plikach dziennika powtórzeĔ na bazĊ logiczną
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
27. GàÓWNA KONCEPCJA DZIAàANIA ORACLE DATA GUARD
-288-
Zarządzanie zarówno bazą produkcyjną jak i zapasowymi moĪe odbywaü siĊ z linii poleceĔ SQL lub
z poziomu tzw. zarządcy Data Guard, który posiada zarówno interfejs graficzny (zintegrowany w Oracle
Enterprise Manager) jak i tekstowy (DGMGRL).
Wszystkie zadania związane z konfiguracją Ğrodowiska ODG moĪna zautomatyzowaü w prosty sposób
przez wykorzystanie Oracle Enterprise Manager.
§ 27.4. Podsumowanie
Zalety:
Administratorzy baz opartych o ODG nie muszą martwiü siĊ o codzienne rĊczne wykonywanie kopii
bezpieczeĔstwa, poniewaĪ ciągle aktualizowane bazy zapasowe wyrĊczają ich z tego obowiązku.
DuĪa elastycznoĞü pozwalająca na zapewnienie zwiĊkszonej wydajnoĞci oraz wzrostu niezawodnoĞci
i dostĊpnoĞci systemu bazodanowego przy stosunkowo maáych nakáadach potrzebnych na wzrost obu tych
cech.
OdpornoĞü na nieplanowane awarie, jak i zaplanowane przestoje w pracy gáównej bazy, co zapewnia
duĪą dostĊpnoĞü systemu.
Wysoka ochrona danych skáadowanych w bazie. ODG posiada mechanizmy, dziĊki którym awaria
fizyczna plików na produkcyjnej bazie danych nie zostanie rozpropagowana na bazy zapasowe.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
27. GàÓWNA KONCEPCJA DZIAàANIA ORACLE DATA GUARD
-289-
Wzrost efektywnoĞci wykorzystywanych zasobów. Fizyczne zapasowe bazy danych bĊdące
aktualizowane zarchiwizowanymi plikami dziennika powtórzeĔ mogą byü otwarte w trybie tylko do
odczytu. DziĊki temu moĪna w swobodny sposób uĪyü ich jako baz danych, na których wykonywane są
róĪnego rodzaju analizy. Pozwala to w znacznej mierze odciąĪyü gáówny serwer bazy danych biorąc pod
uwagĊ, Īe to wáaĞnie zapytania przewaĪnie wykorzystują duĪą moc obliczeniową procesora oraz iloĞü
dostĊpnej pamiĊci operacyjnej.
Wysoka ochrona danych skáadowanych w bazie. ODG posiada mechanizmy, dziĊki którym awaria
fizyczna plików na produkcyjnej bazie danych nie zostanie rozpropagowana na bazy zapasowe.
Jednak pomimo wielu plusów przemawiających na korzyĞü ODG podczas pracy z tym produktem jest
takĪe kilka cech negatywnych.
Jedną z nich jest wystĊpowanie maáego opóĨnienia pomiĊdzy zawartoĞcią danych z gáównej bazy,
a bazami zastĊpczymi. MoĪe to niekiedy doprowadziü do utraty niewielkiej iloĞci danych. Jednak iloĞü
informacji, które mogą zostaü zniszczone zaleĪy tak naprawdĊ od administratora, poniewaĪ to on okreĞla jak
wielkie ma byü to opóĨnienie. Poprzez analizĊ dziaáania systemu powinien on w jak najlepszy sposób
dostosowaü czĊstotliwoĞü archiwizacji mając na wzglĊdzie zarówno bezpieczeĔstwo danych i moĪliwoĞci
wydajnoĞciowe platformy sprzĊtowej.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 290 -
28. STROJENIE INSTANCJI
Przed przystąpieniem do omawiania poszczególnych kroków strojenia instancji naleĪy najpierw wyjaĞniü
czym jest strojenie.
Shared pool - Obszar wspóádzielony
Database buffers
Bufor danych
Shared SQL Area
Redo
buffers
Bufor
dziennika
powtórzeĔ
Wspóádzielony obszar poleceĔ SQL
Dictionary cache
Bufor sáownika danych
Inne
Rysunek 28.1. Globalny obszar systemowy SGA.
Strojenie jest procesem dokonywania modyfikacji w sprzĊcie lub oprogramowaniu, którego celem jest
zmiana wáaĞciwoĞci systemu. NaleĪy podkreĞliü, Īe w powyĪszej definicji nie wystĊpuje sáowo wydajnoĞü,
poniewaĪ strojenie nie koniecznie ma sáuĪyü do polepszania wydajnoĞci.9
9
Whalen Ed.: Oracle – Optymalizacja wydajnoĞci. Helion, 2003 – str. 17
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 291 -
KoniecznoĞü strojenia moĪe zachodziü m.in. z nastĊpujących powodów:
Strojenie przetwarzania. Strojenie polegające na takim skonfigurowaniu systemu, aby moĪliwe byáo
przetwarzanie najwiĊkszej iloĞci danych w najkrótszym czasie.
Strojenie czasu odpowiedzi. Polega na takim skonfigurowaniu systemu, aby Īądane dane zwracane byáy
jak najszybciej.
Strojenie systemu dla duĪej liczby uĪytkowników. Strojenie polegające na skonfigurowaniu systemu,
aby mógá on obsáugiwaü jednoczeĞnie jak najwiĊkszą liczbĊ uĪytkowników.
Strojenie czasu áadowania. Strojenie polegające na poprawie parametrów procesu áadowania.
Strojenie wydajnoĞci procesu tworzenia kopii zapasowych i odtwarzania. Strojenie, którego celem
jest zminimalizowanie czasu tworzenia kopii bezpieczeĔstwa i odtwarzania systemu po awarii.
Do gáównych etapów strojenia instancji bazy danych Oracle naleĪą:
x
strojenie przydziaáu pamiĊci (SGA, PGA),
x
strojenie wykorzystania urządzeĔ dyskowych,
x
strojenie segmentów wycofywania (Rollback segments, undomanagement),
x
strojenie punktów kontrolnych (Checkpoint),
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 292 -
x
strojenie sortowaĔ,
x
zmniejszenie rywalizacji o semafory bufora dziennika powtórzeĔ,
x
minimalizacja rywalizacji o listĊ wolnych bloków.
§ 28.1. Strojenie pamiĊci
Instancja systemu Oracle przechowuje dane w dwóch miejscach: w pamiĊci oraz na dysku.
Przechowywanie danych w pamiĊci operacyjnej powoduje bardzo wysoką wydajnoĞü, ale jednoczeĞnie
wysoki koszt.
Z drugiej strony dysk moĪe przechowywaü ogromną iloĞü danych przy jednoczesnym relatywnie niskim
koszcie w stosunku do pamiĊci.
Biorąc pod uwagĊ wydajnoĞü osiąganą przy przechowywaniu danych w pamiĊci, naleĪy przechowywaü
w niej dane zawsze kiedy to moĪliwe. UwzglĊdniając ogromną iloĞü danych oraz liczbĊ uĪytkowników,
którzy potrzebują tych danych, trzeba uwzglĊdniü moĪliwoĞü wystĊpowania konfliktów związanych
z pamiĊcią. ĩeby moĪliwie efektywnie wykorzystaü uĪycie pamiĊci, naleĪy osiągnąü równowagĊ miĊdzy
pamiĊcią uĪywana przez bufor systemu Oracle oraz pamiĊcią wykorzystywaną przez uĪytkowników.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 293 -
Strojenie pamiĊci w instancji systemu Oracle obejmuje nastĊpujące obszary:
x
strojenie bufora dziennika powtórzeĔ (Redo buffers),
x
strojenie przydziaáu prywatnego obszaru poleceĔ SQL (Shared SQL Area) ,
x
strojenie pamiĊci wspóádzielonej (Shared pool),
x
strojenie bufora danych (Database buffers),
x
zmniejszanie zajĊtoĞci pamiĊci operacyjnej.
28.1.1. Strojenie bufora dziennika powtórzeĔ (REDO BUFFERS)
W przypadku systemów wyposaĪonych w szybki procesor i stosunkowo wolny dysk, pozostaáa czĊĞü
bufora moĪe byü w caáoĞci zapeániona zanim LGWR zdąĪy zapisaü odpowiednia porcjĊ informacji na dysk.
Wówczas bufor ten moĪe staü siĊ ”wąskim gardáem” systemu. Z tego powodu wiĊkszy rozmiar bufora
dziennika powtórzeĔ powoduje mniejsze prawdopodobieĔstwo wystąpienia kolizji pomiĊdzy nowymi
wpisami a wpisami starymi – bĊdącymi w trakcie zapisu na dysk.
PoniewaĪ
rozmiar
bufora
dziennika
powtórzeĔ
(zdefiniowany
parametrem
inicjalizacyjnym
LOG_BUFFER) jest stosunkowo niewielki w porównaniu z caáym obszarem SGA, nawet maáe zwiĊkszenie
tego rozmiaru moĪe znacząco poprawiü wydajnoĞü.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 294 -
OkreĞlenie rywalizacji o bufor dziennika powtórzeĔ moĪna dokonaü przeglądając dynamiczną
perspektywĊ V$SYSSTAT szukając tam statystyki REDO BUFFER ALLOCATION RETRIES. Statystyki
te moĪna uzyskaü za pomocą zapytania:
SQL> SELECT name, value FROM v$sysstat
WHERE name = ‘redo buffer allocation retries’;
NAME
VALUE
redo buffer allocation retries
0
WartoĞü parametru REDO BUFFER ALLOCATION RETRIES powinna byü bliska zeru.
JeĞli liczba ta permanentnie roĞnie w trakcie dziaáania systemu, wówczas naleĪy zwiĊkszyü wielkoĞü
buforu za pomocą parametru LOG_BUFFER.
SQL> ALTER SYSTEM SET log_buffer=7024640 SCOPE=spfile;
WielkoĞü tego parametru wyraĪona jest w bajtach i powinna byü wielokrotnoĞcią rozmiaru bloku systemu
plików (parametr DB_BLOCK_SIZE).
JeĪeli powiĊkszenie bufora nie przyniesie oczekiwanych rezultatów, wówczas naleĪy rozwaĪyü:
x
usprawnienie procesów wykonywania punktu kontrolnego (CKPT),
x
poprawienie wydajnoĞci archiwizacji dziennika powtórzeĔ (byü moĪe poprzez przeniesienie
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 295 -
plików dziennika na szybsze urządzenia zewnĊtrzne / dyski).
28.1.2. Strojenie przydziaáu prywatnego obszaru poleceĔ SQL
Prywatny obszar SQL jest obszarem pamiĊci zawierającym miĊdzy innymi bufory podrĊczne. KaĪda
sesja, w której jest wykonywane zapytanie SQL, posiada taki prywatny obszar. Zmniejszenie tego obszaru
moĪe okazaü siĊ efektywne w Ğrodowisku, gdzie pracuje wielu uĪytkowników.10
Strojenie prywatnego obszaru SQL polega na zidentyfikowaniu zbĊdnych parsowaĔ i nastĊpnie
ograniczeniu ich liczby. PoniewaĪ operacja parsowania nie musi byü wykonywana czĊsto (jest wykonywana
w miarĊ udostĊpniania pamiĊci), toteĪ zmniejszenie liczby pasowaĔ znacząco wpáywa na wydajnoĞü
systemu.
Aby okreĞliü liczbĊ niepotrzebnych parsowaĔ moĪna wykorzystaü widok V$SQLAREA wykonując
zapytanie:
SQL> SELECT sql_text, parse_calls, executions FROM v$sqlarea;
SQL_TEXT
select * from osoby
select * from pensje where pensja > 2000
10
Whalen Ed.: Oracle – Optymalizacja wydajnoĞci. Helion, 2003 – str.50
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
PARSE_CALLS
32
2
EXECUTIONS
32
24
28. STROJENIE INSTANCJI
- 296 -
Kiedy wartoĞü PARSE_CALLS jest bliska wartoĞci EXECUTIONS, wówczas liczba parsowaĔ jest zbyt
duĪa (kursory nie są wielokrotnie wykorzystywane).
Aby aplikacja mogáa wielokrotnie wykorzystywaü te same kursory musi posiadaü wystarczająco duĪą
pamiĊü podrĊczną.
WielkoĞü tĊ moĪna zmieniaü za pomocą parametru konfiguracyjnego OPEN_CURSORS. Parametr ten
okreĞla maksymalną liczbĊ otwartych kursorów przez aplikacjĊ uĪytkownika. Im wiĊksza jest wartoĞü tego
parametru, tym wiĊcej pamiĊci prywatnej rezerwuje sesja uĪytkownika i tym wiĊksze są moĪliwoĞci
przechowywania informacji związanej z kursorami. Warunkiem koniecznym wielokrotnego wykorzystania
kursorów jest takĪe aby aplikacja nie zwalniaáa obszaru pamiĊci prywatnej przy zamkniĊciu kursora lub przy
zakoĔczeniu transakcji.
28.1.3. Strojenie pamiĊci wspóádzielonej (Shared pool)
Aby zoptymalizowaü pamiĊü wspóádzieloną, naleĪy przeanalizowaü jej poszczególne czĊĞci. PamiĊü
wspóádzielona skáada siĊ z bibliotecznej pamiĊci podrĊcznej i bufora sáownika danych.
DostĊp do informacji w pamiĊci wspóádzielonej jest o wiele czĊstszy niĪ do bufora danych, zatem
odpowiednie dostrojenie tego obszaru ma bardzo istotne znaczenie.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 297 -
BIBLIOTECZNA PAMIĉû PODRĉCZNA
Biblioteczna pamiĊü podrĊczna zawiera wspóádzielone obszary SQL oraz PL/SQL. Przechowują one
m.in. ostatnio wykonywane zapytania(na wypadek powtórzenia takiego samego zapytania przez któregoĞ
z uĪytkowników), oraz kody wykonywanych procedur, funkcji i pakietów PL/SQL.
Strojenie bibliotecznej pamiĊci podrĊcznej polega gáównie na zwiĊkszeniu tzw. wspóáczynnika
trafieĔ(ang. hit ratio) oraz zwiĊkszeniu szybkoĞci uzyskiwania dostĊpu do bufora biblioteki, uzyskiwane
poprzez dáuĪsze przechowywanie rzadziej wykonywanych zapytaĔ SQL.
Nietrafienie w bufor moĪe zajĞü, gdy parsowane jest zapytanie a jego poprzednio sparsowana postaü juĪ
nie istnieje buforze lub gdy próbujemy wykonaü zapytanie, a obszar pamiĊci wspóáuĪytkowanego SQL
przechowujący sparsowaną postaü tego zapytania zostaá zwolniony.
Korzystanie z wczeĞniej sparsowanych zapytaĔ SQL i PL/SQL jest moĪliwe jeĞli speánione bĊdą poniĪsze
kryteria:
ciąg znaków zapytania SQL musi byü identyczny z ciągiem znaków zapytania przechowywanego
w buforze (dotyczy to takĪe: spacji, komentarzy, wielkoĞci liter , itp.).
PoniĪsze zapytania nie mogą uĪywaü tego samego wspóádzielonego obszaru SQL:
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 298 -
SQL> SELECT * FROM Osoby;
SQL> SELECT * FROM osoby;
SQL> SELECT *
FROM osoby;
Referencje do obiektów schematu w zapytaniu SQL muszą wskazywaü na te same obiekty w tym samym
schemacie jak w zapytaniu przechowywanym w buforze. Przykáadowo jeĞli schematy uĪytkowników Jan
oraz Adam posiadają tabelĊ osoby, i jeĞli ci uĪytkownicy wykonają zapytanie:
SELECT * FROM osoby;
wówczas nie moĪliwe bĊdzie wspóádzielonie tego samego obszaru SQL.
MoĪliwe to byáoby gdyby obaj wykonali np. zapytanie:
SQL> SELECT * FROM adam.osoby;
Zmienne wiązane w zapytaniach SQL muszą mieü taką samą nazwĊ i byü tego samego typu. Przykáadowo
poniĪsze zapytania nie bĊdą uĪywaáy tego samego obszaru SQL:
SQL> SELECT * FROM osoby WHERE wydzial=:wydzial_nr;
SQL> SELECT * FROM osoby WHERE wydzial=:w_nr;
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 299 -
Zapytania SQL muszą mieü plany wykonania wyznaczone w tym samym trybie pracy optymalizatora.
W przypadku uĪycia optymalizatora kosztowego identyczny musi byü teĪ cel optymalizacji.
Statystyki opisujące efektywnoĞü bibliotecznej pamiĊci podrĊcznej są zawarte w perspektywie
V$LIBRARYCACHE. Najistotniejszymi kolumnami w tej tabeli są kolumny: PINS oraz RELOADS.
Pierwsza kolumna zawiera informacje o liczbie odwoáaĔ do obiektu znajdującego siĊ w buforze, natomiast
druga informuje o liczbie odwoáaĔ nietrafionych w bufor, powodujących ponowne zaáadowanie obiektu do
bufora. Aby wyĞwietliü liczbĊ nietrafieĔ do bufora moĪna posáuĪyü siĊ poniĪszym zapytaniem:
SQL> SELECT SUM(reloads) “nietrafieĔ”,
SUM(pins) “odwoáania do obiektu”,
100*(SUM(reloads)/SUM(pins)) “wsp. nietrafieĔ %”
FROM v$librarycache;
nietrafieĔ
odwoáania do obiektu
WSP. nietrafieĔ %
18
2821
0,638072
Z powyĪszego, przykáadowego raportu wynika, Īe wszystkich odwoáaĔ do SQL, PL/SQL oraz innych
obiektów byáo w sumie 2821, z czego 18 musiaáo zostaü powtórnie zaáadowane. Z tego wynika, iĪ tylko
0,63% zapytaĔ musiaáo zostaü sparsowanych powtórnie.
MoĪna równieĪ wygenerowaü podobny raport z podziaáem na typy obiektów:
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 300 -
SQL> SELECT namespace “typ objektu”, SUM(reloads) “nietrafieĔ”,
SUM(pins) “odwoáania”, 100*(SUM(reloads)/SUM(pins)) “wsp.nietrafieĔ %”
FROM v$librarycache;
typ
nietrafieĔ
odwoáania
wsp.nietrafieĔ %
SQL AREA
TABLE/PROCEDURE
BODY
TRIGGER
INDEX
CLUSTER
OBJECT
6
8
0
0
0
0
0
1426
402
0
0
24
16
0
0,420757
1,99005
0
0
0
0
0
8 rows selected.
Wspóáczynnik nietrafieĔ powinien byü mniejszy niĪ 1. JeĞli tak nie jest naleĪy podjąü kroki zmierzające
do obniĪenia tej wartoĞci. MoĪna tego dokonaü poprzez wykonywanie identycznych zapytaĔ lub przez
zwiĊkszenie rozmiaru bibliotecznej pamiĊci podrĊcznej za pomocą parametru konfiguracyjnego
SHARED_POOL_SIZE.
Nie naleĪy jednak przydzielaü wiĊcej pamiĊci niĪ jest fizycznie dostĊpne, gdyĪ stronicowanie pamiĊci
moĪe caákowicie zniweczyü zalety bufora biblioteki.11
11
Whalen Ed.: Oracle – Optymalizacja wydajnoĞci. Helion, 2003 – str.53
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 301 -
STROJENIE BUFORA SàOWNIKA DANYCH
Bufor sáownika danych jest zbiorem tabel i perspektyw zawierających informacje o wszystkich obiektach
bazy danych. Przechowywane są tu informacje, dotyczące miĊdzy innymi: uĪytkowników i ich uprawnieĔ,
wiĊzów integralnoĞci zdefiniowanych na tabelach bazy, nazw i typów danych wszystkich kolumn i tabel,
alokacji przestrzeni wykorzystywanej na potrzeby schematów obiektów.
Strojenie bufora sáownika danych odgrywa znaczącą rolĊ w caáym procesie strojenia instancji, gdyĪ
ewentualne „wąskie gardáa” istniejące w tym buforze są odczuwalne przez wszystkich uĪytkowników.
Aby sprawdziü wydajnoĞü bufora sáownika danych naleĪy posáuĪyü siĊ statystykami zawartymi
w dynamicznej perspektywie V$ROWCACHE.
NajwaĪniejszymi kolumnami w tej perspektywie są kolumny: GETS, GETMISSES.
Kolumna GETS zawiera liczbĊ odwoáaĔ do obiektu, natomiast kolumna GETMISSES zawiera liczbĊ
odwoáaĔ do obiektu zakoĔczonych nietrafieniem w bufor.
Aby wyĞwietliü wspóáczynnik nietrafieĔ moĪna posáuĪyü siĊ poniĪszym zapytaniem:
SQL> SELECT SUM(getmisses) Ile_nietrafien,
SUM(gets) Ile_odwoáan,
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 302 -
100*(SUM(getmisses)/SUM(gets)) Wspolczynnik_nietrafien
FROM v$rowcache;
Ile_nietrafien
Ile_odwoáan
Wspolczynnik_nietrafien
452
2478
18,24052
JeĞli chcielibyĞmy obejrzeü statystykĊ nietrafieĔ dla poszczególnych typów obiektów sáownika, wówczas
naleĪaáoby wykonaü nastĊpujące zapytanie:
SQL> SELECT parameter Typ,getmisses Nietrafien,
gets Odwolania,
100*(SUM(getmisses)/SUM(gets)) Wspolczynnik_ nietrafien
FROM v$rowcache;
Typ
dc_free_extents
dc_used_extents
dc_segments
dc_tablespaces
dc_tablespace_quotas
dc_files
dc_users
dc_rollback_segments
Nietrafien Odwolania Wspolczynnik_nietrafien
0
0
184
3
0
0
25
21
0
0
518
21
0
0
126
235
35,52123
14,28571
19,84126
8,93617
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
dc_objects
dc_global_oids
dc_constraints
dc_objects_ids
dc_sequences
dc_usernames
dc_database_links
dc_histogram_defs
dc_table_scns
...
- 303 -
167
6
0
164
1
10
0
24
0
...
685
16
0
687
1
192
0
24
0
...
24,37956
37,5
100
5,20833
100
...
„W przypadku intensywnie wykorzystywanego bufora sáownika wspóáczynnik nietrafieĔ nie powinien
byü wiĊkszy niĪ 10-15%.
JeĪeli wspóáczynnik ten roĞnie w trakcie pracy serwera, naleĪy zwiĊkszyü iloĞü pamiĊci dla tego bufora
przez podniesienie wartoĞci tego samego parametru, co dla bufora biblioteki – SHARED_POOL_SIZE.”
Zazwyczaj podstrojenie wspóáczynnika nietrafieĔ we wspóádzielony obszar SQL gwarantuje poprawną
wartoĞü nietrafieĔ w bufor sáownika danych.
Jest to spowodowane sposobem gospodarowania pamiĊcią przez system Oracle, który preferuje dáuĪsze
utrzymywanie w pamiĊci obiektów ze wspóádzielonego obszaru poleceĔ SQL niĪ obiektów z bufora
sáownika danych.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 304 -
28.1.4. Strojenie bufora danych
Bufor danych jest najwaĪniejszym buforem spoĞród wszystkich buforów wystĊpujących w systemie
Oracle. Bufor ten zajmuje wiĊkszoĞü obszaru SGA i jest wykorzystywany podczas wykonywania kaĪdej
operacji odczytywania i modyfikowania danych z bazy.
Podczas wykonywania tych operacji proces serwera sprawdza najpierw, czy Īądane dane znajdują siĊ juĪ
w SGA. JeĞli tak, dane są bezpoĞrednio obsáugiwane w SGA, natomiast jeĞli nie dane zostaną obsáuĪone po
uprzednim skopiowaniu ich z dysku do SGA.
Strojenie bufora danych polega na dobraniu takiego rozmiaru tego bufora, aby zagwarantowaü dobry
wspóáczynnik trafieĔ. Przy dobieraniu rozmiaru naleĪy pamiĊtaü, Īe zaleĪnoĞü miĊdzy wielkoĞcią bufora
a wspóáczynnikiem trafieĔ nie jest liniowa. Przy duĪym wspóáczynniku trafieĔ dodatkowe zwiĊkszenie
bufora daje znikome efekty, moĪe natomiast zwiĊkszyü zuĪycie czasu procesora, który jest obciąĪony
zarządzaniem zbyt duĪą listą LRU.
Statystyka odwoáaĔ do bufora danych jest przechowywana w dynamicznej perspektywie V$SYSSTAT,
której najwaĪniejszymi kolumnami są:
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 305 -
DB BLOCK GETS
- Zwykáe odwoáania do bufora.
CONSISTENT GETS
- Odwoáania do bufora w trybie spójnym. Suma DB BLOCK
CONSISTENT GETS daje liczbĊ wszystkich odwoáaĔ od bufora.
PHYSICAL READS
- Ogólna liczba odwoáaĔ do bufora, które zakoĔczyáy siĊ fizycznym odczytem
danych z dysku, czyli nietrafieni.
GETS i
Aby uzyskaü informacje dotyczące poprawnoĞci dziaáania bufora moĪna posáuĪyü siĊ poniĪszym
poleceniem:
SQL> SELECT name, value FROM v$sysstat
WHERE name in
(‘db block gets’,‘consistent gets’,‘physical reads’);
NAME
VALUE
db block gets
155
consistent gets
5293
physical reads
334
Wspóáczynnik trafieĔ wylicza siĊ na podstawie wzoru:
Cache Hit Ratio = 1-(PHYSICAL READS/(DB BLOCK GETS + CONSISTENT GETS))
Cache Hit Ratio = 1-(334/(155+5293))=1-0,0613=0.938
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 306 -
Zatem w powyĪszym przykáadzie wspóáczynnik trafieĔ jest równy 93,8%.
JeĞli wspóáczynnik trafieĔ jest mniejszy niĪ 70% - 80%, naleĪy zwiĊkszyü wielkoĞü bufora danych w celu
poprawienia wydajnoĞci. MoĪna to zrobiü poprzez zwiĊkszenie wartoĞci parametru inicjalizacyjnego
DB_CACHE_SIZE.
Firma Oracle nie zaleca obecnie uĪywania do tego celu parametru DB_BLOCK_BUFFERS, który zostaá
pozostawiony w celu zachowania wstecznej kompatybilnoĞci.
28.1.5. Zmniejszenie zajĊtoĞci pamiĊci operacyjnej
Zmniejszenie wielkoĞci wykorzystywanej pamiĊci operacyjnej moĪna uzyskaü zarówno przez
zmniejszenie liczby równoczesnych sesji uĪytkownika, jak i poprzez zdefiniowanie maksymalnego czasu
bezczynnoĞci. Skorzystanie z pierwszego sposobu polega na zmniejszeniu wartoĞci parametru
inicjalizacyjnego
LICENSE_MAX_SESSIONS.
Aby zdefiniowaü maksymalny czas (w minutach) bezczynnoĞci uĪytkownika naleĪy w profilu
przypisanym temu uĪytkownikowi okreĞliü zasób IDLE_TIME.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 307 -
§ 28.2. Strojenie wykorzystania urządzeĔ dyskowych
W procesie strojenia instancji kluczową rolĊ odgrywa optymalne wykorzystanie urządzeĔ dyskowych.
Do najwaĪniejszych zadaĔ administratora systemu Oracle, mających na celu strojenie urządzeĔ
dyskowych naleĪą:
x
diagnostyka obciąĪenia urządzeĔ dyskowych,
x
równowaĪenie obciąĪenia urządzeĔ dyskowych,
x
unikanie migracji i áaĔcuchowania bloków,
x
unikanie dynamicznego zarządzania rozszerzeniami,
x
strojenie procesu DBWR.
28.2.1. Diagnostyka obciąĪenia urządzeĔ dyskowych
Bardzo waĪnym etapem strojenia instancji bazy danych jest strojenie dostĊpu do dysków.
NajwaĪniejsze informacje o operacjach wejĞcia-wyjĞcia dysku moĪemy znaleĨü w dynamicznej tabeli
V$FILESTAT, której najwaĪniejszymi kolumnami są: PHYRDS, PHYWRTS.
Pierwsza kolumna zawiera liczbĊ fizycznych odczytów wykonywanych na plikach danych, natomiast
druga zawiera liczbĊ fizycznych zapisów na tych plikach.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 308 -
Informacja w V$FILESTAT stosuje wewnĊtrzne identyfikatory plików, zatem aby uzyskaü peáne nazwy
tych plików moĪna skorzystaü z perspektywy sáownikowej V$DATAFILE. Jej najwaĪniejszymi kolumnami
są: NAME – zawiera nazwĊ pliku, STATUS – informuje o typie pliku i jego bieĪącym statusie, oraz BYTES –
mówiąca o wielkoĞci danego pliku.
Aby okreĞliü liczbĊ fizycznych operacji na plikach moĪna skorzystaü ze wspomnianych wyĪej obu tabel
wykonując poniĪsze zapytanie:
SQL> SELECT substr(name,1,40) Plik, phyrds, phywrts, status, bytes
FROM v$datafile df, v$filestat fs
WHERE df.file# = fs.file#;
PLIK
C:\ORACLE\ORADATA\TEST\SYSTEM01.DBF
C:\ORACLE\ORADATA\TEST\TEST_DANE.DBF
C:\ORACLE\ORADATA\TEST\TEST_RBS.DBF
PHYRDS
1579
8
7
PHYWRTS
178
53
96
STATUS
SYSTEM
ONLINE
ONLINE
BYTES
209715200
209715200
62914560
Liczba operacji wejĞcia-wyjĞcia jest sumą odczytów i zapisów.
NaleĪy pamiĊtaü aby nie przekraczaü fizycznych ograniczeĔ dysku, gdyĪ problemy z wydajnoĞcią
jednego dysku, w zaleĪnoĞci od typu danych mogą spowolniü pracĊ caáego systemu.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 309 -
RedukcjĊ przeciąĪenia dysków moĪna osiągnąü przez:
x
zrównowaĪenie obciąĪenia,
x
odpowiednie skáadowanie danych w blokach,
x
unikanie dynamicznego zarządzania rozszerzeniami,
x
unikanie dynamicznego zarządzania przestrzenią w segmentach wycofania.
28.2.2. RównowaĪenie obciąĪenia
RównowaĪenie
obciąĪenia
urządzeĔ
dyskowych
polega
na
umieszczeniu
równoczeĞnie
wykorzystywanych zasobów systemu Oracle na róĪnych fizycznych dyskach.
Rozmieszczenie plików danych oraz plików dziennika powtórzeĔ na róĪnych dyskach jest szczególnie
zalecane przy duĪej liczbie operacji modyfikowania, wstawiania i usuwania danych, które wymagają
równoczesnego dostĊpu do danych i które generują intensywne zapisy do dziennika powtórzeĔ.
Biorąc pod uwagĊ sposób dziaáania procesu LGWR (koĔczy zapis do grupy dzienników w momencie
zakoĔczenia zapisu do wszystkich plików grupy), naleĪy pamiĊtaü aby podczas stosowania wielu kopii pliku
dziennika powtórzeĔ w grupie, uĪywane do tego celu dyski miaáy podobną wydajnoĞü. W przeciwnym razie
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 310 -
jeden plik dziennika umieszczony na wolniejszym dysku bĊdzie znacząco zmniejszaá wydajnoĞü procesu
LGWR.
Bardzo dobrym przykáadem równowaĪenia obciąĪenia urządzeĔ dyskowych jest umieszczenie
równoczeĞnie wykorzystywanych tabel (np. czĊsto áączonych) w róĪnych przestrzeniach tabel, na róĪnych
dyskach. Wówczas równolegáy dostĊp do tych tabel spowoduje przyĞpieszenie operacji áączenia. PoniĪej
zostaá przedstawiony inny przykáad rozproszenia tabeli na róĪne dyski korzystający z mechanizmu alokacji
rozszerzeĔ.
SQL> CREATE TABLESPACE rozproszona_przestrzeĔ_tabel
DATAFILE ‘C:\oradata\file1.dbf’ size 10M,
‘D:\oradata\file2.dbf’ size 10M,
‘E:\oradata\file3.dbf’ size 10M,
‘F:\oradata\file4.dbf’ size 10M;
SQL> CREATE TABLE rozproszona_tabela(…)
TABLESPACE rozproszona_przestrzeĔ_tabel
STORAGE (
INITIAL 10000K
NEXT 10000K
MINEXTENTS 4
PCTINCREASE 0
);
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 311 -
Pierwsze polecenie tworzy przestrzeĔ tabel skáadającą siĊ z czterech plików umieszczonych na róĪnych
dyskach, natomiast drugie tworzy tabelĊ w utworzonej wczeĞniej przestrzeni.
Parametry skáadowania tabeli umoĪliwiają przydzielenie jej pamiĊci we wszystkich plikach utworzonej
przestrzeni, z których kaĪdy znajduje siĊ na innym dysku.
Innym sposobem rozpraszania danych jest wykorzystanie mechanizmu partycjonowanych tabel.
RównowaĪąc obciąĪenie urządzeĔ dyskowych, nie ma potrzeby rozdzielania tabel i związanych z nimi
indeksów, gdyĪ dostĊp do nich nie jest równolegáy lecz sekwencyjny. Najpierw są odczytywane indeksy,
a nastĊpnie bloki tabel.
28.2.3. Migracja i áaĔcuchowanie bloków
Bardzo waĪną rolĊ w procesie strojenia wykorzystania urządzeĔ dyskowych odgrywa proces redukcji
operacji migracji oraz áaĔcuchowania rekordów.
Operacje te wystĊpują, gdy zmodyfikowanie wiersza powoduje zwiĊkszenie jego rozmiaru na tyle, iĪ nie
mieĞci siĊ on juĪ w jednym bloku danych. W takich sytuacjach system Oracle szuka innego bloku, który jest
w stanie pomieĞciü caáy, zmodyfikowany rekord. JeĞli taki blok zostanie znaleziony, wówczas
zmodyfikowany rekord jest do niego przenoszony i proces ten nazywany jest migracją rekordu.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 312 -
Migracja rekordu zostaáa zilustrowana rysunkiem 28.2.3.1.
W przypadku nie znalezienia takiego bloku, Oracle dzieli zmieniony rekord na kilka czĊĞci i umieszcza je
w róĪnych blokach tworząc tzw. áaĔcuch bloków. Sytuacja taka zostaáa zobrazowana rysunkiem 28.2.3.2.
àaĔcuchowanie rekordu powoduje, iĪ póĨniejsze odczytanie tego rekordu zajmuje wiĊcej niĪ jedną
operacjĊ wejĞcia-wyjĞcia, gdyĪ wczytane do pamiĊci SGA bĊdą musiaáy byü wszystkie bloki danych
zawierające omawiany rekord.
Rysunek 28.2.3.1. Migracja rekordu
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 313 -
Rysunek 28.2.3.2. àaĔcuchowanie rekordu
Aby znaleĨü w tabeli rekordy, które ulegáy migracji lub áaĔcuchowaniu, naleĪy wykonaü na niej polecenie
ANALYZE z opcją LIST CHAINED ROWS.
Wyniki tego zapytania są gromadzone w tabeli o nazwie CHAINED_ROWS, którą moĪna utworzyü
uruchamiając skrypt UTLCHAIN.SQL. Tabela ta jest tworzona w schemacie uĪytkownika wykonującego
ten skrypt.
Przykáad 28.2.3.1. Przykáad pokazujący kroki umoĪliwiające zredukowanie zjawiska áaĔcuchowania
i migracji w tabeli OSOBY.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 314 -
Znalezienie wierszy, które ulegáy áaĔcuchowaniu lub migracji, korzystając z polecenia ANALYZE TABLE.
SQL> ANALYZE TABLE osoby LIST CHAINED ROWS;
WyĞwietlenie wyjĞciowej tabeli za pomocą polecenia:
SQL> SELECT * FROM CHAINED_ROWS WHERE TABLE_NAME = ‘OSOBY’;
OWNER_NAME
HR
HR
HR
TABLE_NAME
OSOBY
OSOBY
OSOBY
…
…
…
…
HEAD_ROWID
AAAA1uAAHAAAAA1AAA
AAAA1uAAHAAAAA1AAB
AAAA1uAAHAAAAA1AAC
TIMESTAMP
04-JAN-06
04-JAN-06
04-JAN-06
Tabela ta zawiera zarówno áaĔcuchowane jak i migrowane wiersze.
JeĞli tabela ta nie jest pusta wówczas naleĪy podjąü kroki mające na celu eliminacje áaĔcuchowania
i migrowania wyĞwietlonych rekordów postĊpując zgodnie z poniĪszymi punktami:
x Utworzenie tymczasowej tabeli z takimi samymi kolumnami jak w tabeli OSOBY, do której
skopiujemy áaĔcuchowane i migrowane wiersze.
SQL> CREATE TABLE temp_osoby
AS SELECT * FROM osoby
WHERE ROWID IN (SELECT HEAD_ROWID FROM CHAINED_ROWS
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 315 -
WHERE TABLE_NAME = ‘OSOBY’);
x UsuniĊcie z tabeli OSOBY rekordów áaĔcuchowanych i migrowanych.
SQL> DELETE FROM osoby
WHERE ROWID IN (SELECT HEAD_ROWID FROM CHAINED_ROWS
WHERE TABLE_NAME = ‘osoby’);
x Wstawienie wierszy z tabeli TEMP_OSOBY do tabeli OSOBY.
SQL> INSERT INTO osoby SELECT * FROM temp_osoby;
x UsuniĊcie tabeli tymczasowej TEMP_OSOBY.
SQL> DROP TABLE temp_osoby;
x UsuniĊcie informacji zebranych w kroku 1 (z tabeli CHAINED_ROWS).
SQL> DELETE FROM CHAINED_ROWS WHERE TABLE_NAME = ‘OSOBY’;
x Ponowne wykonanie polecenia ANALYZE - wyĞwietlone zostaną wówczas rekordy áaĔcuchowane.
Wyeliminowanie áaĔcuchowania tych rekordów jest moĪliwe tylko poprzez zwiĊkszenie rozmiaru
bloków.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 316 -
W pewnych sytuacjach nie moĪna uniknąü áaĔcuchowania tj. w tabelach z kolumnami typu LONG lub
dáugimi kolumnami CHAR lub VARCHAR2. Informacja o wystĊpowaniu w naszym systemie tego typu
kolumn musi byü wziĊta pod uwagĊ, podczas ustalania rozmiaru bloku w fazie projektowania bazy.
WielkoĞü bloku jest ustalana parametrem DB_BLOCK_SIZE. Wyznaczenie optymalnego rozmiaru bloku
pozwala efektywnie wykorzystaü te bloki, a takĪe na zminimalizowanie iloĞci operacji wejĞcia-wyjĞcia.
28.2.4. Unikanie dynamicznego zarządzania rozszerzeniami
Wraz ze wzrostem iloĞci danych w tabeli tworzone są nowe rozszerzenia, w których te dane mogą byü
przechowywane. Przydzielanie tych rozszerzeĔ jest procesem bardzo kosztownym, dlatego przy strojeniu
wykorzystania urządzeĔ dyskowych nie moĪna zapomnieü o redukowaniu liczby tych operacji.
Aby zmniejszyü liczbĊ operacji czĊstego przydzielania nowych rozszerzeĔ powinno siĊ okreĞliü
parametry skáadowania obiektów: initial, next, minextents, pctincrease.
KorzyĞcią stosowania duĪych rozszerzeĔ jest zmniejszenie liczby operacji przydziaáu kolejnego
rozszerzenia oraz ciągáoĞü zaalokowanego miejsca na dysku, co przyĞpiesza sekwencyjny odczyt wszystkich
rekordów tabeli. Minusem tego rozwiązania mogą byü problemy z przydzieleniem wystarczająco duĪej,
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 317 -
ciągáej przestrzeni na dysku. Rozwiązanie tych problemów wymaga rozszerzenia lub dodania pliku danych
do przestrzeni tabel.
Aby wyĞwietliü liczbĊ rozszerzeĔ naleĪy posáuĪyü siĊ perspektywą systemową DBA_EXTENTS.
Zapytanie oraz jego wynik mogą wyglądaü nastĊpująco:
SELECT owner, segment_name, segment_type,
count(*) liczba_rozszerzeĔ
FROM dba_extents
GROUP BY owner, segment_name, segment_type;
OWNER
SCOTT
SCOTT
SCOTT
SEGMENT_NAME
AB_DATA_ROZP
AB_DATA_ZAK
AB_ET_FK_I
SEGMENT_TYPE
INDEX
INDEX
INDEX
liczba_rozszerzeĔ
9
9
10
JeĞli po kilkukrotnym wykonaniu powyĪszego zapytania zauwaĪymy, iĪ liczba rozszerzeĔ któregoĞ
obiektu dynamicznie wzrasta, wówczas naleĪy rozwaĪyü zwiĊkszenie wartoĞci parametrów skáadowania
next oraz pctincrease tego obiektu.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 318 -
28.2.5. Strojenie procesu DBWR
Proces DBWR dokonuje zapisu zmodyfikowanych bloków danych z bufora danych na dysk
w nastĊpujących przypadkach:
a) proces uĪytkownika stwierdzi, Īe lista LRU przekroczyáa okreĞlony rozmiar;
b) proces uĪytkownika nie znajdzie wolnego bloku w buforze danych, a bufor taki jest wymagany do
odczytu nowych danych na dysku;
c) upáyną … sekundy od ostatniego zapisu;
d) zostanie zgáoszony punkt kontrolny (Checkpoint).
W przypadku podpunktu d) proces DBWR zapisuje wszystkie zmodyfikowane bloki bufora danych,
natomiast w pozostaáych podpunktach, iloĞü kaĪdorazowo zapisywanych bloków okreĞlona jest przez
parametr DB_BLOCK_CHECKPOINT_BATCH. Ustawienie wartoĞci tego parametru na odpowiednio
niewielką wartoĞü zapobiega dyskryminacji pozostaáych zadaĔ realizowanych przez DBWR, natomiast
wyĪsza wartoĞü tego parametru umoĪliwia szybsze wykonanie punktu kontrolnego.
28.2.6. Strojenie segmentów wycofywania
We wczeĞniejszych wersjach systemu Oracle, spójnoĞü odczytu danych obsáugiwana byáa przez
mechanizm segmentów wycofania. Od wersji Oracle9i wprowadzony zostaá nowy, automatyczny
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 319 -
mechanizm zapewniający spójnoĞü odczytów, wycofywania zmian i odtwarzania bazy po awarii - SMU
(ang. System Management Undo). W przypadku serwerów od Oracle9i zaleca siĊ ustawienie ich w tryb
pracy SMU, co znacząco uáatwia zarządzanie bazą danych i usuwa koniecznoĞü rĊcznego strojenia
segmentów wycofania jak to ma miejsce w trybie pracy RBU (ang. Rollback Segment Undo). Praca w trybie
RBU jest moĪliwa ze wzglĊdu na koniecznoĞü zachowania zgodnoĞci z poprzednimi wersjami systemu
Oracle.
28.2.7. Strojenie serwera w trybie SMU- System Management Undo
PrzestrzeĔ wycofania musi byü na tyle duĪa, by byáa w stanie pomieĞciü caáą informacjĊ związaną
z wycofywaniem transakcji.
PrzybliĪony
rozmiar
tej
przestrzeni
moĪemy
wyliczyü
korzystając
z
wartoĞci
parametru
UNDO_RETENTION, okreĞlającego jak dáugo dane mają pozostawaü na dysku. Znając tą wartoĞü oraz iloĞü
generowanych danych wycofania na sekundĊ, moĪna wyliczyü wielkoĞü przestrzeni wycofania za pomocą
wzoru:
WielkoĞü przestrzeni=czas przechowywania * iloĞü informacji w jednostce czasu
Przykáadowo, jeĞli czas przechowywania wynosi 200s, a system generuje 100 bloków informacji
wycofania na sekundĊ, to otrzymamy:
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 320 -
Liczba bloków undo = (200s)*(100 bloków/s) = 20000 bloków
czyli wielkoĞü przestrzeni wycofania wynosi 20000 razy wielkoĞü bloku.
Mając „chodzący” system w trybie SMU moĪemy przejĞü do poprawienia jego wydajnoĞci. Statystyki
opisujące pracĊ w trybie automatycznym moĪemy znaleĨü w dynamicznej perspektywie V$UNDOSTAT,
która skáada siĊ m.in. z nastĊpujących kolumn:
- Początek badanego przedziaáu czasowego.
- Koniec badanego przedziaáu czasowego.
- Liczba bloków wycofania zuĪyta na potrzeby przechowywania informacji wycofania
w tym przedziale.
SSOLDERRCNT
- Liczba báĊdów snapshot too old, która wystąpiáa w trakcie trwania tego przedziaáu
czasu.
NOSPACEERRCNT - Liczba báĊdów snapshot too old, która wystąpiáa dla tej instancji.
JeĞli w kolumnach zawierających báĊdy wystĊpuje jakaĞ wartoĞü wiĊksza do zera, wówczas moĪna
BEGIN_TIME
END_TIME
UNDOBLKS
skróciü czas przechowywania lub zwiĊkszyü wielkoĞü przestrzeni wycofania.
DomyĞlna wartoĞü czasu przechowywania informacji sáuĪących do wycofywania transakcji jest
zazwyczaj wystarczającą wartoĞcią dla systemów, w których nie wykonuje siĊ dáugotrwaáych zapytaĔ. JeĞli
jednak wiemy, Īe w naszym systemie wykonywane bĊdą dáugotrwaáe transakcje (czĊsto wymagające
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 321 -
spójnego obrazu bazy przez caáy czas) warto zastanowiü siĊ nad zwiĊkszeniem tego czasu. JeĞli w trakcie
wykonywania takiej transakcji wystąpi báąd snapshot too old, wówczas czas przechowywania naleĪy
zwiĊkszyü.
28.2.8. Strojenie serwera w trybie RBU
Ze wzglĊdu na zalecenie Oracla ustawienia trybu pracy serwrów w tryb SMU pominiemy ten punkt.
§ 28.3. Strojenie punktów kontrolnych
Punkty kontrolne zapewniają, Īe wszystkie „brudne bloki” znajdujące siĊ w SGA zostaną zapisane na
dysk. PoniewaĪ proces DBWR bazuje na algorytmie LRU, jest zatem moĪliwoĞü wystąpienia sytuacji,
w której czĊsto modyfikowane bloki nie zostaną zapisane na dysku.
Rozwiązaniem tego problemu jest stosowanie punktów kontrolnych.
Punkty te są generowane w nastĊpujących przypadkach:
x nastĊpuje przeáączenie pliku dziennika powtórzeĔ;
x przekroczony zostanie czas okreĞlony parametrem konfiguracyjnym
LOG_CHECKPOINT_TIMEOUT
od poprzedniego punktu kontrolnego;
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 322 -
x przekroczona zostanie liczba zapisów okreĞlona parametrem konfiguracyjnym
LOG_CHECKPOINT_INTERVAL
od poprzedniego punktu kontrolnego;
x nastĊpuje przeáączenie przestrzeni tabel w tryb wykonywania kopii zapasowej;
x przy przeáączaniu pliku danych w tryb offline;
x przy zamykaniu bazy za pomocą poleceĔ SHUTDOWN NORMAL i SHUTDOWN IMMEDIATE;
x administrator moĪe jawnie wywoáaü punkt kontrolny za pomocą polecenia
ALTER SYSTEM CHECKPOINT.
x
inne.
CzĊste wykonywanie punktu kontrolnego przyspiesza operacjĊ odtwarzania instancji po awarii, jednak
jednoczeĞnie wprowadza dodatkowy narzut w postaci czĊstych zapisów zmodyfikowanych bloków danych
na dysk.
Punkty kontrolne mogą jednoczeĞnie obciąĪaü proces LGWR, odpowiedzialny za zapisanie informacji
kontrolnych do wszystkich plików danych i plików kontrolnych.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 323 -
§ 28.4. Strojenie sortowaĔ
Podczas wykonywania operacji sortowania wykorzystywany jest obszar pamiĊci PGA, którego wielkoĞü
okreĞlona jest parametrem konfiguracyjnym SORT_AREA_SIZE.
JeĪeli wielkoĞü tego obszaru jest zbyt maáa, wówczas wystĊpuje tendencja do przeprowadzania operacji
sortowania na dysku. W takim przypadku naleĪy zwiĊkszyü wielkoĞü tego obszaru.
Aby sprawdziü wykorzystanie pamiĊci i dysku do operacji sortowania moĪna posáuĪyü siĊ dynamiczną
perspektywą V$SYSSTAT. Interesującymi statystykami tej perspektywy są Sorts(memory),
zawierająca liczbĊ sortowaĔ, które zmieĞciáy siĊ caákowicie w pamiĊci oraz Sorts(disk), zawierająca
liczbĊ sortowaĔ, które wymagaáy zapisania wyników poĞrednich na dysku.
Przykáadowe zapytanie moĪe wyglądaü nastĊpująco:
SELECT name, value
FROM v$sysstat
WHERE name IN (‘sorts(memory)’, ’sorts(disk)’);
NAME
sorts(memory)
sorts(disk)
VALUE
19
0
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 324 -
JeĪeli liczba operacji sortowania na dysku jest zbyt duĪa, wówczas moĪna rozwaĪyü zwiĊkszenie
wartoĞci parametru
SORT_AREA_SIZE.
ZwiĊkszenie tego parametru skutkuje szybszym wykonywaniem sortowania i zmniejszeniem liczby operacji
wejĞcia-wyjĞcia.
Po zwiĊkszeniu obszaru sortowania moĪna zmniejszyü wielkoĞü obszaru pozostawionego za pomocą
parametru
SORT_AREA_RETAINED_SIZE.
Parametr ten okreĞla minimalną wielkoĞü pamiĊci zwalnianej po wykonaniu operacji sortowania.
JeĪeli operacja sortowania wymaga wiĊkszej iloĞci pamiĊci niĪ rozmiar okreĞlony wartoĞcią parametru
SORT_AREA_SIZE, wówczas dane dzielone są na mniejsze czĊĞci i kaĪda z nich sortowana jest
indywidualnie.
W procesie sortowania, obok obszaru sortowania, udziaá bierze takĪe przestrzeĔ tymczasowa, która
przechowuje poĞrednie wyniki podczas sortowania duĪych iloĞci danych. WáaĞciwe skonfigurowanie
przechowywania danych tymczasowych przyczynia siĊ do wzrostu wydajnoĞci systemu.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
Najbardziej efektywną metodą
- 325 -
strojenia przestrzeni tymczasowej jest umieszczenie jej na bardzo
szybkim noĞniku danych. Zastosowanie tego rozwiązania znacząco przyspiesza dostĊp do tabel
tymczasowych.
Innym sposobem na zwiĊkszenie wydajnoĞci operacji sortowania jest ustawienie wartoĞci rozszerzenia
przestrzenie tabel równej wartoĞci parametru SORT_AREA_SIZE, dziĊki czemu kolejne rozszerzenia nie
bĊdą przydzielane zbyt czĊsto.
NaleĪy takĪe ustawiü parametr PCTINCREASE na wartoĞü 0, a INITIAL i NEXT na wartoĞü bĊdącą
wielokrotnoĞcią wartoĞci SORT_AREA_SIZE. Trzeba upewniü siĊ, aby wielkoĞci te byáy dostatecznie duĪe,
co zmniejszy liczbĊ alokacji nowych rozszerzeĔ.
§ 28.5. Zmniejszenie rywalizacji o semafory bufora dziennika powtórzeĔ
DostĊp do buforów dziennika powtórzeĔ jest kontrolowany przez dwa typy semaforów: alokujące oraz
kopiujące.
Aby zapisaü dane w buforze dziennika powtórzeĔ, proces uĪytkownika musi najpierw uzyskaü semafor
alokujący, przydzielający fragment bufora dziennika powtórzeĔ, do którego nastĊpnie kopiowane są
stosowne informacje.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 326 -
Kiedy proces uĪytkownika koĔczy kopiowanie danych do bufora, zwalniany jest ten semafor, zezwalając
w ten sposób uĪycie tego semafora innym procesom uĪytkownika.
PoniewaĪ istnieje tylko jeden semafor alokacyjny, zatem jednoczeĞnie do bufora zapisywaü moĪe tylko
jeden proces uĪytkownika. Maksymalna wielkoĞü danych, jaka moĪe byü zapisana po pojedynczym
uzyskaniu semafora alokującego okreĞlona jest parametrem konfiguracyjnym
LOG_SMALL_ENTRY_MAX_SIZE.
JeĞli wielkoĞü zapisu do bufora przekracza wartoĞü parametru LOG_SMALL_ENTRY_SIZE, wówczas
aby skopiowaü informacje do bufora, proces uĪytkownika musi uzyskaü semafor kopiujący.
W systemach wieloprocesorowych takich semaforów moĪe byü wiĊcej niĪ jeden. Pozwala to na
wykonywanie sekwencyjnego zapisu do bufora dziennika powtórzeĔ, co przyczynia siĊ do wzrostu
wydajnoĞci.
Liczba semaforów kopiujących okreĞlona jest parametrem konfiguracyjnym
LOG_SIMULTANEOUS_COPIES.
W systemach jednoprocesorowych nie wystĊpują semafory kopiujące i na dostĊp do bufora zezwala semafor
alokujący.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 327 -
DostĊp do semaforów moĪe byü wykonywany w jednym z dwóch trybów: w trybie z oczekiwaniem i w
trybie natychmiastowym. JeĞli proces nie uzyskuje wyáącznego dostĊpu do semafora w trybie z
oczekiwaniem, to rozpoczyna oczekiwanie na jego zwolnienie. JeĪeli natomiast proces Īądający
wyáącznego dostĊpu do semafora w trybie natychmiastowym nie otrzyma dostĊpu, to kontynuuje swoje
przetwarzanie.
Aby uzyskaü informacje o stopniu rywalizacji o semafory bufora dziennika powtórzeĔ, naleĪy posáuĪyü
siĊ dynamiczna perspektywą V$LATCH, która zawiera m.in. poniĪsze kolumny:
GETS
- ogólna liczba dostĊpu w trybie z oczekiwaniem
MISSES
- liczba nieudanych dostĊpów w trybie z oczekiwaniem
IMMEDIATE_GETS
- ogólna liczba dostĊpu w trybie natychmiastowym
IMMEDIATE_MISSES
- liczba nieudanych dostĊpów w trybie natychmiastowym
Przykáadowe zapytanie moĪe wyglądaü nastĊpująco:
SELECT name, gets, misses, immediate_gets imm_gets,
immediate_misses imm_misses
FROM v$latch
WHERE name IN (‘redo allocation’, ‘redo copy’);
NAME
redo allocation
redo copy
GETS
563571
2
MISSES
523
2
IMM_GETS
0
23452
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
IMM_MISSES
0
3
28. STROJENIE INSTANCJI
- 328 -
StopieĔ rywalizacji w kaĪdym z tych przypadków okreĞla siĊ jako stosunek nieudanych dostĊpów do
ogólnej liczby dostĊpów i w obu trybach nie powinien on przekraczaü jednego procenta.
Aby zmniejszyü rywalizacjĊ o semafor alokujący, naleĪy zmniejszyü wartoĞü parametru
LOG_SMALL_ENTRY_MAX_SIZE,
dziĊki czemu mniej procesów bĊdzie blokowaáo ten semafor w czasie kopiowania.
Aby zmniejszyü rywalizacjĊ o semafor kopiujący, naleĪy zwiĊkszyü wartoĞü parametru
LOG_SIMULTANEOUS_COPIES,
co spowoduje moĪliwoĞü obsáuĪenia wiĊkszej liczby operacji zapisu do bufora dziennika powtórzeĔ.
§ 28.6. Minimalizacja rywalizacji o listĊ wolnych bloków
Kolejnym miejscem, gdzie moĪe wystąpiü rywalizacja jest lista wolnych bloków. Listy te przechowują
informacje związane z wolnymi blokami w buforze danych, w których jest miejsce na wstawienie danych.
Aby sprawdziü stopieĔ rywalizacji o listy wolnych bloków moĪna posáuĪyü siĊ poniĪszym zapytaniem do
dynamicznej perspektywy V$WAITSTAT.
SELECT class, count
FROM v$waitstat
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
28. STROJENIE INSTANCJI
- 329 -
WHERE class = ‘free list’;
CLASS
free list
COUNT
0
JeĞli liczba oczekiwaĔ na listĊ przekracza 1% wszystkich ĪądaĔ, wówczas naleĪy zwiĊkszyü liczbĊ takich
list poprzez ponowne utworzenie tabeli ze zwiĊkszoną wartoĞcią parametru FREELISTS. LiczbĊ
wszystkich odwoáaĔ do listy moĪemy uzyskaü sumując iloĞü odczytów bloków z perspektywy V$SYSSTAT.
SELECT SUM(value) Liczba_zadan
FROM v$sysstat
WHERE name in (‘db block gets’, ‘consistent gets’);
LICZBA_ZADAN
2332
Rywalizacja o listy wystĊpuje gáównie przy wspóábieĪnym wykonywaniu przez wiele sesji operacji
wstawiania insert, zatem optymalna liczba list wolnych bloków powinna byü równa liczbie sesji
równoczeĞnie wstawiających dane do bazy.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
29. WYZWALACZE INSTEAD OF I SYSTEMOWE
- 330 -
29. WYZWALACZE INSTEAD OF I SYSTEMOWE
§ 29.1. Wyzwalacze INSTEAD OF
Wyzwalacze INSTEAD OF (zamiast) umoĪliwiają np. modyfikowanie perspektyw (widoków), których
zawartoĞü nie moĪna zmieniaü uĪywając poleceĔ DML (np. perspektyw utworzonych z klauzulą GROUP
BY).
CREATE OR REPLACE TRIGGER nazwa_wyzwalacza
INSTEAD OF INSERT ON perspektywa
DECLARE
...
BEGIN
...
END;
§ 29.2. Wyzwalacze systemowe
Wyzwalacze systemowe mogą byü definiowane na poziomie bazy danych lub na poziomie schematu
uĪytkownika.
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
29. WYZWALACZE INSTEAD OF I SYSTEMOWE
Przykáady zdarzeĔ systemowych:
AFTER STARTUP, BEFORE SHUTDOWN, AFTER LOGON, AFTER DROP, AFTER
GRANT, AFTER CREATE,…
Przykáad 29.2.1. Przykáad rejestracji logowaĔ:
CREATE TABLE rejestracja_logowania
(
user VARCHAR2(15),
data_logowania DATE
);
CREATE OR REPLACE TRIGGER rejestracja_logowania
AFTER LOGON
ON SCHEMA
BEGIN
INSERT INTO rejestracja_logowania VALUES (user, SYSDATE);
END;
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
-331-
29. WYZWALACZE INSTEAD OF I SYSTEMOWE
-332-
Przykáad 29.2.2. Przykáad rejestracji operacji STARTUP i SHUTDOWN:
CREATE TABLE rejestracja_start (operacja VARCHAR2(15),data DATE);
CREATE OR REPLACE TRIGGER rejestracja_start
AFTER STARTUP
ON DATABASE
BEGIN
INSERT INTO rejestracja_start VALUES (‘startup’,SYSDATE);
END;
CREATE OR REPLACE TRIGGER rejestracja_start
BEFORE SHUTDOWN
ON DATABASE
BEGIN
INSERT INTO rejestracja_start VALUES (‘shutdown’,SYSDATE);
END;
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”
29. WYZWALACZE INSTEAD OF I SYSTEMOWE
-333-
§ 29.3. Wyzwalacze a transakcje autonomiczne
W przypadku gdy wyzwalacz jest czĊĞcią transakcji i chcemy aby wewnątrz nastąpiáo zatwierdzenie
(COMMIT) dokonanych wewnątrz zmian bez wzglĊdy na to czy caáa transakcja bĊdzie zatwierdzona czy teĪ
nie naleĪy w czĊĞci deklaracyjnej uĪyü PRAGMA AUTONOMOUS_TRANSACTION.
Przykáad 29.3.1. Przykáad wyzwalacza:
CREATE OR REPLACE TRIGGER rejestracja
BEFORE INSERT ON sprzedaz
FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO rejestracja VALUES (:NEW.id_towaru, :NEW.ilosc, SYSDATE);
COMMIT;
END;
Rok akademicki – 2007/2008 - Notatki do wykáadów z przedmiotu „Administracja bazami danych”