GAGA LIFE.

インフラエンジニアブログ

スポンサーリンク

Oracle データベース アーキテクチャ(データベース バッファキャッシュ)

f:id:undercovergeek:20200713204459p:plain

バッファキャッシュ

データベースバッファキャッシュは、バッファキャッシュとも呼ばれ、データファイルから読み取られたデータブロックのコピーを格納するシステムグローバル領域(SGA)のメモリ領域。
バッファは、データベースのブロックサイズのメモリのチャンク。各バッファには、データベースバッファアドレス(DBA)と呼ばれるアドレスがある。
データベースインスタンスに同時に接続されているすべてのユーザーは、バッファキャッシュへのアクセスを共有する。
バッファキャッシュの目的は、物理I/Oを最適化し、頻繁にアクセスされるブロックをバッファキャッシュに保持し、アクセス頻度の低いブロックをディスクに書き込むこと。

Oracle Databaseユーザー・プロセスが特定のデータを初めて必要とするとき、データベース・バッファ・キャッシュでデータを検索する。
プロセスがすでにキャッシュにあるデータを見つけた場合(キャッシュヒット)、メモリから直接データを読み取ることができる。
プロセスがキャッシュ内のデータを見つけられない場合(キャッシュミス)、データにアクセスする前に、ディスク上のデータファイルからキャッシュ内のバッファーにデータブロックをコピーする必要がある。
キャッシュヒットを介してデータにアクセスする方が、キャッシュミスを介してデータにアクセスするよりも高速。

キャッシュ内のバッファーは、最長時間未使用(LRU)リストとタッチカウントの組み合わせを使用する複雑なアルゴリズムによって管理される。
LRUは、最近使用されたブロックがディスクアクセスを最小限に抑えるためにメモリにとどまる傾向があることを保証するのに役立つ。

データベースバッファキャッシュは、次のもので構成されています。

  • Defaultプール:ブロックが通常キャッシュされる場所。デフォルトのブロックサイズは 8KBです。個別のプールを手動で構成しない限り、デフォルトのプールが唯一のバッファープールとなる。他のプールのオプションの構成は、デフォルトのプールには影響しない。

  • KEEPプール:頻繁にアクセスされたが、スペース不足のためにデフォルトのプールから古くなったブロックを対象としている。キープバッファプールの目的は、指定されたオブジェクトをメモリに保持することで、I/O操作を回避すること。

  • Recycleプール:使用頻度の低いブロックを対象とする。リサイクルプールは、指定されたオブジェクトがキャッシュ内の不要なスペースを消費するのを防ぐ。

  • デフォルト以外のバッファー・プール:2KB/4KB/16KB/32KBの非標準ブロック・サイズを使用するテーブルスペース用。デフォルト以外の各ブロックサイズには、独自のプールがある。 Oracle Databaseは、これらのプールのブロックをデフォルトのプールと同じ方法で管理する。

  • データベーススマートフラッシュキャッシュ(フラッシュキャッシュ):フラッシュデバイスを使用して、メインメモリを追加せずにバッファーキャッシュの有効サイズを増やすことができる。フラッシュキャッシュは、磁気ディスクからデータを読み取る代わりに、データベースキャッシュの頻繁にアクセスされるデータをフラッシュメモリに格納することで、データベースのパフォーマンスを向上させることができる。データベースがデータを要求すると、システムは最初にデータベースバッファキャッシュを調べる。データが見つからない場合、システムはDatabase Smart Flash Cacheバッファを調べる。 そこでデータが見つからない場合にのみ、ディスクストレージを調べる。 Oracle Real Application Clusters環境では、すべてのインスタンスでフラッシュ・キャッシュを構成するか、インスタンスでフラッシュ・キャッシュを構成しないようにするべき。

  • Least Recently Used list (LRU): ダーティおよびダーティでないバッファへのポインタが含まれている。LRUリストには、ホットエンドとコールドエンドがある。コールドバッファは、最近使用されていないバッファ。 ホットバッファは頻繁にアクセスされ、最近使用されている。 概念的には、LRUは1つだけだが、データの並行性のために、データベースは実際には複数のLRUを使用する。

  • Checkpoint queue

  • フラッシュバッファ領域:DEFAULTフラッシュLRUチェーンとKEEPフラッシュLRUチェーンで構成される。Database Smart Flash Cacheがない場合、プロセスがブロックにアクセスしようとして、そのブロックがバッファーキャッシュに存在しない場合、最初にブロックがディスクからメモリに読み込まれる(物理読み込み)。 インメモリバッファキャッシュがいっぱいになると、バッファは、最長時間未使用(LRU)メカニズムに基づいてメモリから追い出されます。 データベーススマートフラッシュキャッシュを使用すると、クリーンなインメモリバッファーが期限切れになった場合に、バッファーの内容がデータベースライタープロセス(DBWn)によってバックグラウンドでフラッシュキャッシュに書き込まれ、バッファーヘッダーはいずれかのメタデータとしてメモリに保持される。FLASH_CACHEオブジェクト属性の値に応じて、DEFAULTフラッシュまたはKEEPフラッシュLRUリスト。 KEEPフラッシュLRUリストは、バッファーヘッダーを別のリストに保持して、通常のバッファーヘッダーがそれらを置き換えないようにするために使用される。したがって、KEEPとして指定されたオブジェクトに属するフラッシュバッファヘッダーは、フラッシュキャッシュに長く留まる傾向がある。FLASH_CACHEオブジェクト属性がNONEに設定されている場合、システムは対応するバッファをフラッシュキャッシュまたはメモリに保持しない。すでにメモリ不足になっているバッファに再度アクセスすると、システムはフラッシュキャッシュをチェックする。バッファーが見つかると、フラッシュキャッシュからバッファーを読み取る。これは、ディスクからの読み取り時間のほんの一部しかかからない。Real Application Clusters(RAC)全体のフラッシュキャッシュバッファーの一貫性は、キャッシュフュージョンと同じ方法で維持される。フラッシュキャッシュは拡張キャッシュであり、ダイレクトパスI/Oはバッファキャッシュを完全にバイパスするため、この機能はダイレクトパスI/Oをサポートしない。フラッシュキャッシュへの書き込みはチェックポイントにカウントされないため、バッファをチェックポイントするためにバッファをメモリに読み込む必要がある場合があるため、システムはダーティバッファをフラッシュキャッシュに配置しないことに注意する。

スポンサーリンク