ORACLEデータベース起動時に確保されるSGAと呼ばれるメモリ内に領域が確保されています。本ページではバッファキャッシュに関連するチューニング方法や確認方法をまとめています。Used)アルゴリズムによって、最も参照頻度が低いブロックからバッファキャッシュから追い出されていきます(エイジアウト)・エイジアウトのロジックは完璧なLRUアルゴリズムではなく、ORACLE独自のロジックが含まれています。バッファキャッシュの2%のサイズを超えるセグメントはラージセグメントとして扱われ、ラージセグメントのフルスキャンにより読み込まれたブロックは既存のバッファキャッシュ上のブロックが多くエイジアウトされてしまうことを防ぐため最もエイジアウトされやすい位置に登録されます。このため、バッファキャッシュに空きがない状態で巨大なテーブルのフルスキャンを実施してもほぼキャッシュに乗らない場合があります。・バッファキャッシュ上のブロックはxcur(最新で更新可能)、cr(参照モード)等のステータスを持ちます。同一ブロックに対してxcurステータスのブロックは一つだけですが、crモードのブロックは複数保持する場合があります。これは異なるSCNの状態のcrモードのブロックを保持することによってUNDOを参照せずにデータを戻すことができるためです。Image、更新された後に他ノードでさらに更新済みのブロック)等のRAC固有のステータスもあります。大量データのロード等により大量のブロックを登録する場合バッファキャッシュへの登録やバッファキャッシュからのエイジアウト等の処理自体が遅延の原因になりえます。いったケースの場合バッファキャッシュ関連の処理を全てスキップして直接データファイルに登録するダイレクト処理を利用することで従来型処理よりも高速に処理することができます。バッファキャッシュに乗らないことが災いして後続処理がDISKアクセス多発により遅延する可能性もあるため総合的にみると従来型処理で処理したほうがよいケースもあります。readダイレクトリードが使用されるのは主にパラレル処理、ラージセグメントに対するフルスキャン(11g~、デフォルト10%で隠しパラメータで制御可能)、direct=yを指定したexp、expdpとなります。values(11g~)、sqlldrのdirect=yです。ダイレクトライトは既存ブロックに対する更新ができないためupdateやdelete等はダイレクト処理できません。APPEND_VALUESヒント付のinsert文を配列等を使用せずに1行ずつループするとデータサイズが膨れ上がり無駄な空き領域が大量にできるので注意が必要です。RAWデバイス(ASM含む)にデータを配置したほうが理想的です(ただし、ASMはASMインスタンスを介してファイルアクセスされるという別のオーバヘッドがあります)。ファイルシステム上にデータファイルを置いている場合はOSファイルキャッシュによりORACLEのバッファキャッシュ上にブロックがない状態でも性能が早くなる可能性もあるため性能検証には注意する必要があります。ストレージ機器のキャッシュほとんどのストレージ機器はキャッシュ機能を備えており、キャッシュによって主に書き込み時のレスポンス向上等を実現しています。back方式)ことになるためストレージの障害時にはデータが整合性が取れなくなりリカバリが必要になる可能性が高くなります。throughで書き込むようにするか別のストレージに配置したほうが無難です。関連システム統計バッファキャッシュに関連する主なシステム統計としては以下のようなものがあります。以下のようなSQLにより各セグメントがどの程度バッファキャッシュ上にあるか確認することができます。本サイトはリンクフリーです。本サイトの情報により発生した問題等については一切責任を負えません。管理人への連絡はftpsaba0123@hotmail.comまでどうぞ。