Sample report, generated by WaitScope from a synthetic trace. Back to the WaitScope page

WaitScope

exemplo-10046.trc

Analyzed on 2026-10-29 10:19:55 · 1.8 KiB · 36 lines · up to 10 statements per list

Total time
0.007 s
7.0 ms
Period
2024-01-02 09:59:59
to 10:00:00
Database calls
6
4 at depth 0
Waits
4
0.005 s between calls
Distinct statements
2
1 commits · 0 rollbacks

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.

medium The session spent most of its time waiting for the application 71.3% of total time

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

medium Statement #1: plan operation 1 accounts for 98.0% of the time 24.6% of total time

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.

ComponentDuration (s)% of totalchartOccurrencesAvg (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
Total0.007010100.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.

ClassDuration (s)% of totalchartOccurrencesTop 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 totalchartSQL IDText
10.005000100.07zq3k1c9m2x4pselect * from t where id=***
db file sequential read wait0.001 s · 18.5% of total time · 2 statements
#Time (s)% of totalchartSQL IDText
10.00100076.97zq3k1c9m2x4pselect * from t where id=***
20.00030023.10w5n8r2t6v1ybselect obj# from obj$ where x=***
CPU: FETCH dbcalls cpu0.000 s · 2.8% of total time · 2 statements
#Time (s)% of totalchartSQL IDText
10.00015579.57zq3k1c9m2x4pselect * from t where id=***
20.00004020.50w5n8r2t6v1ybselect obj# from obj$ where x=***
unaccounted-for time within calls unaccounted-for0.000 s · 2.3% of total time · 2 statements
#Time (s)% of totalchartSQL IDText
10.00011672.07zq3k1c9m2x4pselect * from t where id=***
20.00004528.00w5n8r2t6v1ybselect obj# from obj$ where x=***
CPU: PARSE dbcalls cpu0.000 s · 0.7% of total time · 1 statement
#Time (s)% of totalchartSQL IDText
10.000050100.07zq3k1c9m2x4pselect * from t where id=***
CPU: EXEC dbcalls cpu0.000 s · 0.2% of total time · 2 statements
#Time (s)% of totalchartSQL IDText
10.00001066.77zq3k1c9m2x4pselect * from t where id=***
20.00000533.30w5n8r2t6v1ybselect obj# from obj$ where x=***
SQL*Net message to client wait0.000 s · 0.0% of total time · 1 statement
#Time (s)% of totalchartSQL IDText
10.000002100.07zq3k1c9m2x4pselect * from t where id=***
CPU: CLOSE dbcalls cpu0.000 s · 0.0% of total time · 1 statement
#Time (s)% of totalchartSQL IDText
10.000001100.07zq3k1c9m2x4pselect * from t where id=***

By wait class

Idle0.005 s · 71.3% of total time · 1 statement
#Time (s)% of totalchartSQL IDText
10.005000100.07zq3k1c9m2x4pselect * from t where id=***
User I/O0.001 s · 18.5% of total time · 2 statements
#Time (s)% of totalchartSQL IDText
10.00100076.97zq3k1c9m2x4pselect * from t where id=***
20.00030023.10w5n8r2t6v1ybselect obj# from obj$ where x=***
Unaccounted-for0.000 s · 6.4% of total time · 2 statements
#Time (s)% of totalchartSQL IDText
10.00011626.07zq3k1c9m2x4pselect * from t where id=***
20.00004510.10w5n8r2t6v1ybselect obj# from obj$ where x=***
CPU0.000 s · 3.7% of total time · 2 statements
#Time (s)% of totalchartSQL IDText
10.00021682.87zq3k1c9m2x4pselect * from t where id=***
20.00004517.20w5n8r2t6v1ybselect obj# from obj$ where x=***
Network0.000 s · 0.0% of total time · 1 statement
#Time (s)% of totalchartSQL IDText
10.000002100.07zq3k1c9m2x4pselect * 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 totalInclusive (s)TypeDepthExecFetchRowsLIOPIOSQL IDText
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

CallCountCPU (s)Duration (s)Disk (PIO)Consistent (CR)Current (CU)RowsMisses
FETCH20.0000.002213020
PARSE10.0000.00000001
EXEC20.0000.00000000
CLOSE10.0000.00000000

Longest depth-0 calls

CallDuration (s)CPU (s)Start (+s)LineLIOPIORowsStatement
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 bucketOccurrences% occ.Duration (s)% duration
0 ≤ e < 1 µs00.00.0000000.0
1 µs ≤ e < 10 µs00.00.0000000.0
10 µs ≤ e < 100 µs00.00.0000000.0
100 µs ≤ e < 1 ms00.00.0000000.0
1 ms ≤ e < 10 ms1100.00.005000100.0
10 ms ≤ e < 100 ms00.00.0000000.0
100 ms ≤ e < 1 s00.00.0000000.0
1 s ≤ e < 10 s00.00.0000000.0
10 s ≤ e < 100 s00.00.0000000.0
100 s ≤ e < 1.000 s00.00.0000000.0
1.000 s ≤ e < ∞00.00.0000000.0
db file sequential read2 occurrences · 0.001 s
Duration bucketOccurrences% occ.Duration (s)% duration
0 ≤ e < 1 µs00.00.0000000.0
1 µs ≤ e < 10 µs00.00.0000000.0
10 µs ≤ e < 100 µs00.00.0000000.0
100 µs ≤ e < 1 ms150.00.00030023.1
1 ms ≤ e < 10 ms150.00.00100076.9
10 ms ≤ e < 100 ms00.00.0000000.0
100 ms ≤ e < 1 s00.00.0000000.0
1 s ≤ e < 10 s00.00.0000000.0
10 s ≤ e < 100 s00.00.0000000.0
100 s ≤ e < 1.000 s00.00.0000000.0
1.000 s ≤ e < ∞00.00.0000000.0
SQL*Net message to client1 occurrences · 0.000 s
Duration bucketOccurrences% occ.Duration (s)% duration
0 ≤ e < 1 µs00.00.0000000.0
1 µs ≤ e < 10 µs1100.00.000002100.0
10 µs ≤ e < 100 µs00.00.0000000.0
100 µs ≤ e < 1 ms00.00.0000000.0
1 ms ≤ e < 10 ms00.00.0000000.0
10 ms ≤ e < 100 ms00.00.0000000.0
100 ms ≤ e < 1 s00.00.0000000.0
1 s ≤ e < 10 s00.00.0000000.0
10 s ≤ e < 100 s00.00.0000000.0
100 s ≤ e < 1.000 s00.00.0000000.0
1.000 s ≤ e < ∞00.00.0000000.0
FETCH (call duration e)2 occurrences · 0.002 s
Duration bucketOccurrences% occ.Duration (s)% duration
0 ≤ e < 1 µs00.00.0000000.0
1 µs ≤ e < 10 µs00.00.0000000.0
10 µs ≤ e < 100 µs00.00.0000000.0
100 µs ≤ e < 1 ms150.00.00038019.2
1 ms ≤ e < 10 ms150.00.00160080.8
10 ms ≤ e < 100 ms00.00.0000000.0
100 ms ≤ e < 1 s00.00.0000000.0
1 s ≤ e < 10 s00.00.0000000.0
10 s ≤ e < 100 s00.00.0000000.0
100 s ≤ e < 1.000 s00.00.0000000.0
1.000 s ≤ e < ∞00.00.0000000.0
PARSE (call duration e)1 occurrences · 0.000 s
Duration bucketOccurrences% occ.Duration (s)% duration
0 ≤ e < 1 µs00.00.0000000.0
1 µs ≤ e < 10 µs00.00.0000000.0
10 µs ≤ e < 100 µs00.00.0000000.0
100 µs ≤ e < 1 ms1100.00.000100100.0
1 ms ≤ e < 10 ms00.00.0000000.0
10 ms ≤ e < 100 ms00.00.0000000.0
100 ms ≤ e < 1 s00.00.0000000.0
1 s ≤ e < 10 s00.00.0000000.0
10 s ≤ e < 100 s00.00.0000000.0
100 s ≤ e < 1.000 s00.00.0000000.0
1.000 s ≤ e < ∞00.00.0000000.0
EXEC (call duration e)2 occurrences · 0.000 s
Duration bucketOccurrences% occ.Duration (s)% duration
0 ≤ e < 1 µs00.00.0000000.0
1 µs ≤ e < 10 µs00.00.0000000.0
10 µs ≤ e < 100 µs2100.00.000030100.0
100 µs ≤ e < 1 ms00.00.0000000.0
1 ms ≤ e < 10 ms00.00.0000000.0
10 ms ≤ e < 100 ms00.00.0000000.0
100 ms ≤ e < 1 s00.00.0000000.0
1 s ≤ e < 10 s00.00.0000000.0
10 s ≤ e < 100 s00.00.0000000.0
100 s ≤ e < 1.000 s00.00.0000000.0
1.000 s ≤ e < ∞00.00.0000000.0
CLOSE (call duration e)1 occurrences · 0.000 s
Duration bucketOccurrences% occ.Duration (s)% duration
0 ≤ e < 1 µs00.00.0000000.0
1 µs ≤ e < 10 µs1100.00.000002100.0
10 µs ≤ e < 100 µs00.00.0000000.0
100 µs ≤ e < 1 ms00.00.0000000.0
1 ms ≤ e < 10 ms00.00.0000000.0
10 ms ≤ e < 100 ms00.00.0000000.0
100 ms ≤ e < 1 s00.00.0000000.0
1 s ≤ e < 10 s00.00.0000000.0
10 s ≤ e < 100 s00.00.0000000.0
100 s ≤ e < 1.000 s00.00.0000000.0
1.000 s ≤ e < ∞00.00.0000000.0

Reads

reads (disk buckets)2 occurrences · 0.001 s
Duration bucketOccurrences% occ.Duration (s)% duration
0 ≤ e < 5 ms2100.00.001300100.0
5 ms ≤ e < 10 ms00.00.0000000.0
10 ms ≤ e < 15 ms00.00.0000000.0
15 ms ≤ e < 20 ms00.00.0000000.0
20 ms ≤ e < 25 ms00.00.0000000.0
25 ms ≤ e < 50 ms00.00.0000000.0
50 ms ≤ e < 100 ms00.00.0000000.0
100 ms ≤ e < 1 s00.00.0000000.0
1 s ≤ e < ∞00.00.0000000.0
reads (SSD buckets)2 occurrences · 0.001 s
Duration bucketOccurrences% occ.Duration (s)% duration
0 ≤ e < 15 µs00.00.0000000.0
15 µs ≤ e < 25 µs00.00.0000000.0
25 µs ≤ e < 50 µs00.00.0000000.0
50 µs ≤ e < 100 µs00.00.0000000.0
100 µs ≤ e < 500 µs150.00.00030023.1
500 µs ≤ e < 1 ms00.00.0000000.0
1 ms ≤ e < 10 ms150.00.00100076.9
10 ms ≤ e < ∞00.00.0000000.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.

EventDistinct blocks1st read1st read (s)RereadsRereads (s)
db file sequential read110.00010.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#NameWait (s)OccurrencesTop events
50T0.0012db 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

WaitScope 1.7.0 · analyzed on the server · report exported on 2026-10-29 10:19:58