soukromí & Cookies
tento web používá cookies. Pokračováním souhlasíte s jejich použitím. Další informace, včetně toho, jak ovládat soubory cookie.
tento článek je součástí řady Oracle Performance Tuning a je vytvořen k popisu uzamykacího mechanismu Oracle.
zámek je prostředek, který musíte držet, abyste získali přístup ke zdroji. Oracle má dva druhy zámků: enqueues a západky, nyní bychom se zaměřili na tyto uzamykací mechanismy jednotlivě.
Enqueues
Enqueues jsou sofistikované zámky pro správu přístupu ke sdíleným prostředkům (jako jsou tabulky, řádky, úlohy, redo vlákna). Dotaz lze vyžádat v různých úrovních / režimu:
- Null
- Row share
- Row exclusive
- Share row exclusive
- Share row exclusive
- Exclusive
pokud relace obsahuje enqueue v režimu Sdílení, mohou další relace také převzít enqueue v režimu sdílení (pro stejný zdroj). Pokud relace drží enqueue v exkluzivním režimu, ostatní relace, které ji chtějí získat-nezávisle na jaké úrovni – musí počkat.
je-li vyžadován přístup relací, získá se struktura zámku a požádá se o získání přístupu ke zdroji na určité úrovni (režim). Struktura zámku je umístěna na jednom ze tří propojených seznamů, které visí mimo zdroj, nazvaný vlastník (pokud by bylo možné získat enqueue), číšník (pokud relace čeká na získání enqueue) a převodník (relace drží enqueue v jedné úrovni, ale chce ji převést na jinou) seznamy.
Níže jsou uvedeny některé běžné typy dotazů:-
- TM-pokaždé, když relace chce zamknout tabulku, je požadován TM enqueue. Pokud relace odstraní řádek v nadřazené tabulce a vytvoří se referenční omezení (cizí klíč) bez indexu v podřízené tabulce nebo pokud relace aktualizuje sloupce, na které cizí klíč odkazuje,pak se v podřízené tabulce provede zámek sdílení. Pokud se jiná relace pokusí provést změny podřízené tabulky, musí počkat (protože chtějí, aby byl enqueue v exkluzivním režimu řádku, který není kompatibilní s režimem sdílení).
- TX-jakmile je transakce zahájena, je zapotřebí TX enqueue. Transakce je jednoznačně definována číslem segmentu vrácení zpět, číslem slotu v transakční tabulce segmentu vrácení zpět a pořadovým číslem čísla slotu. Relace může čekat na TX enqueue z několika důvodů:
- další relace uzamkne požadovaný řádek
- když se dvě relace pokusí vložit stejný jedinečný klíč do tabulky (žádná z nich neprovedla odevzdání), pak poslední relace čeká na první odevzdání nebo vrácení zpět.
- v záhlaví bloku není žádný volný ITL (seznam zúčastněných transakcí).
- ul-relace vzala zámek s DBMS_LOCK.Funkce požadavku.
západky
západky poskytují nízkoúrovňový serializační mechanismus chránící sdílené datové struktury v SGA. Západka je typ zámku, který lze velmi rychle získat a uvolnit. Západky se obvykle používají k zabránění více než jednomu procesu v provedení stejného kódu v daném čase. Když je západka získána, získává se na určité úrovni, aby se zabránilo zablokování. Jakmile proces získá západku na určité úrovni, nemůže následně získat západku na úrovni, která je stejná nebo menší než tato úroveň (pokud ji nezíská nyní). S každou západkou je spojen postup vyčištění, který bude vyvolán, pokud proces zemře při držení západky. Toto čištění se provádí pomocí služeb PMON. Základní implementace západek je závislá na operačním systému, zejména s ohledem na to, zda proces bude čekat na západku a jak dlouho.
cílem zámků je spravovat souběžný přístup ke sdíleným datovým strukturám tak, aby ke struktuře mohl přistupovat pouze jeden proces najednou. Blokované procesy (procesy čekající na provedení části kódu, pro kterou byla západka již získána jiným procesem) počká, dokud se západka neuvolní. Oracle používá atomové pokyny jako „test and set“ pro provoz na západkách. Vzhledem k tomu, že pokyny k nastavení a uvolnění západek jsou atomové, operační systém zaručuje, že jej získá pouze jeden proces, a protože se jedná pouze o jednu instrukci, je poměrně rychlý.
požadavky na západku lze provádět ve dvou režimech:
- willing-to-wait: požadavek režimu „willing-to-wait“ bude smyčka, čekat, a požádat znovu, dokud se nezíská západka.
- žádné čekání: v režimu „bez čekání“ proces požádá o západku a pokud není k dispozici, místo čekání je požadována další. Pouze v případě selhání musí proces serveru počkat.
rozdíl mezi západkami & Enqueues
jeden rozdíl mezi západkou a enqueue je, že enqueue je získán pomocí specifického uzamykacího mechanismu OS, zatímco západka je získána nezávisle na OS. Enqueue umožňuje uživateli uložit hodnotu do zámku (tj. režim, ve kterém ji požadujeme). Správce zámku OS sleduje zamčené zdroje. Pokud proces nelze udělit zámku, protože je nekompatibilní s požadovaným režimem a zámek je požadován s čekáním, operační systém umístí proces žádosti do čekací fronty, která je obsluhována ve FIFO.
dalším rozdílem mezi západkami a poptávkami je to, že poptávkové udržují a objednávají frontu číšníků, zatímco západky ne. Všechny procesy čekající na západku současně opakovat (v závislosti na plánovači). To znamená, že některý z číšníků by mohl dostat západku a pravděpodobně první, kdo se pokouší získat západku, může být poslední, kdo ji skutečně získá. Číšníci Latch mohou buď použít časovače k probuzení a opakování, nebo se mohou otáčet (pouze v multiprocesorech) točení na západce znamená držet CPU a čekat v očekávání uvolnění této západky v krátkém čase).