exemplo-10046.trc
Session and environment
- Database
- Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production · 19.3.0.0.0
- Instance
- ORCL1
- Server
- db-exemplo
- Session
- 10.20 · pid 4242
- Module
- app-exemplo
- Time unit
- microseconds
- File on server
- /u01/app/oracle/diag/rdbms/orcl/ORCL1/trace/ORCL1_ora_4242.trc
Diagnosis
Patterns that often explain what the trace shows, in order of severity. They are leads for the analysis, not conclusions.
The database sat idle waiting for the client's next request. SQL tuning does not reduce this time: look at the application, the network and the number of round trips (calls per unit of work). View in profile
Operation TABLE ACCESS BY INDEX ROWID T. Visits the table row by row from the index: unselective index or missing the columns the filter uses. Also significant: operation 2, INDEX UNIQUE SCAN T_PK (20.0% of logical reads). The operations are highlighted in the plan, in the statement detail. View in the plan of statement #1
Response time profile
Each row is a share of the total time; added up, they make 100%. Click a component or class name to see what that time means, when it is normal, when it points to a problem and where to check in the report. Unaccounted-for time is what the trace does not explain by CPU or by waits: inside calls, it is usually CPU queueing or code without instrumentation; a negative value comes from the granularity of the CPU measurement.
| Component | Duration (s) | % of total | chart | Occurrences | Avg (s) | Min (s) | Max (s) |
|---|---|---|---|---|---|---|---|
| Idle | 0.005000 | 71.3 | 1 | 0.005000 | 0.005000 | 0.005000 | |
| User I/O | 0.001300 | 18.5 | 2 | 0.000650 | 0.000300 | 0.001000 | |
| unaccounted-for | 0.000286 | 4.1 | |||||
| cpu | 0.000195 | 2.8 | 2 | 0.000097 | 0.000040 | 0.000155 | |
| unaccounted-for | 0.000161 | 2.3 | 6 | 0.000027 | |||
| cpu | 0.000050 | 0.7 | 1 | 0.000050 | 0.000050 | 0.000050 | |
| cpu | 0.000015 | 0.2 | 2 | 0.000008 | 0.000005 | 0.000010 | |
| Network | 0.000002 | 0.0 | 1 | 0.000002 | 0.000002 | 0.000002 | |
| cpu | 0.000001 | 0.0 | 1 | 0.000001 | 0.000001 | 0.000001 | |
| Total | 0.007010 | 100.0 | |||||
By wait class
The same components grouped by Oracle wait class (wait_class), with CPU and unaccounted-for time shown separately. The sum is also the total time.
| Class | Duration (s) | % of total | chart | Occurrences | Top components |
|---|---|---|---|---|---|
| 0.005000 | 71.3 | 1 | SQL*Net message from client | ||
| 0.001300 | 18.5 | 2 | db file sequential read | ||
| 0.000447 | 6.4 | unaccounted-for time between calls · unaccounted-for time within calls | |||
| 0.000261 | 3.7 | 6 | CPU: FETCH dbcalls · CPU: PARSE dbcalls · CPU: EXEC dbcalls · CPU: CLOSE dbcalls | ||
| 0.000002 | 0.0 | 1 | SQL*Net message to client |
Top statements by component and by class
How much each statement spent in each profile component and each wait class, based on the statement's exclusive profile (without the recursive SQL it triggers). Up to 10 statements per list: change it at the top of the page.
By profile component
SQL*Net message from client wait0.005 s · 71.3% of total time · 1 statement
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 1 | 0.005000 | 100.0 | 7zq3k1c9m2x4p | select * from t where id=*** |
db file sequential read wait0.001 s · 18.5% of total time · 2 statements
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 1 | 0.001000 | 76.9 | 7zq3k1c9m2x4p | select * from t where id=*** | |
| 2 | 0.000300 | 23.1 | 0w5n8r2t6v1yb | select obj# from obj$ where x=*** |
CPU: FETCH dbcalls cpu0.000 s · 2.8% of total time · 2 statements
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 1 | 0.000155 | 79.5 | 7zq3k1c9m2x4p | select * from t where id=*** | |
| 2 | 0.000040 | 20.5 | 0w5n8r2t6v1yb | select obj# from obj$ where x=*** |
unaccounted-for time within calls unaccounted-for0.000 s · 2.3% of total time · 2 statements
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 1 | 0.000116 | 72.0 | 7zq3k1c9m2x4p | select * from t where id=*** | |
| 2 | 0.000045 | 28.0 | 0w5n8r2t6v1yb | select obj# from obj$ where x=*** |
CPU: PARSE dbcalls cpu0.000 s · 0.7% of total time · 1 statement
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 1 | 0.000050 | 100.0 | 7zq3k1c9m2x4p | select * from t where id=*** |
CPU: EXEC dbcalls cpu0.000 s · 0.2% of total time · 2 statements
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 1 | 0.000010 | 66.7 | 7zq3k1c9m2x4p | select * from t where id=*** | |
| 2 | 0.000005 | 33.3 | 0w5n8r2t6v1yb | select obj# from obj$ where x=*** |
SQL*Net message to client wait0.000 s · 0.0% of total time · 1 statement
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 1 | 0.000002 | 100.0 | 7zq3k1c9m2x4p | select * from t where id=*** |
CPU: CLOSE dbcalls cpu0.000 s · 0.0% of total time · 1 statement
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 1 | 0.000001 | 100.0 | 7zq3k1c9m2x4p | select * from t where id=*** |
By wait class
Idle0.005 s · 71.3% of total time · 1 statement
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 1 | 0.005000 | 100.0 | 7zq3k1c9m2x4p | select * from t where id=*** |
User I/O0.001 s · 18.5% of total time · 2 statements
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 1 | 0.001000 | 76.9 | 7zq3k1c9m2x4p | select * from t where id=*** | |
| 2 | 0.000300 | 23.1 | 0w5n8r2t6v1yb | select obj# from obj$ where x=*** |
Unaccounted-for0.000 s · 6.4% of total time · 2 statements
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 1 | 0.000116 | 26.0 | 7zq3k1c9m2x4p | select * from t where id=*** | |
| 2 | 0.000045 | 10.1 | 0w5n8r2t6v1yb | select obj# from obj$ where x=*** |
CPU0.000 s · 3.7% of total time · 2 statements
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 1 | 0.000216 | 82.8 | 7zq3k1c9m2x4p | select * from t where id=*** | |
| 2 | 0.000045 | 17.2 | 0w5n8r2t6v1yb | select obj# from obj$ where x=*** |
Network0.000 s · 0.0% of total time · 1 statement
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 1 | 0.000002 | 100.0 | 7zq3k1c9m2x4p | select * from t where id=*** |
SQL statements by contribution
Contribution: duration of the statement's depth-0 calls plus the waits between calls on its cursor. Inclusive: sum of all the statement's calls, at any depth.
| # | Contribution (s) | % of total | Inclusive (s) | Type | Depth | Exec | Fetch | Rows | LIO | PIO | SQL ID | Text |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0.007 | 95.9 | 0.002 | SELECT | 0 | 1 | 1 | 1 | 10 | 1 | 7zq3k1c9m2x4p | select * from t where id=*** |
| 2 | 0.000 | 0.0 | 0.000 | SELECT | 1 | 1 | 1 | 1 | 3 | 1 | 0w5n8r2t6v1yb | select obj# from obj$ where x=*** |
Time not attributed to any statement: 0.000 s.
Call types
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| FETCH | 2 | 0.000 | 0.002 | 2 | 13 | 0 | 2 | 0 |
| PARSE | 1 | 0.000 | 0.000 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2 | 0.000 | 0.000 | 0 | 0 | 0 | 0 | 0 |
| CLOSE | 1 | 0.000 | 0.000 | 0 | 0 | 0 | 0 | 0 |
Longest depth-0 calls
| Call | Duration (s) | CPU (s) | Start (+s) | Line | LIO | PIO | Rows | Statement |
|---|---|---|---|---|---|---|---|---|
| FETCH | 0.001600 | 0.000200 | 0.000 | 31 | 10 | 1 | 1 | #1 select * from t where id=*** |
| PARSE | 0.000100 | 0.000050 | 0.000 | 17 | 0 | 0 | 0 | #1 select * from t where id=*** |
| EXEC | 0.000020 | 0.000010 | 0.000 | 18 | 0 | 0 | 0 | #1 select * from t where id=*** |
| CLOSE | 0.000002 | 0.000001 | 0.007 | 35 | 0 | 0 | 0 | #1 select * from t where id=*** |
Latency distribution
Buckets in powers of 10, by wait event and by call type. Shows whether the time comes from many fast occurrences or a few slow ones.
SQL*Net message from client1 occurrences · 0.005 s
| Duration bucket | Occurrences | % occ. | Duration (s) | % duration | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 µs ≤ e < 10 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 10 µs ≤ e < 100 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 µs ≤ e < 1 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 ms ≤ e < 10 ms | 1 | 100.0 | 0.005000 | 100.0 | |
| 10 ms ≤ e < 100 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 ms ≤ e < 1 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 s ≤ e < 10 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 10 s ≤ e < 100 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 s ≤ e < 1.000 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 1.000 s ≤ e < ∞ | 0 | 0.0 | 0.000000 | 0.0 |
db file sequential read2 occurrences · 0.001 s
| Duration bucket | Occurrences | % occ. | Duration (s) | % duration | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 µs ≤ e < 10 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 10 µs ≤ e < 100 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 µs ≤ e < 1 ms | 1 | 50.0 | 0.000300 | 23.1 | |
| 1 ms ≤ e < 10 ms | 1 | 50.0 | 0.001000 | 76.9 | |
| 10 ms ≤ e < 100 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 ms ≤ e < 1 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 s ≤ e < 10 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 10 s ≤ e < 100 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 s ≤ e < 1.000 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 1.000 s ≤ e < ∞ | 0 | 0.0 | 0.000000 | 0.0 |
SQL*Net message to client1 occurrences · 0.000 s
| Duration bucket | Occurrences | % occ. | Duration (s) | % duration | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 µs ≤ e < 10 µs | 1 | 100.0 | 0.000002 | 100.0 | |
| 10 µs ≤ e < 100 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 µs ≤ e < 1 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 ms ≤ e < 10 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 10 ms ≤ e < 100 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 ms ≤ e < 1 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 s ≤ e < 10 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 10 s ≤ e < 100 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 s ≤ e < 1.000 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 1.000 s ≤ e < ∞ | 0 | 0.0 | 0.000000 | 0.0 |
FETCH (call duration e)2 occurrences · 0.002 s
| Duration bucket | Occurrences | % occ. | Duration (s) | % duration | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 µs ≤ e < 10 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 10 µs ≤ e < 100 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 µs ≤ e < 1 ms | 1 | 50.0 | 0.000380 | 19.2 | |
| 1 ms ≤ e < 10 ms | 1 | 50.0 | 0.001600 | 80.8 | |
| 10 ms ≤ e < 100 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 ms ≤ e < 1 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 s ≤ e < 10 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 10 s ≤ e < 100 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 s ≤ e < 1.000 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 1.000 s ≤ e < ∞ | 0 | 0.0 | 0.000000 | 0.0 |
PARSE (call duration e)1 occurrences · 0.000 s
| Duration bucket | Occurrences | % occ. | Duration (s) | % duration | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 µs ≤ e < 10 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 10 µs ≤ e < 100 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 µs ≤ e < 1 ms | 1 | 100.0 | 0.000100 | 100.0 | |
| 1 ms ≤ e < 10 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 10 ms ≤ e < 100 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 ms ≤ e < 1 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 s ≤ e < 10 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 10 s ≤ e < 100 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 s ≤ e < 1.000 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 1.000 s ≤ e < ∞ | 0 | 0.0 | 0.000000 | 0.0 |
EXEC (call duration e)2 occurrences · 0.000 s
| Duration bucket | Occurrences | % occ. | Duration (s) | % duration | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 µs ≤ e < 10 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 10 µs ≤ e < 100 µs | 2 | 100.0 | 0.000030 | 100.0 | |
| 100 µs ≤ e < 1 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 ms ≤ e < 10 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 10 ms ≤ e < 100 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 ms ≤ e < 1 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 s ≤ e < 10 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 10 s ≤ e < 100 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 s ≤ e < 1.000 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 1.000 s ≤ e < ∞ | 0 | 0.0 | 0.000000 | 0.0 |
CLOSE (call duration e)1 occurrences · 0.000 s
| Duration bucket | Occurrences | % occ. | Duration (s) | % duration | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 µs ≤ e < 10 µs | 1 | 100.0 | 0.000002 | 100.0 | |
| 10 µs ≤ e < 100 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 µs ≤ e < 1 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 ms ≤ e < 10 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 10 ms ≤ e < 100 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 ms ≤ e < 1 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 s ≤ e < 10 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 10 s ≤ e < 100 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 s ≤ e < 1.000 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 1.000 s ≤ e < ∞ | 0 | 0.0 | 0.000000 | 0.0 |
Reads
reads (disk buckets)2 occurrences · 0.001 s
| Duration bucket | Occurrences | % occ. | Duration (s) | % duration | |
|---|---|---|---|---|---|
| 0 ≤ e < 5 ms | 2 | 100.0 | 0.001300 | 100.0 | |
| 5 ms ≤ e < 10 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 10 ms ≤ e < 15 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 15 ms ≤ e < 20 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 20 ms ≤ e < 25 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 25 ms ≤ e < 50 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 50 ms ≤ e < 100 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 ms ≤ e < 1 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 s ≤ e < ∞ | 0 | 0.0 | 0.000000 | 0.0 |
reads (SSD buckets)2 occurrences · 0.001 s
| Duration bucket | Occurrences | % occ. | Duration (s) | % duration | |
|---|---|---|---|---|---|
| 0 ≤ e < 15 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 15 µs ≤ e < 25 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 25 µs ≤ e < 50 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 50 µs ≤ e < 100 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 100 µs ≤ e < 500 µs | 1 | 50.0 | 0.000300 | 23.1 | |
| 500 µs ≤ e < 1 ms | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 ms ≤ e < 10 ms | 1 | 50.0 | 0.001000 | 76.9 | |
| 10 ms ≤ e < ∞ | 0 | 0.0 | 0.000000 | 0.0 |
First read and reread of the same block
Frequent rereads of the same block point to a small cache or repeated access to the same data.
| Event | Distinct blocks | 1st read | 1st read (s) | Rereads | Rereads (s) |
|---|---|---|---|---|---|
| db file sequential read | 1 | 1 | 0.000 | 1 | 0.001 |
Objects with the most wait time
By the obj# of the waits. The name comes from the STAT lines in the trace itself, when present.
| obj# | Name | Wait (s) | Occurrences | Top events |
|---|---|---|---|---|
| 50 | T | 0.001 | 2 | db file sequential read |
Waiting for the application
SQL*Net message from client
The session finished the previous call and is waiting for the application's next request. It is application, network and user time, not database time.
- Normal when
- It shows up between every call. Long, isolated waits are the user thinking or the application busy with something else.
- A concern when
- It dominates the total time with many short waits: the application talks to the database too much (one row per call, SQL inside a loop). With a few long waits, the delay is in the application, and SQL tuning will not fix it.
- Where to look
- How many round trips there were and how long each one lasts: Profile, this component's row: Occurrences and Avg (s) columns
- Many short waits or a few long ones: Latency distribution, this event's table
- FETCH calls that bring few rows each: Call types, FETCH row: Count and Rows
- Statements that waited the most for the application: Top statements by component, this event's group
Single-block read
db file sequential read
Reads one block from disk into the buffer cache: index access, table access by ROWID, undo or segment header.
- Normal when
- Index access to a few blocks, averaging 0.1 to 1 ms on SSD or flash and 5 to 10 ms on disk.
- A concern when
- Many reads: the plan reads too many blocks (unselective index, NESTED LOOPS with many rows). High average: slow or contended storage.
- Where to look
- How many reads and how long each one lasts: Profile, this component's row: Occurrences and Avg (s) columns
- Slow reads, or many fast reads: Latency distribution, this event's table
- Most-read objects: Objects with the most wait time
- Rereads of the same blocks: Reads, first read and reread of the same block
- Statements that read the most: Top statements by component, this event's group
- Plan operations that read too many blocks: statement detail, Execution plan: highlighted operations
Unaccounted-for time between calls
unaccounted-for time between calls
Time between the end of one level-0 call and the start of the next with no recorded wait. It is the difference between the total time and the sum of the calls and the waits between them.
- Normal when
- Small: fractions of a millisecond per call.
- A concern when
- It adds up a lot: the trace was turned on or off midway, the process was kept off the CPU (saturated server), the application took long without the client wait showing up, or a collection file is missing.
- Where to look
- Trace period and large time gaps: Summary, Period
- In a collection, whether all files arrived: Collection, files and sessions
- Calls separated by gaps: Longest depth-0 calls
CPU in FETCH calls
CPU: FETCH dbcalls
The session's CPU time fetching rows. High: too many logical reads (LIO), usually a plan that reads far more blocks than the rows returned call for.
- Normal when
- It is part of the database's normal work.
- A concern when
- It dominates the total time: start with the statements that use the most CPU and with their logical reads.
- Where to look
- CPU by call type: Call types
- Statements with the most logical reads: SQL statements, LIO and Rows columns
- Statements that used the most CPU in this call: Top statements by component, this call's group
- Plan operations with a high self LIO: statement detail, Execution plan: highlighted operations
Unaccounted-for time within calls
unaccounted-for time within calls
The part of the call's duration (e=) that is neither CPU (c=) nor a wait recorded inside it.
- Normal when
- Small. A negative value comes from the granularity of the CPU measurement, not from a problem.
- A concern when
- It adds up a lot: CPU queueing (more runnable processes than cores), memory paging (swap) or code without wait instrumentation.
- Where to look
- Calls where time goes missing (duration well above CPU plus waits): Longest depth-0 calls
- Statements that carry the most of this time: Top statements by component, this event's group
- Server CPU load and free memory over the period, outside the report
CPU in PARSE calls
CPU: PARSE dbcalls
The session's CPU time parsing the SQL. High: hard parses from SQL without binds, or repeated parsing of the same cursor (opened and closed on every execution).
- Normal when
- It is part of the database's normal work.
- A concern when
- It dominates the total time: start with the statements that use the most CPU and with their logical reads.
- Where to look
- Hard parses: Call types, PARSE row: Count and Misses
- Statements that differ only in literals: Shareable texts
- A PARSE for every EXEC: statement detail, Calls: PARSE against EXEC
- Statements that used the most CPU in this call: Top statements by component, this call's group
CPU in EXEC calls
CPU: EXEC dbcalls
The session's CPU time executing: DML, cursor opening and the body of PL/SQL blocks. High in PL/SQL: heavy logic or SQL inside a loop.
- Normal when
- It is part of the database's normal work.
- A concern when
- It dominates the total time: start with the statements that use the most CPU and with their logical reads.
- Where to look
- CPU by call type: Call types
- Statements with the most logical reads: SQL statements, LIO and Rows columns
- Statements that used the most CPU in this call: Top statements by component, this call's group
- Child statements of the PL/SQL blocks: statement detail, Recursive SQL
Sending the response
SQL*Net message to client
Time to hand a response packet to the operating system. It does not measure the network to the client, only the handoff to the OS.
- Normal when
- Microseconds per occurrence, one per call.
- A concern when
- The average rises to milliseconds: the server's network buffer is full or the network is saturated.
- Where to look
- Average and maximum per wait: Profile, this component's row: Avg (s) and Max (s) columns
CPU in CLOSE calls
CPU: CLOSE dbcalls
The session's CPU time closing the cursor. Almost always small.
- Normal when
- It is part of the database's normal work.
- A concern when
- It dominates the total time: start with the statements that use the most CPU and with their logical reads.
- Where to look
- CPU by call type: Call types
- Statements with the most logical reads: SQL statements, LIO and Rows columns
- Statements that used the most CPU in this call: Top statements by component, this call's group
- Child statements of the PL/SQL blocks: statement detail, Recursive SQL
Idle
Idle
The session is waiting for work. In a session trace it is almost always SQL*Net message from client: application, network and user time.
- Normal when
- It shows up between calls.
- A concern when
- Dominates the total time and the user complains about slowness: the delay is outside the database (application, network, too many round trips).
- Where to look
- How many round trips there were: Summary, Database calls and Waits
- FETCH calls that bring few rows each: Call types, FETCH row: Count and Rows
- Statements that waited the most for the application: Top statements by class, this class's group
User I/O (data reads and writes)
User I/O
Data reads and writes done by the session itself.
- Normal when
- There is always some I/O, with a low average per read.
- A concern when
- Too many blocks (the plan reads more than it needs) or high average time per read (slow storage).
- Where to look
- Which I/O events weigh: By wait class, this class's row: Top components column
- Slow reads, or many fast reads: Latency distribution
- Most-read objects: Objects with the most wait time
- Statements that read the most: Top statements by class, this class's group
- Plan operations that read too many blocks: statement detail, Execution plan: highlighted operations
Unaccounted-for
Unaccounted-for
Time the trace does not explain by CPU or wait: within calls and between them.
- Normal when
- Small.
- A concern when
- CPU queue, paging, gaps in the trace or a file missing from the collection.
- Where to look
- The two unaccounted-for time components and the card of each one: Response time profile
CPU
CPU
CPU time of the database calls (the c= of PARSE, EXEC and FETCH).
- Normal when
- This is the database's work.
- A concern when
- It adds up a lot: too many logical reads (plan), too much parsing or heavy PL/SQL.
- Where to look
- CPU by call type: Call types
- Statements with the most logical reads: SQL statements, LIO and Rows columns
- Statements that used the most CPU: Top statements by class, this class's group
Network
Network
Sending and receiving data over SQL*Net, with the application or with another database over dblink.
- Normal when
- It adds up to little time.
- A concern when
- Large results, low arraysize or slow dblink.
- Where to look
- Which events of the class weigh (more data, dblink): By wait class, this class's row: Top components column
- Rows per FETCH: Call types, FETCH row: Count and Rows
- Statements that used the network the most: Top statements by class, this class's group
Recursive SQL (child statements)
Recursive SQL (child statements)
Time of the calls this statement triggered: SQL inside PL/SQL functions and procedures, triggers and dictionary queries.
- Normal when
- PL/SQL statement that runs other SQL.
- A concern when
- It adds up a lot in a plain SELECT or DML: a PL/SQL function called per row, or a heavy trigger.
- Where to look
- Which child statements and what each one costs: statement detail, Recursive SQL
#1 · SELECT
sql_id 7zq3k1c9m2x4phv 111Text
select * from t12 where id=***
- 1 T: plan operation 1
- 2 T, table of index T_PK: plan operation 2
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| wait | 0.005000 | 74.4 | 1 | |
| wait | 0.001000 | 14.9 | 1 | |
| recursive | 0.000390 | 5.8 | ||
| cpu | 0.000155 | 2.3 | 1 | |
| unaccounted-for | 0.000116 | 1.7 | 4 | |
| cpu | 0.000050 | 0.7 | 1 | |
| cpu | 0.000010 | 0.1 | 1 | |
| wait | 0.000002 | 0.0 | 1 | |
| cpu | 0.000001 | 0.0 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000050 | 0.000100 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.000010 | 0.000020 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0.000200 | 0.001600 | 1 | 10 | 0 | 1 | 0 |
| CLOSE | 1 | 0.000001 | 0.000002 | 0 | 0 | 0 | 0 | 0 |
Execution plan 10
From the STAT lines in the trace.
Where the plan spends time by each operation's own value, without that of the operations below it
- 1 Id 1 · TABLE ACCESS BY INDEX ROWID T 98.0% of time · 80.0% of logical reads
Visits the table row by row from the index: unselective index or missing the columns the filter uses. - 2 Id 2 · INDEX UNIQUE SCAN T_PK 2.0% of time · 20.0% of logical reads
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 0.001470 | 98.0 | 8 | 80.0 | 1 | 0 | 0.001500 | 10 | 2 | 50 | ||
| 2 | 2 | 1 | 1 | 0.000030 | 2.0 | 2 | 20.0 | 0 | 0 | 0.000030 | 2 | 1 | 51 |
Table access by index ROWID
TABLE ACCESS BY INDEX ROWID
Accesses the table one row at a time by the ROWIDs returned by the index scan right below.
- Good when
- Few rows, or rows stored close together in the table (low clustering factor).
- Bad when
- Many scattered rows (high clustering factor): almost one block read per row. Or a filter predicate applied only here that discards most of what the index returned: the index is missing that predicate's column.
- In the plan, check
- Rows of this operation compared with those of the index scan right below: if far fewer remain here, the filter is on the table, not in the index.
Unique key lookup
INDEX UNIQUE SCAN
Looks up a single key in a unique index (PK or UNIQUE): goes down from the root block through the branch blocks to the key's leaf block.
- Good when
- Almost always: it reads only the index height (BLEVEL + 1 blocks).
- Bad when
- As the inner of a NESTED LOOPS with millions of outer rows: cheap per execution, expensive in total.
- In the plan, check
- Exec: thousands of executions add up even with a low self LIO in each one.
Click an operation to see what it does, when it is good, when it is bad and which plan columns to check. Time (s) and CR are cumulative: they include the operations below each one (the input row sources); the self values discount those operations. Oracle measures time per operation by sampling, so it may not add up between an operation and the ones below it; logical reads are always counted. Rows/exec and Estimated in red: the optimizer missed the cardinality by 10 times or more.
Recursive SQL executed by this statement
| # | Duration (s) | Text |
|---|---|---|
| 2 | 0.000 | select obj# from obj$ where x=*** |
#2 · SELECT
sql_id 0w5n8r2t6v1ybhv 222Text
select obj# from obj$ where x=***
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| wait | 0.000300 | 76.9 | 1 | |
| unaccounted-for | 0.000045 | 11.5 | 2 | |
| cpu | 0.000040 | 10.3 | 1 | |
| cpu | 0.000005 | 1.3 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| EXEC | 1 | 0.000005 | 0.000010 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0.000040 | 0.000380 | 1 | 3 | 0 | 1 | 0 |
Object 50 · T
table- Wait (s)
- 0.001
- Occurrences
- 2
- Top events
- db file sequential read
Where it appears in the trace
- Statement #1, operation 1 TABLE ACCESS BY INDEX ROWID T
The ready-to-run database queries are on the object page, in the console.
Object 51 · T_PK
indexWhere it appears in the trace
- Statement #1, operation 2 INDEX UNIQUE SCAN T_PK
The ready-to-run database queries are on the object page, in the console.
WaitScope 1.7.0 · analyzed on the server · report exported on 2026-10-29 10:19:58