V tomto tutoriálu Oracle vysvětlíme jednoduchý způsob, jak porozumět opakování skupiny protokolu vs soubor vs člen.
Dnes se naučíme koncept redo log bufferu v Oracle. Ve kterém se seznámíme s tím, co je redo log buffer, jak funguje a jaká je jeho role v architektuře Oracle.
Pokud chcete porozumět architektuře Oracle, je opravdu důležité porozumět fungování redo log bufferu. Níže uvedený článek vám také pomůže vyřešit otázky týkající se pohovoru.
Pochopení skupiny redo log vs soubor vs člen
Co je vyrovnávací paměť redo log?
Je to malá alokace paměti, která je standardně obvykle kolem 14 MB. Jedná se o cyklický buffer. Jakmile se zaplní, začne znovu zapisovat shora, po zaplnění data přepíše.
Co je to znovu provést zadání a změnit vektor?
Instance databáze Oracle zaznamenává všechny transakce DML/DDL do redo log bufferu SGA ve formě redo záznamů. Jednotlivé výpisy v transakci budou mít za následek jeden nebo více než jeden opakovaný záznam. Všechny tyto položky opakování se souhrnně nazývají vektor změny nebo vektor opakování.
Každá položka redo se skládá z příkazu redo a příkazu undo, například:
TABLE EMP
Empno | Jméno | Deptno |
---|---|---|
1 | Jhon | 10 |
2 | Tony | 20 |
3 | Laura | 50 |
4 | Tygr | 10 |
5 | Scott | 10 |
sql>delete empno from emp where deptno=10;
Ve výše uvedeném příkladu má tabulka emp 3 záznamy pro deptno=10. Oracle tedy vytvoří 3 opakované položky pro výše uvedený příkaz a tyto položky se zaznamenají do vyrovnávací paměti protokolu redo. Tyto 3 položky opakování se souhrnně nazývají vektor změny nebo vektor opakování.
Vektor změny není nic jiného než počet ovlivněných řádků jednou operací. Redo log buffer zachycuje transakce uživatele a také zachycuje anulující efekt (příkaz zpět) pro danou transakci.
Fungování procesu LGWR
Vzhledem k tomu, že velikost vyrovnávací paměti redo log je malá a nemůže se dynamicky zvětšovat, tyto zaznamenané položky redo log musí být pravidelně zapisovány na disk do online souboru redo log souboru. To se často nazývá vyprázdnění vyrovnávací paměti redo log a zapsání těchto opakovaných záznamů na disk provádí proces LGWR.
Když LGWR zapisuje znovu záznamy na disk?
LGWR je poměrně agresivní při zapisování těchto záznamů na disk. Níže jsou uvedeny události, kdy LGWR zapisuje znovu záznamy na disk.
- Když je velikost vyrovnávací paměti z 1/3 plná
- Když je ve vyrovnávací paměti opakování protokolu k dispozici 1 MB vektorů změn čekajících na zápis
- Každé 3 sekundy
- Kdykoli dojde ke kontrolnímu bodu
- Když uživatel provede své transakce
Parametr pro nastavení velikosti vyrovnávací paměti redo log
log_buffer=x bajtů
Struktura Redo Log Buffer
Architektura redo se skládá ze 3 věcí
- Opakovat vlákno (logické)
- Redologické skupiny (logické)
- Soubory členů redologu (fyzické)
1. Co je to vlákno redo log?
- Při vytváření kontrolního souboru je dáno parametrem „MAXINSTANCES“.
- Vlákno opakování se skládá ze skupin opakování. Aby bylo vlákno znovu funkční, musí být povoleno.
- V prostředí RAC můžete svázat opakované vlákno s konkrétní instancí pomocí parametru init.ora „thread“.
V databázi bez RAC by většinou existovalo jedno vlákno (vlákno =1)
2. Rozumíte skupině Redo log Group a jejímu stavu?
-Při vytváření kontrolního souboru je dán jako parametr „MAXLOGFILES“.
-Skupina redo log je kolekce identických souborů členů redo log.
-Ale pro lepší odolnost proti chybám je běžné uchovávat dva soubory členů redo log v každé skupině redo log.
-Pokud se jeden ztratí, nemá to vliv. Soubory členů redo log jsou identické (zrcadlové kopie)
LGWR paralelně píše všem členům dané skupiny redo log
V každém daném okamžiku proces LGWR zapisuje pouze do jedné skupiny redo log. Skupina redo log je pevná, což znamená, že soubory členů redo log nemohou dynamicky růst.
Skupina redo log, do které proces LGWR aktuálně zapisuje, je zobrazena se stavem „aktuální“
Jakmile je skupina redo log plná, proces LGWR přepne na další skupinu redo log.
Předchozí skupina bude zobrazovat stav „AKTIVNÍ“ a po nějaké době bude stav „NEAKTIVNÍ“
AKTUÁLNÍ => AKTIVNÍ => NEAKTIVNÍ => AKTUÁLNÍ => AKTIVNÍ => NEAKTIVNÍ …………………………………
AKTUÁLNÍ stav znamená, že Oracle aktuálně zapisuje do této vyrovnávací paměti
AKTIVNÍ Kontrolní bod opakování záznamů v této vyrovnávací paměti čeká na vyřízení
NEAKTIVNÍ stav znamená, že byl přepsán kontrolní bod a lze jej okamžitě přepsat.
Po vytvoření již nelze změnit velikost skupiny redo log, ale vždy zrušíte a znovu vytvoříte skupinu redo log s různými velikostmi. Nemůžete zrušit skupinu redo log se stavem „AKTUÁLNÍ“ nebo „AKTIVNÍ“.
Jak přepnout skupinu redo log?
Normálně LGWR automaticky přepíná mezi skupinami redo log, ale můžete ručně přepínat z jedné skupiny redo log do druhé pomocí příkazu.
sql>alter system switch logfile ;
Pokaždé, když LGWR vyzvedne novou skupinu redo log a přiřadí monotónně se zvyšující číslo této skupině redo log s názvem „Log sequence number“ nebo „sequence#“. Na metadata skupin redo log se můžete dotazovat pomocí view:- v$log Skupiny redo log se zapisují pomocí velikosti bloku fyzického disku (sektor 512 bajtů)
Jak přidat novou skupinu redo log
sql>alter database add logfile group 3 ('/path/to/member1.log', '/path/to/member2.log') size 100m reuse;
Zde význam opětovného použití říká, znovu použít soubory member 1.log nebo member2.log soubor, pokud již existuje ve stejné cestě.
Jak přerušit skupinu protokolu
Skupiny protokolů můžete znovu provést za předpokladu, že stav není AKTUÁLNÍ nebo AKTIVNÍ. Také po použití tohoto příkazu by měl být počet dostupných skupin redo log 2 nebo více.
sql>alter database drop logfile groups 3;
3. Znovu zaznamenat soubory členů (fyzické)
Při vytváření kontrolního souboru je dán parametrem „MAXLOGMEMBERS“. Soubory členů redo log jsou dostupné fyzicky na úrovni OS. Velikost souboru je pevně daná v době vytvoření skupiny protokolu znovu.
Soubor nemůže dynamicky růst. LGWR paralelně píše všem členům dané skupiny redo log.
Soubory členů ve skupině redo log jsou identické. Na informace o stavu se můžete zeptat z pohledu v$logfile
Jak přidat nového člena do existující skupiny?
sql>alter database add logfile member '/path/to/new/member1.log' to group 3;
Člena můžete vyřadit ze skupiny za předpokladu, že zůstane jeden člen a stav skupiny není aktuální
sql>alter database drop logfile member '/path/to/member_to_be_deleted.log';
Chcete-li se zeptat na podrobnosti přepínání opakování protokolu
můžete dotazovat v$log-history
sql>select count(*), trunc(first_time) from v$log_history;
skupinu přepsat znovu provedené položky
Proč se mi v alert.log zobrazuje „kontrolní bod není dokončen“
Když LGWR dorazí ke skupině redo log, aby přepsala položky redo, a do té doby, pokud kontrolní bod této skupiny čeká na vyřízení, uvidíte v protokolu výstrah zprávu „kontrolní bod není dokončen“ Z tohoto důvodu LGWR nemůže okamžitě přepsat skupinu redo log.
Oracle tedy spustí „kontrolní bod“, který vyprázdní špinavé vyrovnávací paměti způsobené opakovanými záznamy na disk. Teprve poté může LGWR přepsat do vyrovnávací paměti znovu. Znamená to, že LGWR musí nějakou dobu počkat, což není dobré. Chcete-li překonat, přidejte další skupiny redo log a/nebo zvětšete velikost skupin redo log.
Doufáme, že výše uvedené podrobnosti vám pomohou lépe porozumět vyrovnávací paměti redo log.
Toto je konec tutoriálu, pochopení skupiny redo log group vs. soubor vs člen.