Oracle Datenbank-Tuning - Der Buffer Cache

Objekte den Buffer Pools zuordnen

Mit einer ALTER TABLE- oder einer ALTER INDEX-Anweisung können Sie, so wie in folgendem Listing, ein Objekt einem Buffer Pool zuordnen.

SQL> ALTER TABLE dwh.household_facts
2 STORAGE (BUFFER_POOL RECYCLE);
Tabelle wurde geändert.
SQL> ALTER TABLE dwh.time_dim
2 STORAGE (BUFFER_POOL KEEP);
Tabelle wurde geändert.

Mit der Abfrage in dem nächsten Listing können Sie feststellen, welches Objekt sich in welchem Pool befindet. Sie können die Pool-Zuweisungen jederzeit dynamisch verändern.

SQL> SELECT segment_name, segment_type, buffer_pool
2 FROM dba_segments
3 WHERE owner = 'DWH';
SEGMENT_NAME SEGMENT_ BUFFER_
-------------------- -------- -------
HOUSEHOLD_FACTS TABLE RECYCLE
ACCOUNT_DIM TABLE DEFAULT
BRANCH_DIM TABLE DEFAULT
HOUSEHOLD_DIM TABLE DEFAULT
PRODUCT_DIM TABLE DEFAULT
STATUS_DIM TABLE DEFAULT
TIME_DIM TABLE KEEP
ACCOUNTS_PART TABLE PA DEFAULT

Die Buffer bleiben nach Ausführung der ALTER TABLE-Anweisung zunächst im ursprünglichen Pool. Erst wenn die Blöcke das nächste Mal von der Festplatte gelesen werden, gelangen sie in den neuen Pool.

Die Performance der Buffer Pools kann mit Hilfe des Views V$BUFFER_POOL_STATISTICS überwacht werden. Die Abfrage in folgendem Listing zeigt die Hit Ratio pro Pool.

SQL> SELECT name, block_size,
2 DECODE(db_block_gets + consistent_gets,
3 0,0,1-(physical_reads / (db_block_gets +
consistent_gets))) "Hit Ratio"
4 FROM v$buffer_pool_statistics;
NAME BLOCK_SIZE Hit Ratio
-------------------- ---------- ----------
KEEP 8192 ,958333333
RECYCLE 8192 ,571428571
DEFAULT 8192 ,904970208
DEFAULT 16384 1

Wahrscheinlich haben Sie damit gerechnet, dass der Keep Pool näher bei 100 % liegt. Beachten Sie, dass es sich um eine kumulative Statistik seit dem letzten Start der Instanz handelt und die Datenblöcke mindestens einmal von der Festplatte gelesen werden müssen. Außerdem wird auch der Keep Pool nach dem LRU-Prinzip verwaltet.