Dnes je: 21. května 2012

Ostatní

Autor knihy

Oracle Database 11g - Hotová řešení

Kdo je online

Právě připojeni - hostů: 19 

Přihlásit se




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

 

Anketa

Využívají vaše databáze pro ukládání souborů ASM? (automatic storage management)
 

Certifikát Oracle Certifikát Oracle Certifikát Oracle Certifikát Oracle Certifikát Oracle Certifikát Oracle

Partnerské internetové stránky:
www.oracledba.cz www.asktom.cz www.tomas-solar.cz