データベース・バッファ・キャッシュは、バッファ・キャッシュとも呼ばれ、データベース・インスタンスのシステム・グローバル領域(SGA)内のメモリー領域です。データファイルから読み取られるデータ・ブロックのコピーが格納されます。バッファとは、現在使用されているデータ・ブロックまたは最近使用されたデータ・ブロックがバッファ・マネージャによって一時的にキャッシュされるメイン・メモリーのアドレスのことです。データベース・インスタンスに同時接続されたユーザーはすべて、バッファ・キャッシュへのアクセスを共有します。バッファ・キャッシュの目的は、物理的なI/Oの最適化、頻繁にアクセスされるブロックのバッファ・キャッシュでの保持、オプションのOracle Persistent Memory Filestore (PMEM Filestore)のデータファイルを指すバッファ・ヘッダーの管理です。
Oracle Databaseクライアント・プロセスで初めて特定のデータが必要になった場合は、そのデータがデータベース・バッファ・キャッシュ内で検索されます。すでにキャッシュ内にあるデータが見つかった場合(キャッシュ・ヒット)、メモリーからそのデータを直接読み込みます。キャッシュ内でデータが検出されなかった場合(キャッシュ・ミス)は、データにアクセスする前に、ディスク上のデータファイルからキャッシュ内のバッファにデータ・ブロックがコピーされます。キャッシュ・ヒットでのデータ・アクセスは、キャッシュ・ミスでのデータ・アクセスより高速です。
キャッシュ内のバッファは、最低使用頻度(LRU)リストとタッチ・カウントを組み合せた複合アルゴリズムによって管理されます。LRUは、最近使用されたブロックがメモリーに残るようにし、ディスク・アクセスを最小限に抑えるのに役立ちます。
データベース・バッファ・キャッシュは、次の領域で構成されます。
- デフォルト・プールは、ブロックが通常キャッシュされる場所です。デフォルトのブロック・サイズは8KBです。手動で個別にプールを構成しない場合は、DEFAULTプールが唯一のバッファ・プールとなります。他のプールのオプション構成によって、デフォルト・プールは影響を受けません。
- (オプション)保存プールは、領域不足のため、頻繁にアクセスされることが予想され、デフォルト・プールからエージ・アウトされるブロックです。KEEPバッファ・プールの目的は、メモリー内に指定のオブジェクトを保持して、I/O操作を避けることです。表は保存プールに割り当てられます。デフォルト・プールから保存プールに自動的に移動しません。
- (オプション)リサイクル・プールは、頻繁に使用されないブロック用です。RECYCLEプールによって、キャッシュ内の領域が不要なオブジェクトによって消費されることを防止できます。
- (オプション)非デフォルトのバッファ・プールは、2 KB、4 KB、16 KB、32 KBの非標準ブロック・サイズを使用する表領域用です。非デフォルトのブロック・サイズには、それぞれ独自のプールがあります。Oracle Databaseでは、これらのプールのブロックもDEFAULTプールと同様に管理されます。
- (オプション)データベース・スマート・フラッシュ・キャッシュ(フラッシュ・キャッシュ)は、フラッシュ・デバイスを使用して、メイン・メモリーを追加せずにバッファ・キャッシュの有効サイズを増加できます。フラッシュ・キャッシュでは、磁気ディスクからデータを読み取るのではなく、データベース・キャッシュの頻繁にアクセスされるデータをフラッシュ・メモリーに格納することで、データベースのパフォーマンスが向上します。データベースがデータをリクエストすると、最初にデータベース・バッファ・キャッシュが検索されます。データが見つからない場合は、データベース・スマート・フラッシュ・キャッシュ・バッファが検索されます。依然としてデータが見つからない場合のみ、ディスク記憶域が検索されます。フラッシュ・キャッシュは、Oracle Real Application Clusters (RAC)環境のすべてのインスタンスに構成するか、どのインスタンスにも構成しないようにする必要があります。
- 最低使用頻度(LRU)リストには、使用済バッファと使用されていないバッファへのポインタが格納されます。LRUリストにはホット・エンドとコールド・エンドがあります。コールド・バッファは、最近使用されていないバッファです。ホット・バッファは、頻繁にアクセスされ、最近使用されたバッファです。概念的にはLRUは1つのみですが、データベースでは実際にはデータ同時実行性のために複数のLRUが使用されています。
- チェックポイント・キューは、REDOブロック・アドレス(RBA)の順序に基づいて変更された順序における使用済バッファのリストです。
- (オプション)データベース・スマート・フラッシュ・キャッシュを有効にすると、フラッシュ・バッファ領域はDEFAULTフラッシュLRUチェーンとKEEPフラッシュLRUチェーンで構成されます。データベース・スマート・フラッシュ・キャッシュを使用していない場合は、プロセスがブロックにアクセスしようとしたときに、そのブロックがバッファ・キャッシュに存在しないと、ディスクからメモリーにブロックが初めて読み込まれます(物理読取り)。インメモリー・バッファ・キャッシュがいっぱいになると、バッファはLRUメカニズムに基づいてメモリーから削除されます。データベース・スマート・フラッシュ・キャッシュを使用する場合、クリーンなインメモリー・バッファがエージ・アウトされると、データベース・ライター・プロセス(DBWn)はコンテンツをバックグラウンドでフラッシュ・キャッシュに書き込み、バッファ・ヘッダーは
FLASH_CACHE
オブジェクト属性の値に応じて、DEFAULTまたはKEEPフラッシュLRUリストのメタデータとしてメモリーに残ります。KEEPフラッシュLRUリストは、通常のバッファ・ヘッダーが置換されないように、バッファ・ヘッダーを個別のリストで保持します。つまり、KEEP
として指定されたオブジェクトに属するフラッシュ・バッファ・ヘッダーは、フラッシュ・キャッシュに長くとどまる傾向があります。FLASH_CACHE
オブジェクト属性がNONE
に設定されている場合は、対応するバッファがフラッシュ・キャッシュまたはメモリーに保持されません。メモリーからすでに削除されたバッファに再度アクセスすると、フラッシュ・キャッシュがチェックされます。バッファが見つかった場合はフラッシュ・キャッシュからバッファを読み取り、ディスクから読み取るよりも短い時間で取得できます。RAC全体のフラッシュ・キャッシュ・バッファの一貫性は、Oracle RAC Cache Fusionと同じ方法で維持されます。フラッシュ・キャッシュは拡張キャッシュであり、ダイレクト・パスI/Oではバッファ・キャッシュが完全にバイパスされるため、この機能ではダイレクト・パスI/Oはサポートされません。フラッシュ・キャッシュへの書込みではチェックポイントがカウントされず、チェックポイントを処理するためにバッファをメモリーに読み込む必要がある場合があるため、使用済バッファはフラッシュ・キャッシュには格納されません。 - (オプション) PMEM Filestoreを有効にして、データファイルをPMEM Filestoreに移行すると、データベース・ファイルは直接読取り専用アクセス用にマップされます。問合せでは、従来のバッファ・キャッシュ・メカニズムをバイパスでき、不要なI/Oを回避できます。この場合、バッファ・ヘッダーにはPMEMブロックに対応するメタデータを格納する必要があります。データベースは、変更、読取りの一貫性、およびホット・データ・ブロックへの高速アクセスのために、従来の(DRAM)バッファ・キャッシュを引き続き使用できます。