Iedere DBA weet dat de grootte van de redo logs erg belangrijk is.
Te klein en te veel log switches houden de LGRW, ARCH en DBWR
achtergrond processen teveel bezig. Te groot en je riskeert het verlies
van data tijdens instance crash.
Oracle 10g heeft een nieuwe
advisor utility geïntroduceerd die je de mogelijkheid biedt om aan te
geven wat je optimale mean time to recovery (MTTR) , recovery interval
moet zijn en gebruikt dit om een optimale redo log size aan te geven.
In Oracle 10g wordt de fast_start_mttr_target parameter gebruikt.
Oracle beveelt het gebruik van de fast_start_mttr_target
initialisatie parameter te gebruiken, om de duur van opstarten na een
instance failure te controleren. Met 10g, kan de Oracle database nu het
check-pointen zelf tunen om een goede recovery tijd te bereiken met een
lage impact op normale verwerking. Je hoeft geen checkpoint gerelateerde
parameters meer te zetten.
Deze methode verminderd de tijd voor
cache recovery en maakt de recovery omraamd en voorspelbaar door het
aantal dirty buffers en het aantal redo records dat gegenereerd wordt
tussen de meest recente redo record en het laatste checkpoint te
limiteren. Administrators speciferen een target(omraamd) tijd om de
cache recovery fase van recovery met de fast_start_mttr_target
initialisatie parameter, en Oracle past automatisch de incremental
checkpoints aan zodat het target bereikt wordt.
Het target_mttr
veld van v$instance_recovery bevat de daadwerkelijke MTTR target. Het
estimated_mttr record van v$instance_recovery bevat de geschatte MTTR
indien een crash gelijk zou voorkomen.
Bijvoorbeeld:SQL> SELECT TARGET_MTTR, ESTIMATED_MTTR, CKPT_BLOCK_WRITES FROM V$INSTANCE_RECOVERY;
TARGET_MTTR ESTIMATED_MTTR CKPT_BLOCK_WRITES
----------- -------------- -----------------
37 22 209187
Als je de fast_start_mttr_target op een niet nul waarde zet,
en terwijl de MTTR advisory op ON staat, raadt Oracle aan om de volgende
parameters te disabelen (op 0 zetten):
LOG_CHECKPOINT_TIMEOUT
LOG_CHECKPOINT_INTERVAL
FAST_START_IO_TARGET
Bovenop de informatie in v$instance_recovery over MTTR, hebben we ook
een belangrijke kolom genaamd, optimal_logfile_size, en
deze kunnen we altijd uitvragen. De waarde wordt weergegeven in MB en
veranderd continu, gebaseerd op de DML load op je database:
SQL> SELECT OPTIMAL_LOGFILE_SIZE FROM V$INSTANCE_RECOVERY;
OPTIMAL_LOGFILE_SIZE
--------------------
256
Als je een relatief stabiele database hebt, kan je de aangegeven
waarde gebruiken om je online redo log files te rebuilden naar deze
waarde.
Het resizen van je redo logs:
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TI
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------
1 1 6746 524288000 2 NO CURRENT 113661220 14-07-08
2 1 6744 524288000 2 YES INACTIVE 113638780 14-07-08
3 1 6745 524288000 2 YES INACTIVE 113650438 14-07-08
SQL>select * from v$logfile;
GROUP# STATUS TYPE MEMBER
---------- ------- ------- ------------------------------------------------
1 ONLINE +DGDB01/testdb/onlinelog/group_1.268.655983631
1 ONLINE +DGFRA01/testdb/onlinelog/group_1.263.655983651
2 ONLINE +DGDB01/testdb/onlinelog/group_2.267.655983429
2 ONLINE +DGFRA01/testdb/onlinelog/group_2.262.655983485
3 ONLINE +DGDB01/testdb/onlinelog/group_3.269.655983675
3 ONLINE +DGFRA01/testdb/onlinelog/group_3.264.655983695
Hieronder de (mogelijke) werkwijze:sql>alter database add logfile group 4 '+DGDB01' size 64M;
Switch de logs totdat de de groep die vergroot moet worden niet
meer active is (select * from v$log;) en drop deze:sql>alter system switch logfile;
sql>ALTER DATABASE DROP LOGFILE GROUP 1;
en tot slot een nieuwe toevoegen:SQL> alter database add logfile group 1 ('+DGDB01','+DGDB01') size 1024m;