2013/08/06

OracleバッファキャッシュのKEEP POOLは危険!?

■バッファキャッシュについて

まずは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にまつわる障害やバグ(?)の事例はあるようです。


ご利用の際はお気をつけて・・・


以下のサイトを参考にさせていただきました。

0 件のコメント:

コメントを投稿