Rajat DBA Blog
Toto je kopie referenční poznámky Metalink 22908.1 pro ty, kteří k němu nemají přístup.
- co je západka?
zámky jsou nízkoúrovňové serializační mechanismy používané k ochraně sdílených datových struktur v SGA. 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.
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. 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. Západky mají přidruženou úroveň, která se používá k zabránění 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í).
2.Západky vs. Enqueues
Enqueues jsou dalším typem uzamykacího mechanismu používaného v Oracle.
enqueue je sofistikovanější mechanismus, který umožňuje několika souběžným procesům různou míru sdílení “známých” zdrojů. Jakýkoli objekt, který může být současně použit, může být chráněn enqueues. Dobrým příkladem jsou zámky na stolech. Umožňujeme různé úrovně sdílení na tabulkách, např. dva procesy mohou uzamknout tabulku v režimu sdílení nebo v režimu aktualizace sdílení atd. Jedním rozdílem je, že enqueue je získán pomocí specifického uzamykacího mechanismu 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 procesu nelze udělit zámek, 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í požadující proces do čekací fronty, která je obsluhována ve FIFO.
dalším rozdílem mezi západkami a poptávkami je to, že v zámcích není uspořádaná fronta číšníků jako v poptávkách. Latch číšníci mohou buď použít časovače k probuzení a opakování nebo spin (pouze v multiprocesorech). Vzhledem k tomu, že všichni číšníci se souběžně opakují (v závislosti na plánovači), někdo může dostat západku a pravděpodobně první, kdo se pokusí, může být poslední, kdo se dostane.
- kdy potřebujeme získat západku?
proces získává západku při práci se strukturou v SGA (Globální oblast systému). Nadále drží západku po dobu, po kterou pracuje se strukturou. Západka je upuštěna, když je proces dokončen se strukturou. Každá západka chrání jinou sadu dat, identifikovanou názvem západky.
Oracle používá atomové pokyny jako “test and set” pro provoz na západkách. Procesy čekající na provedení části kódu, pro kterou byla západka již získána jiným procesem, počkají, až se západka uvolní. Příkladem jsou přepisovací západky, kopírovací západky, archivní kontrolní západka apod. Základní myšlenkou je blokovat souběžný přístup ke sdíleným datovým strukturám. 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. Vzhledem k tomu, že se jedná pouze o jednu instrukci, je to poměrně rychlé. Západky jsou drženy po krátkou dobu a poskytují mechanismus pro vyčištění v případě, že držák při jeho držení abnormálně zemře. Toto čištění se provádí pomocí služeb PMON.
- západky režimy požadavku?
požadavky na západky lze provést ve dvou režimech: “willing-to-wait “nebo” no wait”. Normálně, západky budou požadovány v režimu” ochotný čekat”. Požadavek v režimu” willing-to-wait ”
bude smyčkovat, čekat a požadovat znovu, dokud nebude získána západka. V režimu “bez čekání” proces požádá o západku. Pokud jeden není k dispozici, místo čekání je požadován další. Pouze v případě selhání musí proces serveru počkat.
příklady zámků “ochotných čekat” jsou: zámky sdíleného fondu a knihovny
příkladem zámků “bez čekání” je západka opakování kopírování.
5. Co způsobuje vzpouru západky?Pokud je požadovaná západka zaneprázdněna, proces, který ji požaduje, se točí, zkouší to znovu a pokud stále není k dispozici, točí se znovu. Smyčka se opakuje až do maximálního počtu opakování určeného inicializačním parametrem _SPIN_COUNT. Pokud po této celé smyčce není západka stále k dispozici, proces musí přinést CPU a jít spát. Zpočátku spí na jeden centisekundy. Tento čas se zdvojnásobí v každém následujícím spánku.
to způsobí zpomalení a má za následek další využití procesoru, dokud není k dispozici západka. Využití CPU je důsledkem “spřádání” procesu. “Spinning” znamená, že proces pokračuje v hledání dostupnosti západky po určitých časových intervalech, během kterých spí.
- jak identifikovat spor o vnitřní západky?
zobrazení relevantních datových slovníků k dotazu:
v $ LATCH
V $ LATCHHOLDER
V $ LATCHNAME
každý řádek v tabulce v$LATCH obsahuje statistiky pro jiný typ západky. Sloupce tabulky odrážejí aktivitu pro různé typy požadavků na západku. Rozdíl mezi těmito typy požadavků spočívá v tom, zda žádající proces nadále požaduje západku, pokud není k dispozici:
ochotný čekat pokud západka požadovaná s požadavkem ochotného čekat
není k dispozici, žádající proces
čeká krátkou dobu a znovu požaduje západku.
proces pokračuje čekáním a požadováním, dokud není k dispozici západka
.
žádné čekání pokud je západka požadovaná s okamžitým požadavkem
není k dispozici, proces požadavku ne
čeká,ale pokračuje ve zpracování.
V$LATCHNAME klíčové informace:
získá počet úspěšných požadavků ochotných čekat na
západku.
chybělo, kolikrát byla počáteční žádost o ochotné čekání
neúspěšná.
spí, kolikrát proces čekal a požádal o západku
po počátečním požadavku wiling-to-wait.
IMMEDIATE_GETS počet úspěšných okamžitých požadavků pro každou západku.
IMMEDIATE_MISSES počet neúspěšných okamžitých požadavků pro každou západku.
výpočet latch hit ratio
Chcete-li získat poměr Hit pro západky, použijte následující vzorec:
“willing-to-wait” Hit Ratio=(GETS-MISSES)/GETS
“no wait” Hit Ratio=(IMMEDIATE_GETS-IMMEDIATE_MISSES)/IMMEDIATE_GETS
toto číslo by mělo být blízko 1. Pokud ne, Nalaďte podle názvu latch
- užitečné skripty SQL pro získání informací o latch
/*
** Zobrazení statistik západky v celém systému.
* /
formát názvu sloupce A32 zkrácený Nadpis “název LATCH”
sloupec PID Nadpis “držák PID”
vybrat c.name,a. addr,a.gets,a.misses, a.sleeps,
a.immediate_gets,a.immediate_misses, b.pid
z v$latch a, v$latchholder b, v$latchname c
kde a.addr = B.laddr(+)
a a.latch# = c. latch#
pořadí podle a. latch#;
/*
** vzhledem k adrese západky zjistěte název západky.
* /
název sloupce Formát a64 Nadpis ‘Název’
vybrat a.name z v$latchname a, v$latch b
kde b. addr = ‘&addr ‘
a b. latch#=a. latch#;
/*
** Zobrazení statistik latch podle názvu latch.
* /
název sloupce Formát A32 Nadpis ‘LATCH NAME’
sloupec PID Nadpis ‘HOLDER PID’
vybrat c.name,a. addr,a.gets,a.misses, a.sleeps,
a.immediate_gets,a.immediate_misses, b.pid
z v$latch a, v$latchholder b, v$latchname c
kde a.addr = B.laddr(+) a a.latch# = c. latch#
a c.name jako ‘&latch_name% ‘ pořadí podle. latch#;
- seznam všech zámků
verze Oracle se mohou lišit v latch # přiřazené existujícím západkám.
následující dotaz vám pomůže identifikovat všechny západky a přiřazené číslo.
název sloupce Formát A40 Nadpis ‘LATCH NAME’
vyberte latch#, name from v$latchname;
- seznam západek, které se nejvíce týkají DBA
- vyrovnávací paměť cache zámky: existují dvě hlavní západky, které chrání datové bloky v vyrovnávací paměti cache. Tvrzení o těchto dvou západkách je obvykle vidět, když má databáze vysoké I / O sazby. Můžeme omezit svár o tyto západky a naladit je úpravou určitých init.parametry ora.
cache buffers chains latch:
tato západka je získána vždy, když je přístup k bloku v vyrovnávací paměti cache (připnutý).
snížení tvrzení o vyrovnávací paměti cache řetězce západka bude obvykle vyžadovat snížení logické I / o sazby vyladěním a minimalizaci I / o požadavky SQL zapojených. Vysoké I / o sazby by mohly být známkou horkého bloku(což znamená blok vysoce přístupný).
Viz Poznámka 163424.1 Jak identifikovat horký blok v databázi správně identifikovat tento problém.
vyrovnávací paměť LRU řetězová západka:
vyrovnávací paměť LRU řetězová západka je získána za účelem zavedení nového bloku do vyrovnávací paměti a při zápisu vyrovnávací paměti zpět na disk, konkrétně při pokusu o skenování řetězce LRU (nejméně nedávno použitého) obsahujícího všechny špinavé bloky v vyrovnávací paměti.
je možné snížit nároky na vyrovnávací paměť LRU řetězce západky zvýšením velikosti vyrovnávací paměti cache, a tím snížení rychlosti, s jakou jsou nové bloky zavedeny do vyrovnávací paměti cache. Dva parametry diktují velikost vyrovnávací paměti cache, DB_BLOCK_SIZE a DB_BLOCK_BUFFERS. Ve skutečnosti lze změnit pouze DB_BLOCK_BUFFERY bez opětovného vytvoření databáze. Pozor, při ladění fondu vyrovnávací paměti se vyhněte použití dalších vyrovnávacích pamětí, které přispívají k poměru zásahů mezipaměti jen málo nebo nic. Častou chybou je pokračovat ve zvyšování hodnoty DB_BLOCK_BUFFERS. Takové zvýšení nemá žádný vliv, pokud provádíte Úplné skenování tabulky nebo jiné operace, které nepoužívají vyrovnávací paměť. Více vyrovnávací paměti bazény mohou pomoci snížit svár na této západky.Můžete vytvořit další cache vyrovnávací paměti LRU řetězové zámky úpravou konfiguračního parametru DB_BLOCK_LRU_LATCHES. Můžete být schopni snížit zatížení na cache vyrovnávací paměti řetězce západky zvýšením konfiguračního parametru _DB_BLOCK_HASH_BUCKETS
- REDOLOG vyrovnávací paměti západky: existují dva Redo vyrovnávací paměti západky, redo alokační západka a Redo copy západka. Aby bylo možné přidělit místo v vyrovnávací paměti, musí být získána alokační západka redo. Pokud je položka redo log, která má být provedena, větší než konfigurační parametr LOG_SMALL_ENTRY_MAX_SIZE, může relace, která získá redo alokační západku, zkopírovat záznam do vyrovnávací paměti redo okamžitě, zatímco drží alokační západku. Pokud je položka protokolu větší než log_small_entry_max_size, pak relace uvolní západku přidělení redo a získá západku opakování copy, aby se záznam zkopíroval. Existuje pouze jedna alokační západka redo, ale může existovat až log_simultaneous_copies alokační západky.
Redo allocation latch:
tato západka řídí přidělení místa pro položky redo v vyrovnávací paměti protokolu redo. V každé instanci je jedna alokační západka redo.
tvrzení o této západce v Oracle7 lze snížit snížením hodnoty LOG_SMALL_ENTRY_MAX_SIZE na systémech s více cpu, aby se vynutilo použití
znovu kopírovat západku. V Oracle8i je tento parametr zastaralý, takže je třeba zvážit zvětšení velikosti log_bufferu nebo snížení zatížení vyrovnávací paměti protokolu pomocí funkcí NOLOGGING, pokud je to možné.
Redo copy latch:
tato západka se používá k zápisu záznamů redo do vyrovnávací paměti redolog. Tato západka je očekávána na systémech s jedním i více cpu.
v systémech s více cpu lze tvrzení snížit zvýšením hodnoty LOG_SIMULTANEOUS_COPIES (skryté v Oracle8i) a / nebo zvýšením LOG_ENTRY_PREBUILD_THRESHOLD(nezdokumentované v Oracle7).
- knihovna CACHE
knihovna cache latch:
knihovna cache západky chránit mezipaměti SQL příkazy a objekty definice uložené v mezipaměti knihovny v rámci sdíleného fondu. Chcete-li do mezipaměti knihovny Přidat nový příkaz, musí být získána západka mezipaměti knihovny. Během analýzy Oracle vyhledá v mezipaměti knihovny odpovídající příkaz. Pokud jeden není nalezen, Oracle analyzuje příkaz SQL, získá západku mezipaměti knihovny a vloží nový SQL.
prvním zdrojem pro snížení sváru na této západce je zajistit, aby aplikace znovu používala co nejvíce reprezentace příkazů SQL. Použijte vázat proměnné, kdykoli je to možné v aplikaci. Chyby na této západce mohou být také známkou toho, že aplikace analyzuje SQL vysokou rychlostí a může trpět příliš velkou režií procesoru.Pokud je aplikace již naladěna SHARED_POOL_SIZE může být zvýšena. Uvědomte si, že pokud aplikace nepoužívá mezipaměť knihovny vhodně, tvrzení může být horší s větší strukturou, která má být zpracována.
parametr _KGL_LATCH_COUNT řídí počet zámků mezipaměti knihovny. Výchozí hodnota by měla být dostatečná, ale pokud nelze vyřešit spor o západku mezipaměti knihovny, může být vhodné tuto hodnotu zvýšit. Výchozí hodnota pro _KGL_LATCH_COUNT je další prvočíslo po CPU_COUNT. Tato hodnota nesmí překročit 66(viz:).
knihovna cache PIN západka:
knihovna cache PIN západka musí být získána při reexecuted příkaz v knihovně cache. Chyby na této západce se vyskytují, když je velmi vysoká rychlost provádění SQL.
existuje jen málo, co lze udělat, aby se snížilo zatížení západky mezipaměti knihovny, i když se používají spíše soukromá než veřejná synonyma nebo přímé odkazy na objekty, jako je vlastník.Tabulka může pomoci.
- SHARED POOL RELATED západky
Shared pool latch:
zatímco knihovna cache latch chrání operace withing knihovny cache, shared pool latchis používá k ochraně kritických operací při přidělování a uvolnění paměti ve sdíleném fondu.
pokud aplikace používá doslovný (nesdílený) SQL, může to výrazně omezit škálovatelnost a propustnost. Náklady na analýzu nového příkazu SQL jsou drahé jak z hlediska požadavků CPU, tak z hlediska toho, kolikrát bude třeba získat a uvolnit mezipaměť knihovny a sdílené zámky fondu. Před Oracle9 existuje pouze jedna taková západka do celé databáze, která chrání alokaci paměti v mezipaměti knihovny. V Oracle9 bylo představeno více dětí, aby zmírnilo svár o tomto zdroji.
způsoby, jak snížit sdílenou západku fondu, jsou, pokud je to možné, vyhnout se tvrdým analýzám, analyzovat jednou, spustit mnoho. Odstranění doslovného SQL je také užitečné, aby se zabránilo sdílené západky fondu. Velikost shared_pool a použití MTS (možnost sdíleného serveru) také výrazně ovlivňuje západku sdíleného fondu. Poznámka 62143.1 vysvětluje, jak identifikovat a opravit problémy se sdíleným fondem a sdílenou západkou fondu.
row cache objects latch:
tato západka přichází do hry, když se uživatelské procesy pokoušejí o přístup k hodnotám slovníku dat uložených v mezipaměti.
není běžné mít v této západce svár a jediný způsob, jak snížit svár o tuto západku, je zvětšení velikosti sdíleného fondu (SHARED_POOL_SIZE).
- Tuning _spin_count (_LATCH_SPIN_COUNT v Oracle7)
SPIN_COUNT řídí, kolikrát se proces znovu pokusí získat západku, než ustoupí a půjde spát. To v podstatě znamená, že proces je v těsné smyčce CPU, která se neustále snaží získat západku pro pokusy SPIN_COUNT. Na jednom systému CPU pokud se proces Oracle pokusí získat západku, ale je držen někým jiným, proces uvolní CPU a na krátkou dobu usne, než to zkusí znovu. Na víceprocesorovém systému (SMP) je však možné, že proces, který drží západku, běží na jednom z ostatních procesorů, a tak potenciálně uvolní západku v následujících několika pokynech (západky jsou obvykle drženy jen velmi krátkou dobu).
výkon lze upravit změnou hodnoty SPIN_COUNT. Pokud je použita vysoká hodnota, západka bude dosažena dříve, než pokud použijete nízkou hodnotu. Pokud však používáte vysokou hodnotu pro SPIN_COUNT, můžete použít více času otáčení procesoru k získání západky. Tuto pravděpodobnost spánku relace můžete snížit zvýšením hodnoty konfiguračních parametrů _LATCH_SPIN_COUNT nebo SPIN_COUNT. Tento parametr řídí počet pokusů, které relace provede k získání západky před spaním. Spřádání na západce spotřebovává CPU, takže pokud zvýšíte tento parametr, můžete vidět zvýšení celkového využití procesoru v systémech. Pokud je váš počítač blízko 100% CPU a vaše aplikace je propustnost spíše než doba odezvy, můžete zvážit snížení SPIN_COUNT, abyste ušetřili CPU. Nastavení SPIN_COUNT je pokus a omyl. Obecně platí, že pouze zvýšit SPIN_COUNT v případě, že je k dispozici dostatek volných prostředků CPU v systému, a snížit ji pouze v případě, že není k dispozici žádná volná kapacita CPU.
Leave a Reply