目次:
ビデオ: 【T3】SQL チューニングの基礎 高塚 遥 2024
Oracle 12cの データベース・バッファ・キャッシュ は、通常、SGAの最大部分です。それはディスク上のファイルから来るデータを持っています。ディスクからのデータへのアクセスはメモリーよりも遅いため、データベース・バッファー・キャッシュの唯一の目的は、メモリーにデータをキャッシュしてより高速にアクセスできるようにすることです。
データベースバッファキャッシュには、すべてのタイプのオブジェクトのデータを含めることができます。
-
テーブル
-
インデックス
<! -
システム・データ
データベース・バッファ・キャッシュの という用語では、 バッファ という用語はデータベース・ブロックを指します。 データベース・ブロック は、Oracleが読み書きする最小限の記憶領域です。データを含むすべてのストレージセグメントはブロックで構成されています。ディスクからデータを要求すると、最低でも1ブロックが読み込まれます。 1つの行だけを要求しても、同じ表の多くの行が検索される可能性があります。同じ行が1つの列を要求する場合も同じです。 Oracleはブロック全体を読み取ります。ブロック全体には多くの行があり、その行にはすべての列が読み込まれます。
<!あなたの部門表に10行しかない場合、1つの部門だけの名前を要求していても、全体をメモリに読み込むことができると考えるのは実現可能です。
Oracle 12cでのバッファ・キャッシュの状態バッファ・キャッシュ
は、使用可能な領域とブロックの状態(共有プールがどのSQLを保持するかを決定する方法と同様)に応じて、バッファキャッシュは、独自のバージョンのLRUアルゴリズムを使用します。
<!バッファ・キャッシュ内のブロックは、 Free: 現在使用されていない
Pinned:現在アクセス中 > Dirty:
-
ブロックは変更されていますが、まだディスクに書き込まれていません。 空きブロック
-
空きブロックは、必要なときには理想的です。しかし、あなたのデータベースが非常に小さく、全体がメモリに収まらない限り、おそらくそうではありません。 LRUアルゴリズムは、バッファプール内で共有プールとは少し異なります。各ブロックにスコアを付け、それがアクセスされてからの経過時間を計算します。たとえば、ブロックはタッチされるたびにポイントを取得します。
-
ポイントが高いほど、ブロックがメモリからフラッシュされる可能性が低くなります。しかし、それは頻繁にアクセスされなければならないか、スコアが減少する。メモリリソースの競争が高ければ、ブロックはメモリ内にとどまるために頑張らなければならない。 各ブロックにスコアと時間を与えることで、このような状況が発生するのを防ぐことができます。月の終わりにブロックにアクセスしてレポートを作成します。スコアはシステム内の他のどのブロックよりも高い。そのブロックは決して再びアクセスされません。
データベースが再起動されるか、別のブロックが最終的にそれを打ち負かすのに十分なポイントを獲得するまで、メモリを無駄にしてしまいます。あなたがもはやそれにアクセスしなくなった後、時間コンポーネントは非常に早くそれを老化させます。
固定ブロック
現在アクセス中のブロックは
固定ブロックである。
ブロックはバッファ・キャッシュにロック(または固定)されているため、Oracleプロセス(ユーザーを表すことが多い)がバッファ・キャッシュからアクセスできません。
ダーティブロック
変更されたブロックは、
ダーティブロックである。 データベースシャットダウン中に変更が確実に保持されるようにするには、これらのダーティブロックをバッファキャッシュからディスクに書き込む必要があります。データベースは、ダーティ・リストまたは書き込みキュー内のダーティ・ブロックに名前を付けます。 ブロックが変更されるたびに、データが失われないようにディスクに書き込む必要があると考えるかもしれません。これはそうではありません。たとえ
コミット
(変更を永久に保存する)であってもそうではありません!いくつかの構造がデータの消失を防ぐのに役立ちます さらに、Oracleにはギャンブルの問題があります。すべての変更に対してブロックをディスクに書き込むと、システムのパフォーマンスがクロールされます。これに対処するために、Oracleはデータベースが失敗する可能性が低く、ブロックをディスクに大きなグループでのみ書き込むという蓋然性を示しています。 心配しないでください。それは失われたデータに対するリスクでもありません。 Oracleはデータベースのパフォーマンスを今すぐ
から取り戻す可能性があります 。 適切に管理されたシステムでの障害はほとんど発生しないため、パフォーマンスを得るには安価な方法です。しかし、Oracleがそれ自身の後で浄化せずに汚れたブロックを全部残すようなものではありません。
Oracle 12cでの書き込みトリガーのブロック
ブロック書き込み、したがってダーティブロックをトリガーする要因は何ですか? データベースにシャットダウンコマンドが発行されました。 完全または部分的なチェックポイントが発生します。つまり、システムがすべてのダーティバッファを定期的にディスクにダンプします。 あなたによって設定された復旧時間しきい値が満たされています。汚れたブロックの総数が許容できない復旧時間を引き起こします。空きブロックが必要であり、所与の検索量の後に空きブロックが見つからない。 特定のデータ定義言語(DDL)コマンド。 (DDLコマンドは、データベース内のオブジェクトを定義するSQL文です。)
3秒ごと。
その他の理由。アルゴリズムは複雑で、各ソフトウェアリリースで発生するすべての変更を確実に把握することはできません。
-
実際には、データベースの変更が多い環境では、データベースの書き込みが非常に忙しいです。