db file sequential readとは
db file sequential readはキャッシュ上に内などの理由でDISKから1ブロック分バッファキャッシュに読み込んだ場合に発生する待機イベントです。 db file sequential readが発生するのは主に索引スキャン(インデックスファストフルスキャン除く)、テーブルのrowidスキャン等ですが、 テーブルフルスキャンの実行計画であったとしてもキャッシュの状態等によってはdb file sequential readも発生する場合があります。待機イベントパラメータ
p1・・・file#。ファイル番号。v$datafileのfile#に対応。p2・・・block#。読み込み開始位置のブロック番号。
p3・・・blocks。読み込みブロック数(常に1)。
file#とblock#から対象セグメントと参照ブロックのデータを以下のSQLより確認することができます。
file#=13、block#=654732であった場合の例
select owner, segment_name, segment_type, tablespace_name from dba_extents where file_id = 13 and 654732 between block_id and block_id + blocks - 1; OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME ---------------------------- ---------------------------- ---------------------------- ---------------------------- TEST B TABLE SSD1⇒TESTスキーマのBというテーブルを参照していたことがわかる
select * from B where dbms_rowid.ROWID_RELATIVE_FNO(rowid) = 13 and dbms_rowid.ROWID_BLOCK_NUMBER(rowid) = 654732;⇒この待機イベント中に読み込んでいたブロックに格納されていたデータが表示される
対策
1ブロックをDISKから読み込む場合に発生する待機イベントでどのようなシステムにおいても少なからず発生するイベントなので 待機時間が適切であるかどうかはこの待機イベントが多く発生しているSQLの実行計画が適切であるかどうかをまず確認する必要があります。不適切なケースの代表例としてはフルスキャンが最適であるSQLにも関わらず索引スキャンの実行計画が選択されているようなケースです。 db file sequential readは1ブロック単位でI/Oが発生するため読み込みブロックは多いほどdb file scattered readによる マルチブロックリードの優位性が上がります。