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による マルチブロックリードの優位性が上がります。
カスタム検索

★ORACLE案件承ります
▼ORACLE掲示板