■バッファキャッシュについて
まずはOracleのバッファキャッシュについて説明します。
Oracleのバッファキャッシュに頻繁に使用するデータを格納することによって、物理I/Oを減らすことができます。このバッファキャッシュをいかに効率的に使えるかが、Oracleデータベース全体のパフォーマンスチューニングのキモとなるわけです。
バッファキャッシュには効率的にデータを格納するための機能、仕組みがいくつかあるのですが、その中に「マルチバッファ・プール」というものがあります。
これは、バッファキャッシュを3つのプールに分け、それぞれ適したデータを適したプールに割り当てることで、無駄なくバッファキャッシュを使うことができるというものです。
●3つのプール
1.DEFAULT
⇒通常のバッファキャッシュ
サイズの初期化パラメータ : DB_CACHE_SIZE
2.KEEP
⇒利用頻度の高く、できるだけバッファキャッシュ上に残したいデータを格納する為のプール
プールサイズは対象オブジェクトサイズより大きい必要がある
サイズの初期化パラメータ : DB_KEEP_CACHE_SIZE
3.RECYCLE
⇒利用頻度が低く、フルスキャンがよく行われるデータを格納する為のプール
サイズの初期化パラメータ : DB_RECYCLE_CACHE_SIZE
この3つのプールのどれに割り当てるかは、オブジェクト毎に設定する必要があります。
(確認例)
SELECT TABLE_NAME , BUFFFER_POOL
FROM DBA_TABLES
WHERE TABLE_NAME = [テーブル名]
(変更例)
ALTER TABLE [テーブル名] STORAGE(BUFFER_POOL [DEFAULT/KEEP/RECYCLE])
ざっくりですが、説明は以上です。
この内、KEEP POOL(KEEPキャッシュ)に関して、どれくらい有効か検証していたのですが、
その際にとんでもない事件が発生しました。
■KEEP POOLはちと不安定?
KEEP POOLをうまく利用すれば、Oracleのパフォーマンスが改善するのではないか?
との期待を胸にいろいろ検証し、相応の効果が見積れたので、KEEP領域設定を外すコマンドを実行したところ、
・・・ハングヽ(;゚;Д;゚;; )
結局DB再起動しました。
KEEP POOLが100%原因とは断定できませんが、数は少ないですがKEEP POOLにまつわる障害やバグ(?)の事例はあるようです。
との期待を胸にいろいろ検証し、相応の効果が見積れたので、KEEP領域設定を外すコマンドを実行したところ、
・・・ハングヽ(;゚;Д;゚;; )
結局DB再起動しました。
KEEP POOLが100%原因とは断定できませんが、数は少ないですがKEEP POOLにまつわる障害やバグ(?)の事例はあるようです。
ご利用の際はお気をつけて・・・
以下のサイトを参考にさせていただきました。
0 件のコメント:
コメントを投稿