| Ladění paměti Buffer cache |
|
Parametr db_cache_size je asi nejdůležitější z parametrů týkající se ladění paměti. Má také největší vliv na výkonnost serveru a to z jednoho důvodu. Při požadavku na data se nejdříve zkoumá buffer cache. Jsou-li data v paměti, je požadavek obstarán velmi rychle neboť se data čtou přímo z paměti. Tomuto čtení se říká logické čtení. Oproti tomu je fyzické čtení, ke kterému dochází v případě, že požadovaná data nejsou v paměti a je nutné je načíst ze souboru. Čtení z paměti je 100x rychlejší než čtení z disku, a proto je důležité nastavit správně buffer cache, tedy oblast kam se daná data ukládají. Snahou je přiblížit se ke 100% dat načtených z paměti. Ve skutečnosti toho nikdy nedocílíte, je ale dobré najít optimální velikost paměti tak, aby byla schopna poskytovat data pro běžnou sadu dotazů. U OLTP databází se obvykle hodnota pohybuje kolem 97%. Vzorec, který se pro výpočet používá je následující.
Poměr úspěšnosti = 1 - (fyzické čtení / (logické čtení)) * 100 Hit ratio = 1 - (physical reads / (db block gets + consistent gets)) * 100
Veškeré potřebné informace získáte z tabulky v$sysstat. Hodnoty jsou nízké, protože daný server je jen testovací a není zde vysoká aktivita. SQL> select name, value From v$sysstat where name in ('db block gets', 'consistent gets', 'physical reads'); NAME VALUE ---------------------------------------------------------------- db block gets 844808 consistent gets 3968570 physical reads 38381
Výpočtem pak zjistíte, že Hit Ratio = 99.2% což je v pořádku. V databázi je velmi užitečný pohled v$db_cache_size, který vám pomůže zvolit optimální velikost paměti cache. Použijte následující dotaz.
select size_for_estimate c1,buffers_for_estimate c2, estd_physical_read_factor c3,estd_physical_reads c4 from v$db_cache_advice where name = 'DEFAULT' and block_size = (SELECT value FROM V$PARAMETER WHERE name = 'db_block_size') and advice_status = 'ON';
Výstup bude obsahovat o informace o počtu fyzického čtení z disku v závislosti na velikosti paměti cache. Estd Phys Estd Phys Cache Size (m) Buffers Read Factor Reads ---------------- ------------ ----------- ------------ 8 996 2.55 58,881 16 1,992 1.69 38,893 24 2,988 1.44 33,153 ... 72 8,964 1.04 23,928 80 9,960 1.01 23,173 88 10,956 1.00 23,057 <-- Současná velikost paměti buffer cache 96 11,952 .99 22,805 ... 144 17,928 .95 21,828 152 18,924 .93 21,450 160 19,920 .89 20,511
Jak vidíte, při velikosti paměti buffer cache 88M je předpokládaný počet čtení z disku 23057. Při velikosti 8M by to bylo 58881 naopak při navýšení paměti na 160M by došlo jen k nepatrnému zlepšení. To samé můžete zkontrolovat i EM. V nabídce Advisor central --> Memory advisors uvidíte rozložení paměti. Při zapnutém ASMM, se pamět rozděluje automaticky.
Obrázek 7.3: Rozložení paměti v databázi Klepnete-li na tlačítko Advice uvidíte graf s doporučením jak velkou pamět SGA nastavit.
Poznámka: Doporučuji nechat Automatic shared memory management zapnutý a ponechat tedy automatické rozdělení na databázi v závislosti na činnosti databáze. Parametr db_cache_buffer není jediný parametr na který se při ladění musíte podívat a je potřeba řešit problémy v celkovém kontexu v závislosti na činnosti databáze, rychlosti sítě, disků atd.
Metalink: 151052.1 Init.ora Parameter "DB_CACHE_SIZE" Reference Note 443746.1 Automatic Memory Management(AMM) on 11g 373510.1 V$Db_cache_advice Returns No Rows
|
Partnerské internetové stránky:
www.oracledba.cz www.asktom.cz www.tomas-solar.cz