|
Redo
Log Buffer Latches - Stephen Rea
Wanneer
een transactie zijn wijzigingen naar de Redo Log wil
schrijven, moet hij eerst de Redo Allocation Latch alloceren.
Daar is er slechts één van om te voorkomen dat anderen
er tegelijkertijd in schrijven. Als iemand anders de
Latch heeft gelocked, moet het huidige proces dus wachten.
Zodra de Latch is gealloceerd en de wijziging is groter
dan log_small_entry_max_size bytes en de server heeft
meerdere CPU's, dan probeert het proces een Redo Copy
Latch te alloceren (waarvan er maximaal tweemaal het
aantal CPU's aanwezig kunnen zijn) waardoor de Redo
Allocation Latch kan worden vrijgegeven voor een ander
proces.
Als er geen beschikbaar is, zal het proces niet op een
Redo Copy Latch wachten, maar zal het de Redo Allocation
Latch vasthouden tot het proces is beëindigd.
Oracle houdt statistieken bij voor deze Latches in v$latch,
inclusief het aantal gets en missers voor de Redo Allocation
Latch en het aantal gets en missers voor de Redo Copy
Latch (de cumulatieven hiervan sinds de instance startup).
Indien je een hit ratio hebt van 100% voor één van beiden,
is dat goed. Dat betekent dat al je processen in staat
zijn geweest in éénmaal een Latch te alloceren.
Zodra de hit ratio regelmatig onder de 99% komt, moet
je oppassen.
Zo bereken je de huidige hit ratio voor de Latches:
COLUMN latch_name
FORMAT a20
SELECT name latch_name
, gets
, misses
, round(decode(gets-misses,0,1,gets-misses)
___________/
___________decode(gets,0,1,gets)
,3) hit_ratio
FROM v$latch
WHERE name = 'redo allocation';
COLUMN latch_name FORMAT a20
SELECT name latch_name
, immediate_gets
, immediate_misses
, round(decode(immediate_gets-immediate_misses,0,1,
immediate_gets-immediate_misses)
/
decode(immediate_gets,0,1,immediate_gets)
,3) hit_ratio
FROM v$latch WHERE name = _'redo copy'_;
Indien de Redo Allocation Latch regelmatig onder de
99% komt en je hebt meerdere CPU's, kun je de waarde
voor log_small_entry_max_size verlagen (zie onder) in
de init.ora. Dat wil zeggen dat elke wijziging kleiner
dan log_small_entry_max_size de Redo Allocation Log
zal vasthouden totdat de wijziging is verwerkt.
Elke wijziging groter dan dat zal - indien beschikbaar
- een Redo Copy Latch gebruiken en zal de Redo Allocation
Log vrijgeven voor een ander proces.
Indien de Redo Copy Latch regelmatig onder de 99% komt
en je hebt meerdere CPU_s, kun je de waarde van log_simultaneous_copies
in de init.ora ophogen tot maximaal tweemaal het aantal
CPU_s, om op die manier meer Redo Copy Latches te creëren.
Uiteraard moet je de database instance opnieuw opstarten
om deze parameters effectief te laten worden. De init.ora
vind je in $oracle_home/dbs/initSID.ora.
De huidige waarden voor deze parameters vind je als
volgt:
COLUMN
name FORMAT a30
COLUMN value FORMAT a10
SELECT name
, value
FROM v$parameter
WHERE name IN
('log_small_entry_max_size'
,'log_simultaneous_copies'
,'cpu_count');

|