If you see high db file sequential read waits, it usually means sessions are doing single-block physical reads (typically index lookups, nested loop joins, row-by-row access, or reading blocks that are not in the buffer cache).
The objective is:
- Identify which SQLs are generating the reads.
- Identify which users/sessions are running them.
- Verify whether the issue is SQL, indexing, buffer cache, or storage latency.
Step 1: Check Current Sessions Waiting on db file sequential read
This tells you:
- Who is waiting
- Which SQL_ID is involved
- Which file/block Oracle is reading
Step 2: Find SQLs Causing Most Physical Reads
Current cache:
Focus on:
High values indicate likely contributors.
Step 3: Identify Top Users Generating Physical Reads
Step 4: Check Historical SQLs from AWR
Top SQLs causing reads:
Get SQL text:
Step 5: Find SQLs Waiting on db file sequential read
Historical AWR:
Resolve user names:
Step 6: Current ASH Analysis
If licensed for Diagnostics Pack:
Top SQL causing waits appears at the top.
Step 7: Check Storage Latency
Sometimes the SQL is fine but storage is slow.
Guidelines:
Step 8: Check Which Objects Are Being Read
From ASH:
Object details:
This often identifies a hot table or index.
Step 9: Check Execution Plan
For the top SQL:
Look for:
These are the most common sources of db file sequential read.
Step 10: Determine the Root Cause
Case 1: High disk reads + poor index
Check missing indexes:
Symptoms:
- Millions of rows visited
- Many index lookups
Action:
- Create/modify index
- Review predicates
Case 2: High Reads per Execution
Example:
Action:
- Tune SQL
- Reduce rows accessed
Case 3: Good SQL but Slow Read Time
Check:
If:
Investigate:
- Storage
- ASM
- SAN
- Multipathing
- Exadata Cells
One Query I Use First as a DBA
Then:
This quickly identifies which SQL and which user are responsible for the majority of db file sequential read waits.
Stale Statistics
Poor Buffer Cache Hit Ratio
Hot Objects
Find objects frequently involved:
Slow Storage
Query:
Decide:
- Missing index → Create/tune index
- Bad plan → Gather stats / SQL tuning
- High reads per execution → SQL rewrite
- High latency → Storage team
- Frequent rereads → Increase cache