無理矢理引っ張った感じですが、db file scattered read と db file parallel read と db file sequential readの最終回。
今日は、db file parallel read に注目してみようと思います。
db file parallel readはどのような待機イベントだったか再確認しておきましょう!
マニュアルでは以下のように説明されています。
db file parallel read
リカバリ時のイベントです。
バッファ・プリフェッチ中に、最適化(複数のシングル・ブロック読取りの実行ではない)として発生する可能性もあります。
リカバリ時に変更が必要となったデータベース・ブロックはデータベースからパラレルに読み込まれます。
すべてのI/Oが完了するまでの時間が待機時間となる
少々わかりずらいですが、「バッファ・プリフェッチ中に、最適化(複数のシングル・ブロック読取りの実行ではない)として発生する可能性もあります。」ってところがポイントですよね。(リカバリしているわけではないので!)
でてきましたね、 prefetch という単語が!
斜め読みしちゃうと?となりそうですが、「複数のシングル・ブロック読取りの実行ではない」という箇所からもシングル・ブロック読み取りの繰り返しではなく、一括読み込み的なI/O最適化に関連した動き、だろうな〜ということは想像できます.
(db file scattered read と db file parallel read と db file sequential read (その6)でも簡単に記載しているので参考に)
連続したブロックを一括読取りするのは、 db file scattered read 単一ブロックをブロック単位で読み取るのは、 db file sequential read そして、不連続な複数ブロックを一括読取りするのは、db file parallel read
|
不連続ってところもポイントですね! 連続してないんですよ!
そこで、db file scattered read と db file parallel read と db file sequential read (その1)に書いた赤字部分が鍵になってきます!
TABLE_NAME INDEX_NAME NUM_ROWS DISTINCT_KEYS CLUSTERING_FACTOR ------------------------------ ------------------------------ ---------- ------------- ----------------- HIGH_CLUSTERING_FACTOR PK_HIGH_CLUSTERING_FACTOR 100000 100000 99978 LOW_CLUSTERING_FACTOR PK_LOW_CLUSTERING_FACTOR 100000 100000 4348
|
CLUSTERING_FACTORってNUM_ROWSに近ければ近いほど、索引のキー順に行を読んでしまうと読んだ行数ど同じ程度のデータブロックを読み込む必要があるということを示しています。
(マニュアルにも書いてますよね。Oracle® Databaseパフォーマンス・チューニング・ガイド11gリリース2 (11.2) - 11.2.3.1 ブロックのI/O(行ではなく)の想定)
マニュアル、読みました??
最近のコメント