12. 9. 2018

Oracle - upravenie veľkosti redo súborov

Prepínanie redo (obsahujú informácie o potrebných zmenách v dátových súboroch, ktoré nemusia byž ešte zapísané) má istú "réžiu", znižuje tak v prípade častého prepínania výkon databázy.

Pri dlhých časoch medzi sa zas zvyšuje možnosť straty dát, hrozí dlhé recovery pri každom páde, resp reštarte DB.

Podľa viacerých zdrojov je ideálny čas prepínania redo zhruba 20-30min. Ako ich veľkosť doladiť u bežiacej databázy?


Skriptom vieme zistiť ako často sa redo prepína a upraviť tak jeho veľkosť. Môžeme použiť skript z minulého článku ukazujúci počet prepnutí za hodinu, alebo tento ukazujúci čas medzi prepnutiami:

-- AKO CASTO PREPINA (MINUTY), IDEALNE 20-30min

select  b.recid, to_char(b.first_time, 'dd.mm.yyyy hh:mi:ss') start_time,
        to_char(a.first_time, 'hh:mi:ss') end_time,
        round(((a.first_time-b.first_time)*25)*60,2) minutes
from    v$log_history a, v$log_history b
where   a.recid = b.recid + 1
order   by a.first_time desc;

--------------
48294 11.09.2018 06:20:06 06:20:16 0,17
48293 11.09.2018 06:16:45 06:20:06 3,49
48292 11.09.2018 06:14:30 06:16:45 2,34
48291 11.09.2018 06:11:27 06:14:30 3,18
48290 11.09.2018 06:10:00 06:11:27 1,51

V tomto prípade prepína priemerne raz za 2 minúty, teda zväčším veľkosť redo na 10-násobok.
Pozriem si pôvodnú veľkosť, počet skupín, súborov, ich umiestnenie na diskoch a ktorý z nich je aktuálne použitý:

select l.group#, lf.member, l.bytes/1024/1024 mb, l.status, l.archived
from v$logfile lf, v$log l
where l.group# = lf.group#
order by 1, 2;

-------
1 /r01/oracle/DB1/redo/redo_001.rlg 100 ACTIVE   YES
2 /r01/oracle/DB1/redo/redo_002.rlg 100 CURRENT  NO
3 /r01/oracle/DB1/redo/redo_003.rlg 100 INACTIVE YES

Tu vidím, že mám 3 skupiny po 100MB súboroch. V tomto prípade je potrebné držať skupinu 1 (active) a 2 (current) zapnutú. Active zlúčim do current príkazom "Alter system checkpoint;", uvoľním tak pre úpravy aj skupinu č.1.

V tomto prípade (po checkpoint) budem môcť zrušiť a prerobiť na cieľové veľkosti postupne skupinu 1 a 3 (oracle požaduje minimálne dve skupiny funkčné). Následne môžem prepnúť redo zo skupiny 2 na 3 a prerobiť aj pôvodnú 2. Ak mám záujem, môžem okrem zmeny veľkosti meniť aj meno a cestu k súborom (sťahovanie).

-- PREPNEM ACTIVE DO CURRENT, UVOLNIM AJ GRUPU 1
alter system checkpoint;

-- ZRUSIM A VYTVORIM GRUPU 1 S VELKOSTOU 1GB
alter database drop logfile group 1;
alter database add logfile group 1 '/r01/oracle/DB1/redo/redo_001.rlg'
size 1000M reuse;

-- TO ISTE S GRUPOU 3
alter database drop logfile group 3;
alter database add logfile group 3 '/r01/oracle/DB1/redo/redo_003.rlg'
size 1000M reuse;

-- PREPNEM CURRENT GRUPU Z 2 NA 3
alter system switch logfile;
1 /r01/oracle/DB1/redo/redo_001.rlg 1000 INACTIVE YES
2 /r01/oracle/DB1/redo/redo_002.rlg 100 ACTIVE   YES
3 /r01/oracle/DB1/redo/redo_003.rlg 1000 CURRENT  NO

-- ODZALOHUJE A PRESKOCI NA DRUHY
alter system checkpoint;
1 /r01/oracle/DB1/redo/redo_001.rlg 1000 INACTIVE YES
2 /r01/oracle/DB1/redo/redo_002.rlg 100 INACTIVE YES
3 /r01/oracle/DB1/redo/redo_003.rlg 1000 CURRENT  NO

-- ZVACSIM POSLEDNY V GRUPE 2
alter database drop logfile group 2;
alter database add logfile group 2 '/r01/oracle/DB1/redo/redo_002.rlg'
size 1000M reuse;

Týmto postupom som prerobil bez odstávky logy na potrebnú veľkosť a neskôr môžem skontrolovať, ako sa upravili počty prepnutí redo.

V prípade ak sú počty presne napr. 1 za hodinu, je možné že tieto logy prepína iba RMAN backup archlogov z cronu. V takom prípade (aj keby to nebolo iba zálohami) je samozrejme naopak vhodné redo zmenšiť (z 500MB na 100MB), ale iba po rozumnú hranicu.

Žiadne komentáre:

Zverejnenie komentára