caso-2.trc
Session and environment
- Database
- Oracle Database 11g Release 11.2.0.4.0 - 64bit Production
- Instance
- INST_01
- Server
- MAQ_01 · AIX · MAQ_02
- Session
- 128.85179 · pid 29352362
- Service
- SVC_01
- Module
- MOD_01
- Action
- Time unit
- microseconds
- File on server
- caso2.trc
Diagnosis
Patterns that often explain what the trace shows, in order of severity. They are leads for the analysis, not conclusions.
323,268 reads, totaling 35.6% of the total time. Before speeding up the disk, check whether the plan reads too many blocks (unselective index, row-by-row access). View latency distribution
Operation DELETE TAB_0049. Wrote 66,842 blocks to TEMP: the PGA workarea was not enough. Also significant: operation 2, INDEX RANGE SCAN IDX_0034 (82.2% of logical reads). The operations are highlighted in the plan, in the statement detail. View in the plan of statement #7
Recursive SQL executed once per row, typical of a PL/SQL loop. Set-based processing (a single SQL or FORALL) usually cuts the time a lot. View statement #1
Recursive SQL executed once per row, typical of a PL/SQL loop. Set-based processing (a single SQL or FORALL) usually cuts the time a lot. View statement #2
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) |
|---|---|---|---|---|---|---|---|
| User I/O | 365.865870 | 35.6 | 323,268 | 0.001132 | 0.000127 | 0.314918 | |
| cpu | 170.263521 | 16.5 | 102,658 | 0.001659 | 0.000002 | 104.205928 | |
| unaccounted-for | 149.483409 | 14.5 | 305,623 | 0.000489 | |||
| unaccounted-for | 87.677960 | 8.5 | |||||
| User I/O | 82.615851 | 8.0 | 5,357 | 0.015422 | 0.000560 | 0.335030 | |
| Idle | 74.696038 | 7.3 | 68 | 1.098471 | 0.001397 | 22.601830 | |
| User I/O | 60.291100 | 5.9 | 8,825 | 0.006832 | 0.000008 | 0.091651 | |
| cpu | 17.535369 | 1.7 | 99,915 | 0.000176 | 0.000000 | 15.886799 | |
| User I/O | 12.718013 | 1.2 | 1,019 | 0.012481 | 0.002717 | 0.073023 | |
| User I/O | 7.638662 | 0.7 | 2,950 | 0.002589 | 0.000007 | 0.102338 | |
| cpu | 0.110972 | 0.0 | 394 | 0.000282 | 0.000002 | 0.019293 | |
| cpu | 0.054101 | 0.0 | 102,656 | 0.000001 | 0.000000 | 0.000028 | |
| Configuration | 0.052671 | 0.0 | 2 | 0.026336 | 0.021904 | 0.030767 | |
| Configuration | 0.033119 | 0.0 | 2 | 0.016560 | 0.008202 | 0.024917 | |
| Unclassified | 0.008608 | 0.0 | 1 | 0.008608 | 0.008608 | 0.008608 | |
| Application | 0.002383 | 0.0 | 3 | 0.000794 | 0.000141 | 0.001668 | |
| Unclassified | 0.001118 | 0.0 | 1 | 0.001118 | 0.001118 | 0.001118 | |
| User I/O | 0.000993 | 0.0 | 36 | 0.000028 | 0.000002 | 0.000065 | |
| Unclassified | 0.000409 | 0.0 | 6 | 0.000068 | 0.000000 | 0.000395 | |
| Other | 0.000356 | 0.0 | 2 | 0.000178 | 0.000176 | 0.000180 | |
| Network | 0.000159 | 0.0 | 68 | 0.000002 | 0.000000 | 0.000006 | |
| Total | 1,029.050682 | 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 |
|---|---|---|---|---|---|
| 529.130489 | 51.4 | 341,455 | db file sequential read · direct path read · direct path read temp · db file scattered read · direct path write temp | ||
| 237.161369 | 23.0 | unaccounted-for time within calls · unaccounted-for time between calls | |||
| 187.963963 | 18.3 | 305,623 | CPU: EXEC dbcalls · CPU: FETCH dbcalls · CPU: PARSE dbcalls · CPU: CLOSE dbcalls | ||
| 74.696038 | 7.3 | 68 | SQL*Net message from client | ||
| 0.085790 | 0.0 | 4 | log file switch completion · log file switch (private strand flush incomplete) | ||
| 0.010135 | 0.0 | 8 | CSS initialization · CSS operation: action · CSS operation: query | ||
| 0.002383 | 0.0 | 3 | enq: RO - fast object reuse | ||
| 0.000356 | 0.0 | 2 | reliable message | ||
| 0.000159 | 0.0 | 68 | 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
db file sequential read wait365.866 s · 35.6% of total time · 10 of 16 statements
6 more statements spent time here; raise the number at the top of the page to see them.
CPU: EXEC dbcalls cpu170.264 s · 16.5% of total time · 10 of 168 statements
158 more statements spent time here; raise the number at the top of the page to see them.
unaccounted-for time within calls unaccounted-for149.483 s · 14.5% of total time · 10 of 170 statements
160 more statements spent time here; raise the number at the top of the page to see them.
direct path read wait82.616 s · 8.0% of total time · 1 statement
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 5 | 82.615851 | 100.0 | d7sadnr6zu6k9 | WITH TAB_0082 AS (SELECT DISTINCT COL_0265.COL_0266 , COL_0265.COL_0032 , COL_0265.COL_0039 , COL_0265.COL_0267 , COL_0265.COL_0268 , COL_0265.COL_0269 , COL_02… |
direct path read temp wait60.291 s · 5.9% of total time · 2 statements
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 5 | 55.084930 | 91.4 | d7sadnr6zu6k9 | WITH TAB_0082 AS (SELECT DISTINCT COL_0265.COL_0266 , COL_0265.COL_0032 , COL_0265.COL_0039 , COL_0265.COL_0267 , COL_0265.COL_0268 , COL_0265.COL_0269 , COL_02… | |
| 7 | 5.206170 | 8.6 | c1bqf8upvjwpt | DELETE FROM TAB_0049 A WHERE A.COL_0086 = :B1 |
CPU: FETCH dbcalls cpu17.535 s · 1.7% of total time · 10 of 108 statements
98 more statements spent time here; raise the number at the top of the page to see them.
db file scattered read wait12.718 s · 1.2% of total time · 1 statement
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 5 | 12.718013 | 100.0 | d7sadnr6zu6k9 | WITH TAB_0082 AS (SELECT DISTINCT COL_0265.COL_0266 , COL_0265.COL_0032 , COL_0265.COL_0039 , COL_0265.COL_0267 , COL_0265.COL_0268 , COL_0265.COL_0269 , COL_02… |
direct path write temp wait7.639 s · 0.7% of total time · 3 statements
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 5 | 7.137210 | 93.4 | d7sadnr6zu6k9 | WITH TAB_0082 AS (SELECT DISTINCT COL_0265.COL_0266 , COL_0265.COL_0032 , COL_0265.COL_0039 , COL_0265.COL_0267 , COL_0265.COL_0268 , COL_0265.COL_0269 , COL_02… | |
| 7 | 0.501037 | 6.6 | c1bqf8upvjwpt | DELETE FROM TAB_0049 A WHERE A.COL_0086 = :B1 | |
| 16 | 0.000415 | 0.0 | fdnsdx5rvuzbr | SELECT DISTINCT a.COL_0056, a.COL_0057 FROM TAB_0013 a, (select distinct COL_0032,COL_0039 from TAB_0014) b WHERE b.COL_0032 = a.COL_0032 and b.COL_0039 = nvl(t… |
CPU: PARSE dbcalls cpu0.111 s · 0.0% of total time · 10 of 169 statements
159 more statements spent time here; raise the number at the top of the page to see them.
CPU: CLOSE dbcalls cpu0.054 s · 0.0% of total time · 10 of 142 statements
132 more statements spent time here; raise the number at the top of the page to see them.
By wait class
User I/O529.130 s · 51.4% of total time · 10 of 17 statements
7 more statements spent time here; raise the number at the top of the page to see them.
Unaccounted-for237.161 s · 23.0% of total time · 10 of 170 statements
160 more statements spent time here; raise the number at the top of the page to see them.
CPU187.964 s · 18.3% of total time · 10 of 171 statements
161 more statements spent time here; raise the number at the top of the page to see them.
Configuration0.086 s · 0.0% of total time · 1 statement
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 7 | 0.085790 | 100.0 | c1bqf8upvjwpt | DELETE FROM TAB_0049 A WHERE A.COL_0086 = :B1 |
Unclassified0.010 s · 0.0% of total time · 1 statement
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 16 | 0.010135 | 100.0 | fdnsdx5rvuzbr | SELECT DISTINCT a.COL_0056, a.COL_0057 FROM TAB_0013 a, (select distinct COL_0032,COL_0039 from TAB_0014) b WHERE b.COL_0032 = a.COL_0032 and b.COL_0039 = nvl(t… |
Application0.002 s · 0.0% of total time · 1 statement
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 5 | 0.002383 | 100.0 | d7sadnr6zu6k9 | WITH TAB_0082 AS (SELECT DISTINCT COL_0265.COL_0266 , COL_0265.COL_0032 , COL_0265.COL_0039 , COL_0265.COL_0267 , COL_0265.COL_0268 , COL_0265.COL_0269 , COL_02… |
Other0.000 s · 0.0% of total time · 1 statement
| # | Time (s) | % of total | chart | SQL ID | Text |
|---|---|---|---|---|---|
| 5 | 0.000356 | 100.0 | d7sadnr6zu6k9 | WITH TAB_0082 AS (SELECT DISTINCT COL_0265.COL_0266 , COL_0265.COL_0032 , COL_0265.COL_0039 , COL_0265.COL_0267 , COL_0265.COL_0268 , COL_0265.COL_0269 , COL_02… |
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.
Showing 10 of 171 statements; raise the number at the top of the page to see more.
Time not attributed to any statement: 1,017.699 s.
Call types
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| EXEC | 102,658 | 171.056 | 813.576 | 3,425,412 | 7,301,505 | 13,488,833 | 3,008,856 | 76 |
| FETCH | 99,915 | 17.539 | 53.717 | 169,791 | 378,379 | 69 | 154,543 | 0 |
| PARSE | 394 | 0.126 | 0.219 | 0 | 160 | 1 | 0 | 162 |
| CLOSE | 102,656 | 0.054 | 0.106 | 0 | 0 | 0 | 0 | 0 |
Longest depth-0 calls
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.
db file sequential read323,268 occurrences · 365.866 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 | 271,109 | 83.9 | 99.937684 | 27.3 | |
| 1 ms ≤ e < 10 ms | 47,699 | 14.8 | 186.766571 | 51.0 | |
| 10 ms ≤ e < 100 ms | 4,450 | 1.4 | 77.582060 | 21.2 | |
| 100 ms ≤ e < 1 s | 10 | 0.0 | 1.579555 | 0.4 | |
| 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 |
direct path read5,357 occurrences · 82.616 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 | 6 | 0.1 | 0.004172 | 0.0 | |
| 1 ms ≤ e < 10 ms | 1,424 | 26.6 | 9.217950 | 11.2 | |
| 10 ms ≤ e < 100 ms | 3,915 | 73.1 | 71.696158 | 86.8 | |
| 100 ms ≤ e < 1 s | 12 | 0.2 | 1.697571 | 2.1 | |
| 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 from client68 occurrences · 74.696 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 | 49 | 72.1 | 0.132624 | 0.2 | |
| 10 ms ≤ e < 100 ms | 9 | 13.2 | 0.316103 | 0.4 | |
| 100 ms ≤ e < 1 s | 3 | 4.4 | 0.867162 | 1.2 | |
| 1 s ≤ e < 10 s | 4 | 5.9 | 11.713019 | 15.7 | |
| 10 s ≤ e < 100 s | 3 | 4.4 | 61.667130 | 82.6 | |
| 100 s ≤ e < 1.000 s | 0 | 0.0 | 0.000000 | 0.0 | |
| 1.000 s ≤ e < ∞ | 0 | 0.0 | 0.000000 | 0.0 |
direct path read temp8,825 occurrences · 60.291 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 | 0.0 | 0.000008 | 0.0 | |
| 10 µs ≤ e < 100 µs | 18 | 0.2 | 0.000907 | 0.0 | |
| 100 µs ≤ e < 1 ms | 1,174 | 13.3 | 0.773395 | 1.3 | |
| 1 ms ≤ e < 10 ms | 6,027 | 68.3 | 34.600284 | 57.4 | |
| 10 ms ≤ e < 100 ms | 1,605 | 18.2 | 24.916506 | 41.3 | |
| 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 scattered read1,019 occurrences · 12.718 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 | 304 | 29.8 | 2.321958 | 18.3 | |
| 10 ms ≤ e < 100 ms | 715 | 70.2 | 10.396055 | 81.7 | |
| 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 |
direct path write temp2,950 occurrences · 7.639 s
| Duration bucket | Occurrences | % occ. | Duration (s) | % duration | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 µs ≤ e < 10 µs | 2 | 0.1 | 0.000015 | 0.0 | |
| 10 µs ≤ e < 100 µs | 39 | 1.3 | 0.002212 | 0.0 | |
| 100 µs ≤ e < 1 ms | 572 | 19.4 | 0.328922 | 4.3 | |
| 1 ms ≤ e < 10 ms | 2,238 | 75.9 | 5.250195 | 68.7 | |
| 10 ms ≤ e < 100 ms | 98 | 3.3 | 1.954980 | 25.6 | |
| 100 ms ≤ e < 1 s | 1 | 0.0 | 0.102338 | 1.3 | |
| 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 |
log file switch completion2 occurrences · 0.053 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 | 0 | 0.0 | 0.000000 | 0.0 | |
| 10 ms ≤ e < 100 ms | 2 | 100.0 | 0.052671 | 100.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 |
log file switch (private strand flush incomplete)2 occurrences · 0.033 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 | 50.0 | 0.008202 | 24.8 | |
| 10 ms ≤ e < 100 ms | 1 | 50.0 | 0.024917 | 75.2 | |
| 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 |
CSS initialization1 occurrences · 0.009 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.008608 | 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 |
enq: RO - fast object reuse3 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 | 2 | 66.7 | 0.000715 | 30.0 | |
| 1 ms ≤ e < 10 ms | 1 | 33.3 | 0.001668 | 70.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 |
CSS operation: action1 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 | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 ms ≤ e < 10 ms | 1 | 100.0 | 0.001118 | 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 |
Disk file operations I/O36 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 | 12 | 33.3 | 0.000068 | 6.8 | |
| 10 µs ≤ e < 100 µs | 24 | 66.7 | 0.000925 | 93.2 | |
| 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 |
CSS operation: query6 occurrences · 0.000 s
| Duration bucket | Occurrences | % occ. | Duration (s) | % duration | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 3 | 50.0 | 0.000000 | 0.0 | |
| 1 µs ≤ e < 10 µs | 1 | 16.7 | 0.000002 | 0.5 | |
| 10 µs ≤ e < 100 µs | 1 | 16.7 | 0.000012 | 2.9 | |
| 100 µs ≤ e < 1 ms | 1 | 16.7 | 0.000395 | 96.6 | |
| 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 |
reliable message2 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 | 2 | 100.0 | 0.000356 | 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 |
SQL*Net message to client68 occurrences · 0.000 s
| Duration bucket | Occurrences | % occ. | Duration (s) | % duration | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 5 | 7.4 | 0.000000 | 0.0 | |
| 1 µs ≤ e < 10 µs | 63 | 92.6 | 0.000159 | 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 |
EXEC (call duration e)102,658 occurrences · 813.576 s
| Duration bucket | Occurrences | % occ. | Duration (s) | % duration | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 µs ≤ e < 10 µs | 24 | 0.0 | 0.000155 | 0.0 | |
| 10 µs ≤ e < 100 µs | 39,373 | 38.4 | 3.029008 | 0.4 | |
| 100 µs ≤ e < 1 ms | 62,499 | 60.9 | 13.702319 | 1.7 | |
| 1 ms ≤ e < 10 ms | 692 | 0.7 | 1.310447 | 0.2 | |
| 10 ms ≤ e < 100 ms | 61 | 0.1 | 2.999353 | 0.4 | |
| 100 ms ≤ e < 1 s | 7 | 0.0 | 0.970104 | 0.1 | |
| 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 | 2 | 0.0 | 791.564139 | 97.3 | |
| 1.000 s ≤ e < ∞ | 0 | 0.0 | 0.000000 | 0.0 |
FETCH (call duration e)99,915 occurrences · 53.717 s
| Duration bucket | Occurrences | % occ. | Duration (s) | % duration | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 µs ≤ e < 10 µs | 64,126 | 64.2 | 0.466098 | 0.9 | |
| 10 µs ≤ e < 100 µs | 34,972 | 35.0 | 0.846218 | 1.6 | |
| 100 µs ≤ e < 1 ms | 673 | 0.7 | 0.139546 | 0.3 | |
| 1 ms ≤ e < 10 ms | 28 | 0.0 | 0.183620 | 0.3 | |
| 10 ms ≤ e < 100 ms | 115 | 0.1 | 1.528285 | 2.8 | |
| 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 | 1 | 0.0 | 50.553703 | 94.1 | |
| 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)394 occurrences · 0.219 s
| Duration bucket | Occurrences | % occ. | Duration (s) | % duration | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0.0 | 0.000000 | 0.0 | |
| 1 µs ≤ e < 10 µs | 120 | 30.5 | 0.000917 | 0.4 | |
| 10 µs ≤ e < 100 µs | 101 | 25.6 | 0.002569 | 1.2 | |
| 100 µs ≤ e < 1 ms | 132 | 33.5 | 0.046701 | 21.3 | |
| 1 ms ≤ e < 10 ms | 38 | 9.6 | 0.093253 | 42.5 | |
| 10 ms ≤ e < 100 ms | 3 | 0.8 | 0.075860 | 34.6 | |
| 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)102,656 occurrences · 0.106 s
| Duration bucket | Occurrences | % occ. | Duration (s) | % duration | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 17,509 | 17.1 | 0.000000 | 0.0 | |
| 1 µs ≤ e < 10 µs | 84,942 | 82.7 | 0.098508 | 92.8 | |
| 10 µs ≤ e < 100 µs | 192 | 0.2 | 0.004721 | 4.4 | |
| 100 µs ≤ e < 1 ms | 13 | 0.0 | 0.002925 | 2.8 | |
| 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)338,469 occurrences · 521.491 s
| Duration bucket | Occurrences | % occ. | Duration (s) | % duration | |
|---|---|---|---|---|---|
| 0 ≤ e < 5 ms | 308,620 | 91.2 | 199.904697 | 38.3 | |
| 5 ms ≤ e < 10 ms | 19,142 | 5.7 | 133.718232 | 25.6 | |
| 10 ms ≤ e < 15 ms | 5,783 | 1.7 | 70.413303 | 13.5 | |
| 15 ms ≤ e < 20 ms | 2,604 | 0.8 | 44.612616 | 8.6 | |
| 20 ms ≤ e < 25 ms | 1,048 | 0.3 | 23.258307 | 4.5 | |
| 25 ms ≤ e < 50 ms | 1,062 | 0.3 | 34.020285 | 6.5 | |
| 50 ms ≤ e < 100 ms | 188 | 0.1 | 12.286268 | 2.4 | |
| 100 ms ≤ e < 1 s | 22 | 0.0 | 3.277126 | 0.6 | |
| 1 s ≤ e < ∞ | 0 | 0.0 | 0.000000 | 0.0 |
reads (SSD buckets)338,469 occurrences · 521.491 s
| Duration bucket | Occurrences | % occ. | Duration (s) | % duration | |
|---|---|---|---|---|---|
| 0 ≤ e < 15 µs | 3 | 0.0 | 0.000031 | 0.0 | |
| 15 µs ≤ e < 25 µs | 1 | 0.0 | 0.000023 | 0.0 | |
| 25 µs ≤ e < 50 µs | 6 | 0.0 | 0.000198 | 0.0 | |
| 50 µs ≤ e < 100 µs | 9 | 0.0 | 0.000663 | 0.0 | |
| 100 µs ≤ e < 500 µs | 228,961 | 67.6 | 71.674266 | 13.7 | |
| 500 µs ≤ e < 1 ms | 43,328 | 12.8 | 29.040985 | 5.6 | |
| 1 ms ≤ e < 10 ms | 55,454 | 16.4 | 232.906763 | 44.7 | |
| 10 ms ≤ e < ∞ | 10,707 | 3.2 | 187.867905 | 36.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 | 323,225 | 323,225 | 365.662 | 43 | 0.204 |
| db file scattered read | 1,019 | 1,019 | 12.718 | 0 | 0.000 |
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 |
|---|---|---|---|---|
| 192892 | 404.790 | 290,860 | db file sequential read · direct path read · direct path read temp | |
| 202849 | 66.670 | 33,428 | db file sequential read | |
| 192893 | 15.837 | 9,559 | db file sequential read · direct path read · direct path write temp | |
| 202854 | 3.822 | 873 | db file sequential read | |
| 201999 | 0.696 | 419 | direct path read temp · db file sequential read · Disk file operations I/O | |
| 201287 | 0.628 | 475 | direct path read temp · db file sequential read · Disk file operations I/O | |
| 192746 | 0.533 | 192 | db file sequential read · direct path read temp · Disk file operations I/O | |
| 201286 | 0.328 | 322 | direct path read temp · db file sequential read | |
| 202867 | 0.305 | 47 | db file sequential read · Disk file operations I/O | |
| 202865 | 0.143 | 36 | db file sequential read · Disk file operations I/O | |
| 201288 | IDX_0034 | 0.064 | 13 | db file sequential read |
| 192133 | TAB_0065 | 0.037 | 6 | direct path read temp · db file sequential read |
| 201349 | IDX_0035 | 0.025 | 4 | db file sequential read |
| 191473 | 0.012 | 5 | db file sequential read · Disk file operations I/O | |
| 190484 | TAB_0035 | 0.009 | 2 | db file sequential read |
| 190757 | TAB_0063 | 0.009 | 1 | db file sequential read |
| 199392 | IDX_0060 | 0.008 | 1 | db file sequential read |
| 202853 | 0.006 | 1 | db file sequential read | |
| 190981 | TAB_0095 | 0.006 | 1 | db file sequential read |
| 191816 | 0.006 | 3 | db file sequential read · Disk file operations I/O | |
| 202751 | IDX_0036 | 0.005 | 1 | db file sequential read |
| 201296 | 0.005 | 1 | db file sequential read | |
| 201299 | 0.004 | 1 | db file sequential read | |
| 201293 | 0.004 | 1 | db file sequential read | |
| 198940 | IDX_0045 | 0.004 | 1 | db file sequential read |
| 191815 | 0.003 | 2 | db file sequential read · Disk file operations I/O | |
| 201315 | 0.002 | 1 | db file sequential read |
Shareable texts
Statements that differ only in literals. With bind variables, a single cursor would serve them all and hard-parse PARSE calls would drop.
| Texts | PARSE | PARSE (s) | Total (s) | SQL IDs | Example |
|---|---|---|---|---|---|
| 4 | 4 | 0.003 | 0.005 | hidden by the mask | #48 CREATE GLOBAL TEMPORARY T |
| 8 | 8 | 0.003 | 0.004 | hidden by the mask | #55 INSERT INTO TAB_0021 ( COL_0070 , … :n , :s , :s , :s , :s , :s ) |
| 4 | 4 | 0.002 | 0.004 | hidden by the mask | #57 INSERT INTO TAB_0021 ( COL_0070 , … :n , :s , null , :s , :s , :s ) |
| 2 | 2 | 0.001 | 0.001 | hidden by the mask | #117 SELECT SEQ_001.NEXTVAL FROM dual |
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
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
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
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
Direct read into the PGA
direct path read
Reads blocks from disk straight into session memory, bypassing the buffer cache: large serial full scan or parallel query.
- Normal when
- Full read of a large table in a batch process.
- A concern when
- It shows up in a user screen or inside a loop: a large full scan repeated, a whole table read to return a few rows.
- Where to look
- Statements that read the most: Top statements by component, this event's group
- TABLE ACCESS FULL operations and how many times they ran: statement detail, Execution plan: Exec column
- Most-read objects: Objects with the most wait time
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
Reading from TEMP
direct path read temp
Reads from the temporary tablespace what a sort, a hash join or a temporary table wrote there.
- Normal when
- Large sorts and joins, in batch.
- A concern when
- The operation should fit in the session's memory: PGA too small for it, or more volume than needed (wrong join, sorting too many rows).
- Where to look
- Statements that used TEMP: Top statements by component, this event's group
- SORT and HASH JOIN operations that wrote to TEMP: statement detail, Execution plan: PW column
- pga_aggregate_target and pga_aggregate_limit, in the database
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
Multiblock read
db file scattered read
Reads several contiguous blocks at once into the buffer cache: full table scan or index fast full scan.
- Normal when
- Full scan of a small or medium table that fits in the cache.
- A concern when
- Full scan of a large table to return a few rows: an index is missing, or the index is not used.
- Where to look
- Statements that read the most: Top statements by component, this event's group
- TABLE ACCESS FULL and INDEX FAST FULL SCAN operations: statement detail, Execution plan: highlighted operations
- Most-read objects: Objects with the most wait time
Writing to TEMP
direct path write temp
Writes to TEMP the part of a sort or hash join that did not fit in the PGA.
- Normal when
- Large operations, in batch.
- A concern when
- Same as reading from TEMP: small PGA or high volume.
- Where to look
- Statements that used TEMP: Top statements by component, this event's group
- SORT and HASH JOIN operations that wrote to TEMP: statement detail, Execution plan: PW column
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 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
Redo log switch
log file switch completion
The session waits for the redo log file switch to finish.
- Normal when
- Rare: one short wait per switch.
- A concern when
- Redo logs too small for the volume generated: frequent switches.
- Where to look
- How many switches and how long each one lasts: Profile, this component's row: Occurrences and Avg (s) columns
Configuration
Configuration
Waits caused by a configuration limit: small redo log, buffer cache, ITL, sequence cache, space.
- Normal when
- Rare.
- A concern when
- The event points to the parameter or object to tune.
- Where to look
- Which event, and what it asks for: By wait class, this class's row: Top components column
Unclassified
Unclassified
Events the engine cannot classify.
- Normal when
- It adds up to little time.
- A concern when
- It adds up a lot: the event's class in v$event_name says where it belongs.
- Where to look
- The event's class: v$event_name.wait_class, in the database
Buffer cleanup (TRUNCATE or DROP)
enq: RO - fast object reuse
TRUNCATE or DROP waiting for the database to discard the object's blocks held in the buffer cache.
- Normal when
- It adds up to little time.
- A concern when
- TRUNCATE inside a loop, or a buffer cache too large to sweep.
- Where to look
- How many occurrences: Profile, this component's row: Occurrences column
- Statements that waited the most: Top statements by component, this event's group
Opening or closing files
Disk file operations I/O
File operations (open, close, size lookup), not data reads.
- Normal when
- It adds up to little time.
- A concern when
- It adds up a lot: many files opened and closed, or a slow file system.
- Where to look
- How many occurrences and how long each one lasts: Profile, this component's row: Occurrences and Avg (s) columns
Inter-process message
reliable message
The session sent a message to background processes or to other instances and waits for the acknowledgement.
- Normal when
- It adds up to little time.
- A concern when
- It adds up a lot: TRUNCATE, result cache or a parameter change in RAC.
- Where to look
- Statements that waited the most: Top statements by component, this event's group
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
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
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
Application
Application
Waits caused by how the application uses the database: rows and tables locked by another session, application locks, returned errors.
- Normal when
- It adds up to little time.
- A concern when
- Session stalled waiting for another: long transactions, same row updated by several sessions, unindexed foreign key.
- Where to look
- Which events weigh: By wait class, this class's row: Top components column
- Contended objects: Objects with the most wait time
- Statements that were blocked: Top statements by class, this class's group
- Who holds the lock: v$session.blocking_session, in the database
Other
Other
Internal events with no more specific class.
- Normal when
- It adds up to little time.
- A concern when
- It adds up a lot: the event itself points to the cause.
- Where to look
- Which event weighs: By wait class, this class's row: Top components column
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 4yrf1rq97m3vyhv 2457440126Text
SELECT *** FROM TAB_0072 WHERE COL_0064 = COL_0075.ROT_0019() AND COL_0205 = :B2 AND COL_0206 = :B1 AND COL_0032 = COL_0089.COL_0090() AND COL_0039 = COL_0089.ROT_0020() AND ROWNUM = ***
- 1 IDX_0062 does not appear in the text; it comes from a view, a synonym or recursive SQL (operation 2)
- 2 operation 1 (COUNT STOPKEY) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 4.237905 | 50.1 | 44,591 | |
| unaccounted-for | 3.917753 | 46.3 | 133,774 | |
| cpu | 0.284526 | 3.4 | 44,591 | |
| cpu | 0.025129 | 0.3 | 44,591 | |
| recursive | 0.001080 | 0.0 | ||
| cpu | 0.000321 | 0.0 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000321 | 0.000525 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 44,591 | 4.238573 | 7.884412 | 0 | 12 | 0 | 0 | 1 |
| FETCH | 44,591 | 0.284526 | 0.531993 | 0 | 44,593 | 0 | 44,574 | 0 |
| CLOSE | 44,591 | 0.025129 | 0.049784 | 0 | 0 | 0 | 0 | 0 |
Execution plan 411144836
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 2 · INDEX UNIQUE SCAN IDX_0062 58.3% of time · 0.0% of logical reads
- 2 Id 1 · COUNT STOPKEY 41.7% of time · 0.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 | 2 | 0 | 0.000005 | 41.7 | 0 | 0.0 | 0 | 0 | 0.000012 | 0 | |||||
| 2 | 1 | 0 | 1 | 0.000007 | 58.3 | 0 | 0.0 | 0 | 0 | 0.000007 | 0 | 1 | 201226 |
Stop after N rows
COUNT STOPKEY
Stops reading after N rows (ROWNUM <= N or FETCH FIRST).
- Good when
- Stops work early when rows already arrive in the right order.
- Bad when
- When there is a full sort below: everything is read before the cutoff.
- In the plan, check
- Rows from the operations below.
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
#2 · SELECT
sql_id gfhr7c2b942m8hv 2526153320Text
SELECT *** FROM TAB_0074 WHERE COL_0064 = COL_0075.ROT_0019() AND COL_0412 = :B1 AND COL_0032 = COL_0089.COL_0090() AND COL_0039 = COL_0089.ROT_0020() AND ROWNUM = ***
- 1 IDX_0063 does not appear in the text; it comes from a view, a synonym or recursive SQL (operation 2)
- 2 operation 1 (COUNT STOPKEY) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 2.347927 | 49.1 | 44,590 | |
| unaccounted-for | 2.080456 | 43.5 | 133,771 | |
| cpu | 0.333243 | 7.0 | 44,590 | |
| cpu | 0.020136 | 0.4 | 44,590 | |
| recursive | 0.004016 | 0.1 | ||
| cpu | 0.000156 | 0.0 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000156 | 0.000254 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 44,590 | 2.349831 | 4.143737 | 0 | 12 | 0 | 0 | 1 |
| FETCH | 44,590 | 0.333243 | 0.602454 | 0 | 44,593 | 0 | 44,575 | 0 |
| CLOSE | 44,590 | 0.020136 | 0.039489 | 0 | 0 | 0 | 0 | 0 |
Execution plan 2227191942
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 2 · INDEX RANGE SCAN IDX_0063 57.1% of time · 0.0% of logical reads
Scans a wide range of the index: check the selectivity and the column order. - 2 Id 1 · COUNT STOPKEY 42.9% of time · 0.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 | 2 | 0 | 0.000006 | 42.9 | 0 | 0.0 | 0 | 0 | 0.000014 | 0 | |||||
| 2 | 1 | 0 | 1 | 0.000008 | 57.1 | 0 | 0.0 | 0 | 0 | 0.000008 | 0 | 1 | 201225 |
Stop after N rows
COUNT STOPKEY
Stops reading after N rows (ROWNUM <= N or FETCH FIRST).
- Good when
- Stops work early when rows already arrive in the right order.
- Bad when
- When there is a full sort below: everything is read before the cutoff.
- In the plan, check
- Rows from the operations below.
Index range scan
INDEX RANGE SCAN
Goes down to the first leaf block of the range and walks, in order, the leaf blocks within the range set by the access predicate.
- Good when
- Narrow range: the access predicate uses the leading index columns with equality and few keys remain.
- Bad when
- Wide range (many leaf blocks), a predicate that does not use the leading index column (it becomes a filter predicate inside the index), or many executions as the inner of a NESTED LOOPS. If the TABLE ACCESS above discards almost everything, the index is missing the filter's column.
- In the plan, check
- Rows returned and self LIO, compared with those of the table operation right above.
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
#3 · SELECT
sql_id c1q763kjacnm1hv 2728809057Text
SELECT X49.COL_0402, X49.COL_0403, SUM(X49.COL_0226) COL_0226, SUM(X49.COL_0227) COL_0227, X49.COL_0404, X49.COL_0405, X49.COL_0406, X49.COL_0407 FROM TAB_00931 X49, TAB_0026 PKG_0006, TAB_0088 X04 WHERE X49.COL_0032 = :B10 AND X49.COL_0039 = :B9 AND X49.ROT_0013 = PKG_0006.ROT_0013 (+) AND ((COL_0089.COL_0100 = :B8 AND X49.ROT_0013 IS NULL) OR (COL_0089.COL_0100 = PKG_0006.COL_0101) OR (COL_0089.COL_0100 IS NULL)) AND X49.COL_0408 = :B7 AND X49.COL_0409 = :B6 AND X49.COL_0410 = :B5 AND X49.COL_0411 = :B4 AND X04.COL_0244 = :B3 AND X04.COL_0245 = :B2 AND X04.COL_0246 = :B1 AND X49.COL_0274 = X04.COL_0274 GROUP BY X49.COL_0402, X49.COL_0403, X49.COL_0404, X49.COL_0405, X49.COL_0406, X49.COL_0407
- 1 TAB_0093, table of index IDX_0057: plan operation 7
- 2 operation 1 (HASH GROUP BY) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 2.229278 | 52.5 | 7,975 | |
| unaccounted-for | 1.852437 | 43.6 | 23,926 | |
| cpu | 0.158809 | 3.7 | 7,975 | |
| cpu | 0.005009 | 0.1 | 7,975 | |
| recursive | 0.001125 | 0.0 | ||
| cpu | 0.000134 | 0.0 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000134 | 0.000214 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 7,975 | 2.229932 | 3.947829 | 0 | 16 | 0 | 0 | 1 |
| FETCH | 7,975 | 0.158809 | 0.288896 | 0 | 7,975 | 0 | 0 | 0 |
| CLOSE | 7,975 | 0.005009 | 0.009853 | 0 | 0 | 0 | 0 | 0 |
Execution plan 1305712285
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 7 · INDEX RANGE SCAN IDX_0057 25.7% of time · 100.0% of logical reads
Scans a wide range of the index: check the selectivity and the column order. - 2 Id 1 · HASH GROUP BY 67.3% of time · 0.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 | 2 | 0 | 1 | 0.000068 | 67.3 | 0 | 0.0 | 0 | 0 | 0.000101 | 1 | 1 | |||
| 2 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000033 | 1 | 0 | ||||
| 3 | 0 | 1 | 0.000001 | 1.0 | 0 | 0.0 | 0 | 0 | 0.000033 | 1 | 0 | ||||
| 4 | 0 | 0.000002 | 2.0 | 0 | 0.0 | 0 | 0 | 0.000032 | 1 | ||||||
| 5 | 0 | 1 | 0.000001 | 1.0 | 0 | 0.0 | 0 | 0 | 0.000030 | 1 | 0 | ||||
| 6 | 0 | 1 | 0.000003 | 3.0 | 0 | 0.0 | 0 | 0 | 0.000029 | 1 | 0 | 192404 | |||
| 7 | 1 | 0 | 1 | 0.000026 | 25.7 | 1 | 100.0 | 0 | 0 | 0.000026 | 1 | 0 | 201077 | ||
| 8 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 193177 | |||
| 9 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 202263 | |||
| 10 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 198982 | |||
| 11 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 190770 |
Hash grouping
HASH GROUP BY
Groups the rows for GROUP BY using an in-memory hash table.
- Good when
- Many rows and few groups.
- Bad when
- Many groups that do not fit in the PGA workarea: writes to TEMP.
- In the plan, check
- PW and Self time (s).
Nested loops join
NESTED LOOPS
For each row of the outer (driving) row source, executes the inner row source.
- Good when
- Few rows in the outer and selective index access in the inner. Returns the first rows quickly (good for FIRST_ROWS).
- Bad when
- Many rows in the outer: the inner runs thousands of times. It usually comes from an underestimated cardinality in the outer; a HASH JOIN would read each side only once.
- In the plan, check
- Exec of the inner operations and, in the outer, Estimated compared with Rows/exec.
Filter
FILTER
Applies a predicate to the rows of the row source below. With two row sources, executes the second (a subquery that was not unnested) for each row of the first.
- Good when
- A single row source, or a subquery executed only a few times (FILTER caches the results already computed).
- Bad when
- Subquery executed row by row (high Exec on the second row source): allowing unnesting or rewriting it as a join usually solves it.
- In the plan, check
- Exec of the second row source.
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.
Index range scan
INDEX RANGE SCAN
Goes down to the first leaf block of the range and walks, in order, the leaf blocks within the range set by the access predicate.
- Good when
- Narrow range: the access predicate uses the leading index columns with equality and few keys remain.
- Bad when
- Wide range (many leaf blocks), a predicate that does not use the leading index column (it becomes a filter predicate inside the index), or many executions as the inner of a NESTED LOOPS. If the TABLE ACCESS above discards almost everything, the index is missing the filter's column.
- In the plan, check
- Rows returned and self LIO, compared with those of the table operation right above.
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
#4 · INSERT
sql_id 5jh16c5vkcn6bhv 1998999755Text
INSERT /*+ SYS_DL_CURSOR */ INTO TAB_0049 (COL_0417, COL_0086, COL_0107, COL_0109, COL_0418, COL_0044, COL_0105) VALUES (SEQ_007.NEXTVAL, :B1 , :B2 , :B3 , :B4 , :B5 , :B6 )
- 1 operation 1 (LOAD TABLE CONVENTIONAL) has no object of its own in the text
- 2 operation 2 (SEQUENCE SEQ_007) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| recursive | 1.306169 | 42.9 | ||
| cpu | 0.869352 | 28.5 | 35 | |
| unaccounted-for | 0.645050 | 21.2 | 71 | |
| wait | 0.226173 | 7.4 | 63 | |
| cpu | 0.000224 | 0.0 | 1 | |
| cpu | 0.000023 | 0.0 | 35 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000224 | 0.000373 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 35 | 1.618630 | 3.046573 | 63 | 8,693 | 169,667 | 52,500 | 1 |
| CLOSE | 35 | 0.000023 | 0.000045 | 0 | 0 | 0 | 0 | 0 |
Execution plan 952385929
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 · LOAD TABLE CONVENTIONAL 96.4% of time · 71.0% of logical reads
- 2 Id 2 · SEQUENCE SEQ_007 3.6% of time · 29.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 | 0 | 0.123849 | 96.4 | 184 | 71.0 | 26 | 0 | 0.128496 | 259 | |||||
| 2 | 2 | 1,500 | 0.004647 | 3.6 | 75 | 29.0 | 0 | 0 | 0.004647 | 75 | 190050 |
Conventional insert
LOAD TABLE CONVENTIONAL
Inserts the rows into the table through the regular INSERT path.
- Good when
- Everyday inserts.
- Bad when
- The table's triggers, indexes and constraints add cost here; for large loads, direct-path mode (APPEND) writes faster.
- In the plan, check
- Self time (s) and the statement's waits.
Sequence (NEXTVAL)
SEQUENCE
Generates the next values of a sequence.
- Good when
- Cache sized for the volume.
- Bad when
- Small cache with heavy use: waits on enq: SQ and on the dictionary.
- In the plan, check
- The statement's waits, in its profile.
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
#5 · SELECT
sql_id d7sadnr6zu6k9hv 3455916617Text
WITH TAB_0082 AS (SELECT DISTINCT COL_0265.COL_0266 , COL_0265.COL_0032 , COL_0265.COL_0039 , COL_0265.COL_0267 , COL_0265.COL_0268 , COL_0265.COL_0269 , COL_0265.COL_0270 , COL_0265.COL_0271 , COL_0265.COL_0272 , COL_0265.COL_0273 , COL_0265.COL_0274 , COL_0265.COL_0275 , COL_0265.COL_0068 , COL_0265.COL_0276 , COL_0265.COL_0277 , COL_0265.COL_0278 , COL_0265.COL_0279 , COL_0265.COL_0280 , COL_0265.COL_0281 , COL_0265.COL_0282 , COL_0265.COL_0283 , COL_0265.COL_0284 , COL_0265.COL_0285 , COL_0265.COL_0286 , COL_0265.COL_0287 , COL_0265.COL_0288 , COL_0265.COL_0289 , COL_0265.COL_0290 , COL_0265.COL_0291 , COL_0265.COL_0292 , COL_0265.COL_0293 , COL_0265.COL_0294 , COL_0265.COL_0295 , COL_0265.COL_0296 , COL_0265.COL_0297 , COL_0265.COL_0298 , COL_0265.COL_0299 , COL_0265.COL_0300 , COL_0265.COL_0301 , COL_0265.COL_0302 , COL_0265.COL_0226 , COL_0265.COL_0303 , COL_0265.COL_0304 , COL_0265.COL_0227 , COL_0265.COL_0305 , COL_0265.COL_0306 , COL_0265.COL_0307 , COL_0265.COL_0308 , COL_0265.COL_0309 , COL_0265.COL_0310 , COL_0265.COL_0311 , COL_0265.COL_0312 , COL_0265.COL_0313 , COL_0265.COL_0314 , COL_0265.COL_0315 , COL_0265.COL_0316 , COL_0265.COL_0317 , COL_0265.COL_0318 , COL_0265.COL_0319 , COL_0265.COL_0320 , COL_0265.COL_0321 , COL_0265.COL_0322 , COL_0265.COL_0323 , COL_0265.COL_0324 , COL_0265.COL_0325 , COL_0265.COL_0326 , COL_0265.COL_0327 , COL_0265.COL_0214 , COL_0265.COL_0238 , COL_0265.COL_0328 , COL_0265.COL_0329 , COL_0265.COL_0330 , COL_0265.COL_0162 , COL_0265.COL_0331 , COL_0265.ROT_0018 , PKG_0009.COL_0332 , COL_0265.COL_0333 , COL_0265.COL_0334 , COL_0265.COL_0335 , COL_0265.COL_0336 , COL_0265.COL_0337 , COL_0265.COL_0338 FROM TAB_0083 COL_0265, TAB_0084 PKG_0009, TAB_0026 PKG_0006 WHERE COL_0265.COL_0032 = :B6 AND COL_0265.COL_0039 = :B5 AND COL_0265.ROT_0013 = PKG_0006.ROT_0013 (+) AND ((COL_0089.COL_0100 = :B4 AND COL_0265.ROT_0013 IS NULL) OR (COL_0089.COL_0100 = PKG_0006.COL_0101) OR (COL_0089.COL_0100 IS NULL)) AND COL_0265.COL_0268 < '***' AND ((COL_0265.COL_0321 BETWEEN :B3 AND :B2 ) OR EXISTS (SELECT *** FROM TAB_0085 COL_0339 WHERE COL_0339.COL_0032 = COL_0265.COL_0032 AND COL_0339.COL_0039 = COL_0265.COL_0039 AND COL_0339.COL_0267 = COL_0265.COL_0267 AND COL_0339.COL_0268 = COL_0265.COL_0268 AND COL_0339.COL_0269 = COL_0265.COL_0269 AND COL_0339.COL_0273 = COL_0265.COL_0273 AND COL_0339.COL_0274 = COL_0265.COL_0274 AND COL_0339.COL_0270 = COL_0265.COL_0270 AND COL_0339.COL_0271 = COL_0265.COL_0271 AND COL_0339.COL_0272 = COL_0265.COL_0272 AND COL_0339.COL_0321 BETWEEN :B3 AND :B2 UNION ALL SELECT *** FROM TAB_0086 COL_0340 WHERE COL_0340.COL_0032 = COL_0265.COL_0032 AND COL_0340.COL_0039 = COL_0265.COL_0039 AND COL_0340.COL_0267 = COL_0265.COL_0267 AND COL_0340.COL_0268 = COL_0265.COL_0268 AND COL_0340.COL_0269 = COL_0265.COL_0269 AND COL_0340.COL_0273 = COL_0265.COL_0273 AND COL_0340.COL_0274 = COL_0265.COL_0274 AND COL_0340.COL_0270 = COL_0265.COL_0270 AND COL_0340.COL_0271 = COL_0265.COL_0271 AND COL_0340.COL_0272 = COL_0265.COL_0272 AND COL_0340.COL_0321 BETWEEN :B3 AND :B2 ) ) AND ( :B1 = '***') AND COL_0265.COL_0269 IN ('***', '***') AND COL_0265.ROT_0018 = PKG_0009.ROT_0018 (+) UNION ALL SELECT COL_0265.COL_0266 , COL_0265.COL_0032 , COL_0265.COL_0039 , COL_0265.COL_0267 , COL_0265.COL_0268 , COL_0265.COL_0269 , COL_0265.COL_0270 , COL_0265.COL_0271 , COL_0265.COL_0272 , COL_0265.COL_0273 , COL_0265.COL_0274 , COL_0265.COL_0275 , COL_0265.COL_0068 , COL_0265.COL_0276 , COL_0265.COL_0277 , COL_0265.COL_0278 , COL_0265.COL_0279 , COL_0265.COL_0280 , COL_0265.COL_0281 , COL_0265.COL_0282 , COL_0265.COL_0283 , COL_0265.COL_0284 , COL_0265.COL_0285 , COL_0265.COL_0286 , COL_0265.COL_0287 , COL_0265.COL_0288 , COL_0265.COL_0289 , COL_0265.COL_0290 , COL_0265.COL_0291 , COL_0265.COL_0292 , COL_0265.COL_0293 , COL_0265.COL_0294 , COL_0265.COL_0295 , COL_0265.COL_0296 , COL_0265.COL_0297 , COL_0265.COL_0298 , COL_0265.COL_0299 , COL_0265.COL_0300 , COL_0265.COL_0301 , COL_0265.COL_0302 , COL_0265.COL_0226 , COL_0265.COL_0303 , COL_0265.COL_0304 , COL_0265.COL_0227 , COL_0265.COL_0305 , COL_0265.COL_0306 , COL_0265.COL_0307 , COL_0265.COL_0308 , COL_0265.COL_0309 , COL_0265.COL_0310 , COL_0265.COL_0311 , COL_0265.COL_0312 , COL_0265.COL_0313 , COL_0265.COL_0314 , COL_0265.COL_0315 , COL_0265.COL_0316 , COL_0265.COL_0317 , COL_0265.COL_0318 , COL_0265.COL_0319 , COL_0265.COL_0320 , COL_0265.COL_0321 , COL_0265.COL_0322 , COL_0265.COL_0323 , COL_0265.COL_0324 , COL_0265.COL_0325 , COL_0265.COL_0326 , COL_0265.COL_0327 , COL_0265.COL_0214 , COL_0265.COL_0238 , COL_0265.COL_0328 , COL_0265.COL_0329 , COL_0265.COL_0330 , COL_0265.COL_0162 , COL_0265.COL_0331 , COL_0265.ROT_0018 , PKG_0009.COL_0332 , COL_0265.COL_0333 , COL_0265.COL_0334 , COL_0265.COL_0335 , COL_0265.COL_0336 , COL_0265.COL_0337 , COL_0265.COL_0338 FROM TAB_0083 COL_0265, TAB_0084 PKG_0009, TAB_0026 PKG_0006 WHERE COL_0265.COL_0032 = :B6 AND COL_0265.COL_0039 = :B5 AND COL_0265.ROT_0013 = PKG_0006.ROT_0013 (+) AND ((COL_0089.COL_0100 = :B4 AND COL_0265.ROT_0013 IS NULL) OR (COL_0089.COL_0100 = PKG_0006.COL_0101) OR (COL_0089.COL_0100 IS NULL)) AND COL_0265.COL_0268 = '***' AND COL_0265.COL_0267 BETWEEN :B3 AND :B2 AND COL_0265.COL_0269 IN ('***', '***') AND COL_0265.ROT_0018 = PKG_0009.ROT_0018 (+) ), TAB_0087 AS (SELECT UNIQUE '***' COL_0341, COL_0342.COL_0266 COL_0266, COL_0342.COL_0032 COL_0032, COL_0342.COL_0039 COL_0039, COL_0342.COL_0267 COL_0267, COL_0342.COL_0268 COL_0268, COL_0342.COL_0269 COL_0269, COL_0342.COL_0273 COL_0273, COL_0342.COL_0274 COL_0274, COL_0342.COL_0270 COL_0270, COL_0342.COL_0271 COL_0271, COL_0342.COL_0272 COL_0272, *** COL_0343, COL_0344.COL_0244 COL_0244, COL_0344.COL_0245 COL_0245, COL_0344.COL_0246 COL_0246, COL_0342.COL_0275 COL_0275, COL_0342.COL_0068 COL_0068, COL_0342.COL_0276 COL_0276, COL_0342.ROT_0018 ROT_0018, COL_0342.COL_0277 COL_0277, COL_0342.COL_0278 COL_0278, TAB_0087.COL_0328 COL_0328, COL_0342.COL_0279 COL_0279, TAB_0087.COL_0345 COL_0345, COL_0342.COL_0280 COL_0280, TAB_0087.COL_0281 COL_0281, TAB_0087.COL_0346 COL_0346, COL_0342.COL_0283 COL_0283, COL_0342.COL_0284 COL_0284, COL_0342.COL_0285 COL_0285, COL_0342.COL_0286 COL_0286, TAB_0087.COL_0287 COL_0287, TAB_0087.COL_0288 COL_0288, TAB_0087.COL_0289 COL_0289, TAB_0087.COL_0290 COL_0290, TAB_0087.COL_0291 COL_0291, TAB_0087.COL_0292 COL_0292, TAB_0087.COL_0329 COL_0329, TAB_0087.COL_0330 COL_0330, TAB_0087.COL_0293 COL_0293, TAB_0087.COL_0294 COL_0294, TAB_0087.COL_0295 COL_0295, TAB_0087.COL_0296 COL_0296, TAB_0087.COL_0347 COL_0347, TAB_0087.COL_0297 COL_0297, TAB_0087.COL_0298 COL_0298, TAB_0087.COL_0299 COL_0299, COL_0342.COL_0300 COL_0300, COL_0342.COL_0301 COL_0301, TAB_0087.COL_0302 COL_0302, TAB_0087.COL_0226 COL_0226, TAB_0087.COL_0303 COL_0303, TAB_0087.COL_0304 COL_0304, TAB_0087.COL_0227 COL_0227, TAB_0087.COL_0305 COL_0305, *** COL_0348, *** COL_0349, *** COL_0350, *** COL_0351, *** COL_0352, *** COL_0353, TAB_0087.COL_0354 COL_0354, PKG_0010.COL_0233 COL_0233, PKG_0010.COL_0209 COL_0209, PKG_0010.COL_0210 COL_0210, PKG_0010.COL_0218 COL_0218, NULL COL_0355, TAB_0087.COL_0356 COL_0356, TAB_0087.COL_0357 COL_0357, TAB_0087.COL_0358 COL_0358, TAB_0087.COL_0231 COL_0359, PKG_0010.COL_0231 COL_0360, TAB_0087.COL_0238 COL_0238, COL_0344.COL_0361 COL_0361, TAB_0087.COL_0362 COL_0362, TAB_0087.COL_0363 COL_0363, TAB_0087.COL_0364 COL_0364, TAB_0087.COL_0365 COL_0365, TAB_0087.COL_0162 COL_0162, COL_0342.COL_0306 COL_0366, COL_0342.COL_0307 COL_0367, COL_0342.COL_0308 COL_0368, TAB_0087.COL_0309 COL_0309, TAB_0087.COL_0310 COL_0310, TAB_0087.COL_0311 COL_0311, TAB_0087.COL_0312 COL_0312, COL_0342.COL_0313 COL_0313, COL_0342.COL_0314 COL_0314, COL_0342.COL_0315 COL_0315, TAB_0087.COL_0369 COL_0369, LPAD(TAB_0087.COL_0370, ***, '***') COL_0370, NULL COL_0371, TAB_0087.COL_0372 COL_0372, TAB_0087.COL_0373 COL_0373, LPAD(TAB_0087.COL_0374, ***, '***') COL_0374, NULL COL_0375, TAB_0087.COL_0376 COL_0376, TAB_0087.COL_0377 COL_0377, TAB_0087.COL_0318 COL_0318, COL_0342.COL_0331 COL_0378, COL_0342.COL_0319 COL_0319, COL_0344.COL_0201 COL_0379, COL_0342.COL_0162 COL_0380, TAB_0087.COL_0320 COL_0320, TAB_0087.COL_0321 COL_0321, COL_0342.COL_0320 COL_0381, COL_0342.COL_0321 COL_0382, '***' COL_0383, TAB_0087.COL_0384 COL_0384, TAB_0087.COL_0385 COL_0385, COL_0344.COL_0386 COL_0387, COL_0342.COL_0323 COL_0323, '***' COL_0388, COL_0344.COL_0389 COL_0390, COL_0342.COL_0324 COL_0324, *** COL_0325, *** COL_0326, COL_0342.COL_0327 COL_0327, TAB_0087.COL_0214 COL_0214, TAB_0087.COL_0333 COL_0333, TAB_0087.COL_0334 COL_0334, TAB_0087.COL_0335 COL_0335, COL_0342.COL_0336, COL_0344.COL_0391, COL_0344.COL_0033, COL_0342.COL_0337, NULL COL_0338, CASE WHEN TAB_0087.COL_0231 IS NOT NULL THEN (SELECT COL_0207 FROM TAB_0062 WHERE COL_0231 = TAB_0087.COL_0231) ELSE (SELECT COL_0207 FROM TAB_0062 WHERE COL_0231 = PKG_0010.COL_0231) END COL_0207 FROM TAB_0082 COL_0342, TAB_0085 TAB_0087, TAB_0088 COL_0344, TAB_0061 PKG_0010, TAB_0084 PKG_0009 WHERE TAB_0087.COL_0032 = COL_0342.COL_0032 AND TAB_0087.COL_0039 = COL_0342.COL_0039 AND TAB_0087.COL_0267 = COL_0342.COL_0267 AND TAB_0087.COL_0268 = COL_0342.COL_0268 AND TAB_0087.COL_0269 = COL_0342.COL_0269 AND TAB_0087.COL_0273 = COL_0342.COL_0273 AND TAB_0087.COL_0274 = COL_0342.COL_0274 AND TAB_0087.COL_0270 = COL_0342.COL_0270 AND TAB_0087.COL_0271 = COL_0342.COL_0271 AND TAB_0087.COL_0272 = COL_0342.COL_0272 AND COL_0342.COL_0274 = COL_0344.COL_0274 AND TAB_0087.COL_0233 = PKG_0010.COL_0233(+) AND COL_0342.ROT_0018 = PKG_0009.ROT_0018(+) UNION ALL SELECT UNIQUE '***' COL_0341, COL_0342.COL_0266 COL_0266, COL_0342.COL_0032 COL_0032, COL_0342.COL_0039 COL_0039, COL_0342.COL_0267 COL_0267, COL_0342.COL_0268 COL_0268, COL_0342.COL_0269 COL_0269, COL_0342.COL_0273 COL_0273, COL_0342.COL_0274 COL_0274, COL_0342.COL_0270 COL_0270, COL_0342.COL_0271 COL_0271, COL_0342.COL_0272 COL_0272, COL_0392.COL_0393 COL_0343, COL_0344.COL_0244 COL_0244, COL_0344.COL_0245 COL_0245, COL_0344.COL_0246 COL_0246, COL_0342.COL_0275 COL_0275, COL_0342.COL_0068 COL_0068, COL_0342.COL_0276 COL_0276, COL_0342.ROT_0018 ROT_0018, COL_0342.COL_0277 COL_0277, COL_0342.COL_0278 COL_0278, TAB_0087.COL_0328 COL_0328, *** COL_0279, *** COL_0345, COL_0342.COL_0280 COL_0280, *** COL_0281, *** COL_0346, COL_0342.COL_0283 COL_0283, *** COL_0284, *** COL_0285, *** COL_0286, *** COL_0287, *** COL_0288, *** COL_0289, *** COL_0290, *** COL_0291, *** COL_0292, TAB_0087.COL_0329 COL_0329, TAB_0087.COL_0330 COL_0330, *** COL_0293, *** COL_0294, *** COL_0295, TAB_0087.COL_0296 COL_0296, TAB_0087.COL_0347 COL_0347, *** COL_0297, *** COL_0298, *** COL_0299, *** COL_0300, *** COL_0301, TAB_0087.COL_0309 COL_0302, TAB_0087.COL_0310 COL_0226, TAB_0087.COL_0333 COL_0303, TAB_0087.COL_0311 COL_0304, TAB_0087.COL_0312 COL_0227, TAB_0087.COL_0334 COL_0305, *** COL_0348, *** COL_0349, *** COL_0350, *** COL_0351, *** COL_0352, *** COL_0353, COL_0392.COL_0393 + DENSE_RANK () OVER (PARTITION BY COL_0342.COL_0266 ORDER BY TAB_0087.COL_0354) COL_0354, PKG_0010.COL_0233 COL_0233, PKG_0010.COL_0209 COL_0209, PKG_0010.COL_0210 COL_0210, PKG_0010.COL_0218 COL_0218, NULL COL_0355, TAB_0087.COL_0356 COL_0356, TAB_0087.COL_0357 COL_0357, TAB_0087.COL_0358 COL_0358, TAB_0087.COL_0231 COL_0359, PKG_0010.COL_0231 COL_0360, TAB_0087.COL_0238 COL_0238, COL_0344.COL_0361 COL_0361, TAB_0087.COL_0362 COL_0362, TAB_0087.COL_0363 COL_0363, TAB_0087.COL_0364 COL_0364, TAB_0087.COL_0365 COL_0365, TAB_0087.COL_0162 COL_0162, COL_0342.COL_0306 COL_0366, COL_0342.COL_0307 COL_0367, *** COL_0368, *** COL_0309, *** COL_0310, *** COL_0311, *** COL_0312, COL_0342.COL_0313 COL_0313, COL_0342.COL_0314 COL_0314, COL_0342.COL_0315 COL_0315, TAB_0087.COL_0369 COL_0369, LPAD(TAB_0087.COL_0370 , ***, '***') COL_0370, LPAD(TAB_0087.COL_0394 , ***, '***') COL_0371, *** COL_0372, *** COL_0373, LPAD(TAB_0087.COL_0374, ***, '***') COL_0374, LPAD(TAB_0087.COL_0395, ***, '***') COL_0375, *** COL_0376, *** COL_0377, *** COL_0318, COL_0342.COL_0331 COL_0378, COL_0342.COL_0319 COL_0319, COL_0344.COL_0201 COL_0379, COL_0342.COL_0162 COL_0380, TAB_0087.COL_0320 COL_0320, TAB_0087.COL_0321 COL_0321, COL_0342.COL_0320 COL_0381, COL_0342.COL_0321 COL_0382, '***' COL_0383, TAB_0087.COL_0384 COL_0384, TAB_0087.COL_0385 COL_0385, COL_0344.COL_0386 COL_0387, COL_0342.COL_0323 COL_0323, '***' COL_0388, COL_0344.COL_0389 COL_0390, COL_0342.COL_0324 COL_0324, *** COL_0325, *** COL_0326, COL_0342.COL_0327 COL_0327, TAB_0087.COL_0214 COL_0214, *** COL_0333, *** COL_0334, TAB_0087.COL_0335 COL_0335, COL_0342.COL_0336, COL_0344.COL_0391, COL_0344.COL_0033, COL_0342.COL_0337, NULL COL_0338, CASE WHEN TAB_0087.COL_0231 IS NOT NULL THEN (SELECT COL_0207 FROM TAB_0062 WHERE COL_0231 = TAB_0087.COL_0231) ELSE (SELECT COL_0207 FROM TAB_0062 WHERE COL_0231 = PKG_0010.COL_0231) END COL_0207 FROM TAB_0082 COL_0342, TAB_0085 TAB_0087, TAB_0088 COL_0344, TAB_0061 PKG_0010, TAB_0084 PKG_0009, (SELECT COL_0266, MAX(COL_0396) COL_0393 FROM (SELECT COL_0242.COL_0266, MAX(COL_0242.COL_0354) COL_0396 FROM TAB_0085 COL_0242, TAB_0082 WHERE TAB_0082.COL_0266 = COL_0242.COL_0266 GROUP BY COL_0242.COL_0266 UNION ALL SELECT COL_0242.COL_0266, MAX(COL_0242.COL_0354) COL_0396 FROM TAB_0086 COL_0242, TAB_0082 WHERE TAB_0082.COL_0266 = COL_0242.COL_0266 GROUP BY COL_0242.COL_0266) GROUP BY COL_0266) COL_0392 WHERE TAB_0087.COL_0032 = COL_0342.COL_0032 AND TAB_0087.COL_0039 = COL_0342.COL_0039 AND TAB_0087.COL_0267 = COL_0342.COL_0267 AND TAB_0087.COL_0268 = COL_0342.COL_0268 AND TAB_0087.COL_0269 = COL_0342.COL_0269 AND TAB_0087.COL_0273 = COL_0342.COL_0273 AND TAB_0087.COL_0274 = COL_0342.COL_0274 AND TAB_0087.COL_0270 = COL_0342.COL_0270 AND TAB_0087.COL_0271 = COL_0342.COL_0271 AND TAB_0087.COL_0272 = COL_0342.COL_0272 AND COL_0342.COL_0274 = COL_0344.COL_0274 AND TAB_0087.COL_0233 = PKG_0010.COL_0233(+) AND COL_0342.ROT_0018 = PKG_0009.ROT_0018(+) AND (TAB_0087.COL_0394 IS NOT NULL OR TAB_0087.COL_0395 IS NOT NULL) AND COL_0342.COL_0266 = COL_0392.COL_0266 ORDER BY 9,9,5,8,5,3,8,43,88,23,55), TAB_0089 AS (SELECT UNIQUE '***' COL_0341, COL_0342.COL_0266 COL_0266, COL_0342.COL_0032 COL_0032, COL_0342.COL_0039 COL_0039, COL_0342.COL_0267 COL_0267, COL_0342.COL_0268 COL_0268, COL_0342.COL_0269 COL_0269, COL_0342.COL_0273 COL_0273, COL_0342.COL_0274 COL_0274, COL_0342.COL_0270 COL_0270, COL_0342.COL_0271 COL_0271, COL_0342.COL_0272 COL_0272, *** COL_0343, COL_0344.COL_0244 COL_0244, COL_0344.COL_0245 COL_0245, COL_0344.COL_0246 COL_0246, COL_0342.COL_0275 COL_0275, COL_0342.COL_0068 COL_0068, COL_0342.COL_0276 COL_0276, COL_0342.ROT_0018 ROT_0018, COL_0342.COL_0277 COL_0277, COL_0342.COL_0278 COL_0278, TAB_0087.COL_0328 COL_0328, COL_0342.COL_0279 COL_0279, TAB_0087.COL_0397 COL_0345, COL_0342.COL_0280 COL_0280, TAB_0087.COL_0281 COL_0281, TAB_0087.COL_0348 COL_0346, COL_0342.COL_0283 COL_0283, COL_0342.COL_0284 COL_0284, COL_0342.COL_0285 COL_0285, COL_0342.COL_0286 COL_0286, TAB_0087.COL_0287 COL_0287, TAB_0087.COL_0288 COL_0288, TAB_0087.COL_0289 COL_0289, TAB_0087.COL_0290 COL_0290, TAB_0087.COL_0291 COL_0291, TAB_0087.COL_0292 COL_0292, *** COL_0329, *** COL_0330, *** COL_0293, *** COL_0294, *** COL_0295, '***' COL_0296, '***' COL_0347, *** COL_0297, *** COL_0298, *** COL_0299, COL_0342.COL_0300 COL_0300, COL_0342.COL_0301 COL_0301, TAB_0087.COL_0302 COL_0302, TAB_0087.COL_0226 COL_0226, TAB_0087.COL_0303 COL_0303, TAB_0087.COL_0304 COL_0304, TAB_0087.COL_0227 COL_0227, TAB_0087.COL_0305 COL_0305, TAB_0087.COL_0348 COL_0348, TAB_0087.COL_0349 COL_0349, TAB_0087.COL_0350 COL_0350, TAB_0087.COL_0351 COL_0351, TAB_0087.COL_0352 COL_0352, TAB_0087.COL_0353 COL_0353, TAB_0087.COL_0354 COL_0354, PKG_0011.COL_0236 COL_0233, PKG_0011.COL_0398 COL_0209, '***' COL_0210, PKG_0011.COL_0235 COL_0218, PKG_0011.COL_0355 COL_0355, '***' COL_0356, '***' COL_0357, '***' COL_0358, *** COL_0359, *** COL_0360, TAB_0087.COL_0238 COL_0238, COL_0344.COL_0361 COL_0361, TAB_0087.COL_0362 COL_0362, *** COL_0363, *** COL_0364, TAB_0087.COL_0365 COL_0365, TAB_0087.COL_0162 COL_0162, COL_0342.COL_0306 COL_0366, COL_0342.COL_0307 COL_0367, COL_0342.COL_0308 COL_0368, *** COL_0309, TAB_0087.COL_0325 COL_0310, *** COL_0311, TAB_0087.COL_0326 COL_0312, COL_0342.COL_0313 COL_0313, COL_0342.COL_0314 COL_0314, COL_0342.COL_0315 COL_0315, '***' COL_0369, LPAD(TAB_0087.COL_0370, ***, '***') COL_0370, NULL COL_0371, *** COL_0372, *** COL_0373, LPAD(TAB_0087.COL_0374, ***, '***') COL_0374, NULL COL_0375, *** COL_0376, *** COL_0377, *** COL_0318, COL_0342.COL_0331 COL_0378, COL_0342.COL_0319 COL_0319, COL_0344.COL_0201 COL_0379, COL_0342.COL_0162 COL_0380, TAB_0087.COL_0320 COL_0320, TAB_0087.COL_0321 COL_0321, COL_0342.COL_0320 COL_0381, COL_0342.COL_0321 COL_0382, '***' COL_0383, '***' COL_0384, TAB_0087.COL_0385 COL_0385, COL_0344.COL_0386 COL_0387, COL_0342.COL_0323 COL_0323, TAB_0087.COL_0388 COL_0388, COL_0344.COL_0389 COL_0390, COL_0342.COL_0324 COL_0324, TAB_0087.COL_0325 COL_0325, TAB_0087.COL_0326 COL_0326, COL_0342.COL_0327 COL_0327, TAB_0087.COL_0214 COL_0214, *** COL_0333, *** COL_0334, TAB_0087.COL_0335 COL_0335, COL_0342.COL_0336, COL_0344.COL_0391, COL_0344.COL_0033, COL_0342.COL_0337, COL_0342.COL_0338, NULL COL_0207 FROM TAB_0082 COL_0342, TAB_0086 TAB_0087, TAB_0088 COL_0344, TAB_0064 PKG_0011, TAB_0084 PKG_0009 WHERE TAB_0087.COL_0032 = COL_0342.COL_0032 AND TAB_0087.COL_0039 = COL_0342.COL_0039 AND TAB_0087.COL_0267 = COL_0342.COL_0267 AND TAB_0087.COL_0268 = COL_0342.COL_0268 AND TAB_0087.COL_0269 = COL_0342.COL_0269 AND TAB_0087.COL_0273 = COL_0342.COL_0273 AND TAB_0087.COL_0274 = COL_0342.COL_0274 AND TAB_0087.COL_0270 = COL_0342.COL_0270 AND TAB_0087.COL_0271 = COL_0342.COL_0271 AND TAB_0087.COL_0272 = COL_0342.COL_0272 AND COL_0342.COL_0274 = COL_0344.COL_0274 AND TAB_0087.COL_0236 = PKG_0011.COL_0236(+) AND COL_0342.ROT_0018 = PKG_0009.ROT_0018(+)) SELECT I.* FROM TAB_0087 I UNION ALL SELECT S.* FROM TAB_0089 S UNION ALL SELECT UNIQUE '***' COL_0341, COL_0342.COL_0266 COL_0266, COL_0342.COL_0032 COL_0032, COL_0342.COL_0039 COL_0039, COL_0342.COL_0267 COL_0267, COL_0342.COL_0268 COL_0268, COL_0342.COL_0269 COL_0269, COL_0342.COL_0273 COL_0273, COL_0342.COL_0274 COL_0274, COL_0342.COL_0270 COL_0270, COL_0342.COL_0271 COL_0271, COL_0342.COL_0272 COL_0272, *** COL_0343, COL_0344.COL_0244 COL_0244, COL_0344.COL_0245 COL_0245, COL_0344.COL_0246 COL_0246, COL_0342.COL_0275 COL_0275, COL_0342.COL_0068 COL_0068, COL_0342.COL_0276 COL_0276, COL_0342.ROT_0018 ROT_0018, COL_0342.COL_0277 COL_0277, COL_0342.COL_0278 COL_0278, COL_0342.COL_0328 COL_0328, COL_0342.COL_0279 COL_0279, COL_0342.COL_0279 COL_0345, COL_0342.COL_0280 COL_0280, COL_0342.COL_0281 COL_0281, COL_0342.COL_0282 COL_0346, COL_0342.COL_0283 COL_0283, COL_0342.COL_0284 COL_0284, COL_0342.COL_0285 COL_0285, COL_0342.COL_0286 COL_0286, COL_0342.COL_0287 COL_0287, COL_0342.COL_0288 COL_0288, COL_0342.COL_0289 COL_0289, COL_0342.COL_0290 COL_0290, COL_0342.COL_0291 COL_0291, COL_0342.COL_0292 COL_0292, COL_0342.COL_0329 COL_0329, COL_0342.COL_0330 COL_0330, COL_0342.COL_0293 COL_0293, COL_0342.COL_0294 COL_0294, COL_0342.COL_0295 COL_0295, COL_0342.COL_0296 COL_0296, '***' COL_0347, COL_0342.COL_0297 COL_0297, COL_0342.COL_0298 COL_0298, COL_0342.COL_0299 COL_0299, COL_0342.COL_0300 COL_0300, COL_0342.COL_0301 COL_0301, COL_0342.COL_0302 COL_0302, COL_0342.COL_0226 COL_0226, COL_0342.COL_0303 COL_0303, COL_0342.COL_0304 COL_0304, COL_0342.COL_0227 COL_0227, COL_0342.COL_0305 COL_0305, *** COL_0348, *** COL_0349, *** COL_0350, *** COL_0351, *** COL_0352, *** COL_0353, *** COL_0354, *** COL_0233, '***' COL_0209, '***' COL_0210, '***' COL_0218, NULL COL_0355, '***' COL_0356, '***' COL_0357, '***' COL_0358, *** COL_0359, *** COL_0360, COL_0342.COL_0238 COL_0238, COL_0344.COL_0361 COL_0361, *** COL_0362, *** COL_0363, *** COL_0364, '***' COL_0365, COL_0342.COL_0162 COL_0162, COL_0342.COL_0306 COL_0366, COL_0342.COL_0307 COL_0367, COL_0342.COL_0308 COL_0368, COL_0342.COL_0309 COL_0309, COL_0342.COL_0310 COL_0310, COL_0342.COL_0311 COL_0311, COL_0342.COL_0312 COL_0312, COL_0342.COL_0313 COL_0313, COL_0342.COL_0314 COL_0314, COL_0342.COL_0315 COL_0315, '***' COL_0369, LPAD(COL_0342.COL_0316, ***, '***') COL_0370, NULL COL_0371, *** COL_0372, *** COL_0373, LPAD(COL_0342.COL_0317, ***, '***') COL_0374, NULL COL_0375, *** COL_0376, *** COL_0377, COL_0342.COL_0318 COL_0318, COL_0342.COL_0331 COL_0378, COL_0342.COL_0319 COL_0319, COL_0344.COL_0201 COL_0379, COL_0342.COL_0162 COL_0380, '***' COL_0320, NULL COL_0321, COL_0342.COL_0320 COL_0381, COL_0342.COL_0321 COL_0382, '***' COL_0383, COL_0342.COL_0322 COL_0384, *** COL_0385, COL_0344.COL_0386 COL_0387, COL_0342.COL_0323 COL_0323, '***' COL_0388, COL_0344.COL_0389 COL_0390, COL_0342.COL_0324 COL_0324, COL_0342.COL_0325 COL_0325, COL_0342.COL_0326 COL_0326, COL_0342.COL_0327 COL_0327, COL_0342.COL_0214 COL_0214, COL_0342.COL_0333 COL_0333, COL_0342.COL_0334 COL_0334, COL_0342.COL_0335 COL_0335, COL_0342.COL_0336, COL_0344.COL_0391, COL_0344.COL_0033, COL_0342.COL_0337, COL_0342.COL_0338, NULL COL_0207 FROM TAB_0082 COL_0342, TAB_0088 COL_0344, TAB_0084 PKG_0009 WHERE COL_0342.COL_0274 = COL_0344.COL_0274 AND COL_0342.ROT_0018 = PKG_0009.ROT_0018(+) AND NOT EXISTS (SELECT '***' FROM TAB_0087 I WHERE COL_0342.COL_0032 = I.COL_0032 AND COL_0342.COL_0039 = I.COL_0039 AND COL_0342.COL_0267 = I.COL_0267 AND COL_0342.COL_0268 = I.COL_0268 AND COL_0342.COL_0269 = I.COL_0269 AND COL_0342.COL_0273 = I.COL_0273 AND COL_0342.COL_0274 = I.COL_0274 AND COL_0342.COL_0270 = I.COL_0270 AND COL_0342.COL_0271 = I.COL_0271 AND COL_0342.COL_0272 = I.COL_0272) AND NOT EXISTS (SELECT '***' FROM TAB_0089 I WHERE COL_0342.COL_0032 = I.COL_0032 AND COL_0342.COL_0039 = I.COL_0039 AND COL_0342.COL_0267 = I.COL_0267 AND COL_0342.COL_0268 = I.COL_0268 AND COL_0342.COL_0269 = I.COL_0269 AND COL_0342.COL_0273 = I.COL_0273 AND COL_0342.COL_0274 = I.COL_0274 AND COL_0342.COL_0270 = I.COL_0270 AND COL_0342.COL_0271 = I.COL_0271 AND COL_0342.COL_0272 = I.COL_0272) ORDER BY 9, 12, 8, 5, 3, 23, 88, 43, 30, 5, 51
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| wait | 364.190994 | 49.2 | 322,865 | |
| cpu | 104.205928 | 14.1 | 1 | |
| unaccounted-for | 98.163214 | 13.3 | 128 | |
| wait | 82.615851 | 11.2 | 5,357 | |
| wait | 55.084930 | 7.4 | 7,169 | |
| cpu | 16.721454 | 2.3 | 126 | |
| wait | 12.718013 | 1.7 | 1,019 | |
| wait | 7.137210 | 1.0 | 2,744 | |
| cpu | 0.011193 | 0.0 | 1 | |
| wait | 0.002383 | 0.0 | 3 | |
| recursive | 0.001436 | 0.0 | ||
| wait | 0.000356 | 0.0 | 2 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.012072 | 0.021011 | 0 | 12 | 0 | 0 | 1 |
| EXEC | 1 | 104.205928 | 688.658892 | 3,358,274 | 7,253,288 | 142,372 | 0 | 0 |
| FETCH | 126 | 16.721454 | 52.173059 | 169,783 | 273,715 | 21 | 63,000 | 0 |
Recursive SQL executed by this statement
| # | Duration (s) | Text |
|---|---|---|
| 113 | 0.001 | select default$ from col$ where rowid=:1 |
#6 · COMMIT
sql_id 7j4pr906pvfwdhv 224246669Text
COMMIT
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.149443 | 59.0 | 41 | |
| unaccounted-for | 0.103600 | 40.9 | 89 | |
| cpu | 0.000033 | 0.0 | 7 | |
| cpu | 0.000022 | 0.0 | 41 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 7 | 0.000033 | 0.000064 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 41 | 0.149443 | 0.252987 | 0 | 0 | 39 | 0 | 0 |
| CLOSE | 41 | 0.000022 | 0.000047 | 0 | 0 | 0 | 0 | 0 |
#7 · DELETE
sql_id c1bqf8upvjwpthv 2881024697Text
DELETE FROM TAB_0049 A WHERE A.COL_0086 = :B1
- 1 operation 1 (DELETE TAB_0049) has no object of its own in the text
- 2 IDX_0034 does not appear in the text; it comes from a view, a synonym or recursive SQL (operation 2)
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 55.010146 | 53.5 | 1 | |
| unaccounted-for | 41.699323 | 40.5 | 3 | |
| wait | 5.206170 | 5.1 | 1,656 | |
| wait | 0.501037 | 0.5 | 204 | |
| wait | 0.402370 | 0.4 | 146 | |
| wait | 0.052671 | 0.1 | 2 | |
| wait | 0.033119 | 0.0 | 2 | |
| wait | 0.000448 | 0.0 | 13 | |
| cpu | 0.000062 | 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.000062 | 0.000099 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 55.010146 | 102.905247 | 66,988 | 20,280 | 13,153,243 | 2,953,545 | 1 |
| CLOSE | 1 | 0.000001 | 0.000001 | 0 | 0 | 0 | 0 | 0 |
Execution plan 3190475110
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 · DELETE TAB_0049 98.1% of time · 17.8% of logical reads
Wrote 66,842 blocks to TEMP: the PGA workarea was not enough. - 2 Id 2 · INDEX RANGE SCAN IDX_0034 1.9% of time · 82.2% of logical reads
Scans a wide range of the index: check the selectivity and the column order.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 100.952599 | 98.1 | 3,607 | 17.8 | 66,988 | 66,842 | 102.904714 | 20,280 | |||||
| 2 | 2 | 2,953,545 | 2,943,270 | 1.952115 | 1.9 | 16,673 | 82.2 | 0 | 0 | 1.952115 | 16,673 | 9,579 | 201288 |
Delete
DELETE
Deletes the rows returned by the row source below.
- Good when
- Few rows, found through an index.
- Bad when
- Too many rows; an unindexed foreign key on the child table locks the whole table.
- In the plan, check
- Rows of the row source below.
Index range scan
INDEX RANGE SCAN
Goes down to the first leaf block of the range and walks, in order, the leaf blocks within the range set by the access predicate.
- Good when
- Narrow range: the access predicate uses the leading index columns with equality and few keys remain.
- Bad when
- Wide range (many leaf blocks), a predicate that does not use the leading index column (it becomes a filter predicate inside the index), or many executions as the inner of a NESTED LOOPS. If the TABLE ACCESS above discards almost everything, the index is missing the filter's column.
- In the plan, check
- Rows returned and self LIO, compared with those of the table operation right above.
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.
#8 · UPDATE
sql_id a4tzy6psxru35hv 1910237285Text
update seq$ set increment$=:2,minvalue=:3,maxvalue=:4,cycle#=:5,order$=:6,cache=:7,highwater=:8,audit$=:9,flags=:10 where obj#=:1
- 1 I_SEQ1 does not appear in the text; it comes from a view, a synonym or recursive SQL (operation 2)
- 2 operation 1 (UPDATE SEQ$) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.750376 | 57.2 | 2,631 | |
| unaccounted-for | 0.559023 | 42.6 | 5,265 | |
| cpu | 0.001464 | 0.1 | 2,631 | |
| cpu | 0.000256 | 0.0 | 3 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 3 | 0.000256 | 0.000416 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2,631 | 0.750376 | 1.307956 | 0 | 2,633 | 5,302 | 2,631 | 1 |
| CLOSE | 2,631 | 0.001464 | 0.002747 | 0 | 0 | 0 | 0 | 0 |
Execution plan 89955185
From the STAT lines in the trace; plan written 3 times, showing the last one.
Where the plan spends time by each operation's own value, without that of the operations below it
- 1 Id 2 · INDEX UNIQUE SCAN I_SEQ1 3.1% of time · 100.0% of logical reads
- 2 Id 1 · UPDATE SEQ$ 96.9% of time · 0.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 | 2 | 0 | 0.000156 | 96.9 | 0 | 0.0 | 0 | 0 | 0.000161 | 1 | |||||
| 2 | 1 | 1 | 1 | 0.000005 | 3.1 | 1 | 100.0 | 0 | 0 | 0.000005 | 1 | 0 | 79 |
Update
UPDATE
Updates the rows returned by the row source below.
- Good when
- Few rows, found through an index.
- Bad when
- Too many rows from the row source below; the table's indexes and triggers add up.
- In the plan, check
- Rows of the row source below.
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.
#9 · INSERT
sql_id cm2m46jyu6a10hv 2107844640Text
INSERT INTO TAB_0069 (COL_0247, COL_0064, COL_0248, COL_0249, COL_0105, ROT_0008,COL_0044, COL_0250) VALUES (:B8 , :B7 , :B6 , :B5 , :B4 , :B3 ,:B2 , :B1 )
- 1 operation 1 (LOAD TABLE CONVENTIONAL) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| wait | 0.308187 | 89.7 | 47 | |
| cpu | 0.023448 | 6.8 | 43 | |
| unaccounted-for | 0.011704 | 3.4 | 87 | |
| cpu | 0.000071 | 0.0 | 1 | |
| cpu | 0.000063 | 0.0 | 43 | |
| wait | 0.000011 | 0.0 | 2 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000071 | 0.000114 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 43 | 0.023448 | 0.343266 | 47 | 3 | 546 | 43 | 1 |
| CLOSE | 43 | 0.000063 | 0.000104 | 0 | 0 | 0 | 0 | 0 |
Execution plan 508576461
From the STAT lines in the trace.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0.007791 | 100.0 | 1 | 100.0 | 2 | 0 | 0.007791 | 1 |
Conventional insert
LOAD TABLE CONVENTIONAL
Inserts the rows into the table through the regular INSERT path.
- Good when
- Everyday inserts.
- Bad when
- The table's triggers, indexes and constraints add cost here; for large loads, direct-path mode (APPEND) writes faster.
- In the plan, check
- Self time (s) and the statement's waits.
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.
#10 · SELECT
sql_id 70uypyj7247nzhv 1310858911Text
SELECT COL_0401 FROM TAB_009212 WHERE COL_0204 = :B5 AND COL_0032 = :B4 AND COL_0039 = :B3 AND COL_0398 = :B2 AND COL_0235 = :B1
- 1 TAB_0092, table of index IDX_0056: plan operation 2
- 2 TAB_0092: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.108749 | 51.7 | 868 | |
| unaccounted-for | 0.098132 | 46.6 | 2,605 | |
| cpu | 0.002996 | 1.4 | 868 | |
| cpu | 0.000426 | 0.2 | 868 | |
| cpu | 0.000220 | 0.1 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000220 | 0.000362 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 868 | 0.108749 | 0.203343 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 868 | 0.002996 | 0.005930 | 0 | 970 | 0 | 102 | 0 |
| CLOSE | 868 | 0.000426 | 0.000888 | 0 | 0 | 0 | 0 | 0 |
Execution plan 3055701094
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 2 · INDEX UNIQUE SCAN IDX_0056 57.1% of time · 50.0% of logical reads
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0092 42.9% of time · 50.0% of logical reads
Visits the table row by row from the index: unselective index or missing the columns the filter uses.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0.000006 | 42.9 | 1 | 50.0 | 0 | 0 | 0.000014 | 2 | 1 | 192622 | ||
| 2 | 1 | 1 | 1 | 0.000008 | 57.1 | 1 | 50.0 | 0 | 0 | 0.000008 | 1 | 0 | 200566 |
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.
#11 · DELETE
sql_id 5ngcz3h95ampnhv 307580596Text
DELETE FROM TAB_0035 WHERE COL_0086 = :B1
- 1 operation 1 (DELETE TAB_0035) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.072850 | 43.5 | 1 | |
| unaccounted-for | 0.061121 | 36.5 | 3 | |
| recursive | 0.024826 | 14.8 | ||
| wait | 0.008612 | 5.1 | 2 | |
| cpu | 0.000177 | 0.1 | 1 | |
| cpu | 0.000002 | 0.0 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000177 | 0.000299 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.083011 | 0.167286 | 4 | 2,462 | 16,905 | 1 | 1 |
| CLOSE | 1 | 0.000002 | 0.000003 | 0 | 0 | 0 | 0 | 0 |
Execution plan 2998992308
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 · DELETE TAB_0035 100.0% of time · 100.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 | 0 | 0.165115 | 100.0 | 2,461 | 100.0 | 4 | 0 | 0.165136 | 2,462 | |||||
| 2 | 1 | 1 | 0.000021 | 0.0 | 1 | 0.0 | 0 | 0 | 0.000021 | 1 | 0 | 201278 |
Delete
DELETE
Deletes the rows returned by the row source below.
- Good when
- Few rows, found through an index.
- Bad when
- Too many rows; an unindexed foreign key on the child table locks the whole table.
- In the plan, check
- Rows of the row source below.
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
#12 · INSERT
sql_id 5cn2qgqk0s6mxhv 2752256637Text
INSERT INTO TAB_0027 (COL_0104, COL_0064, DATA, COL_0105, COL_0106) VALUES (SEQ_003.NEXTVAL, :B3 , SYSDATE, :B2 , :B1 )
- 1 operation 1 (LOAD TABLE CONVENTIONAL) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| wait | 0.154872 | 93.9 | 26 | |
| cpu | 0.005830 | 3.5 | 12 | |
| unaccounted-for | 0.002957 | 1.8 | 25 | |
| recursive | 0.000771 | 0.5 | ||
| wait | 0.000378 | 0.2 | 15 | |
| cpu | 0.000073 | 0.0 | 1 | |
| cpu | 0.000011 | 0.0 | 12 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000073 | 0.000116 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 12 | 0.006284 | 0.164758 | 26 | 2 | 121 | 12 | 1 |
| CLOSE | 12 | 0.000011 | 0.000018 | 0 | 0 | 0 | 0 | 0 |
Execution plan 3495871077
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 · LOAD TABLE CONVENTIONAL 99.9% of time · 100.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 | 0 | 0.026417 | 99.9 | 1 | 100.0 | 4 | 0 | 0.026440 | 1 | |||||
| 2 | 1 | 0.000023 | 0.1 | 0 | 0.0 | 0 | 0 | 0.000023 | 0 | 190035 |
Conventional insert
LOAD TABLE CONVENTIONAL
Inserts the rows into the table through the regular INSERT path.
- Good when
- Everyday inserts.
- Bad when
- The table's triggers, indexes and constraints add cost here; for large loads, direct-path mode (APPEND) writes faster.
- In the plan, check
- Self time (s) and the statement's waits.
Sequence (NEXTVAL)
SEQUENCE
Generates the next values of a sequence.
- Good when
- Cache sized for the volume.
- Bad when
- Small cache with heavy use: waits on enq: SQ and on the dictionary.
- In the plan, check
- The statement's waits, in its profile.
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
#13 · DELETE
sql_id 0pp5x87ncmkzshv 3905539064Text
DELETE FROM TAB_0050 WHERE COL_0086 = :B1 AND ROWNUM <= ***
- 1 IDX_0035 does not appear in the text; it comes from a view, a synonym or recursive SQL (operation 3)
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.034567 | 39.6 | 1 | |
| unaccounted-for | 0.027194 | 31.2 | 3 | |
| wait | 0.025351 | 29.0 | 4 | |
| cpu | 0.000185 | 0.2 | 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.000185 | 0.000305 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.034567 | 0.086991 | 4 | 13,358 | 0 | 0 | 1 |
| CLOSE | 1 | 0.000001 | 0.000002 | 0 | 0 | 0 | 0 | 0 |
Execution plan 1076172561
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 3 · INDEX RANGE SCAN IDX_0035 100.0% of time · 100.0% of logical reads
Scans a wide range of the index: check the selectivity and the column order.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 0.000004 | 0.0 | 0 | 0.0 | 4 | 0 | 0.085908 | 13,358 | ||||||
| 2 | 0 | 0.000009 | 0.0 | 0 | 0.0 | 4 | 0 | 0.085904 | 13,358 | ||||||
| 3 | 1 | 0 | 1 | 0.085895 | 100.0 | 13,358 | 100.0 | 4 | 0 | 0.085895 | 13,358 | 2 | 201349 |
Delete
DELETE
Deletes the rows returned by the row source below.
- Good when
- Few rows, found through an index.
- Bad when
- Too many rows; an unindexed foreign key on the child table locks the whole table.
- In the plan, check
- Rows of the row source below.
Stop after N rows
COUNT STOPKEY
Stops reading after N rows (ROWNUM <= N or FETCH FIRST).
- Good when
- Stops work early when rows already arrive in the right order.
- Bad when
- When there is a full sort below: everything is read before the cutoff.
- In the plan, check
- Rows from the operations below.
Index range scan
INDEX RANGE SCAN
Goes down to the first leaf block of the range and walks, in order, the leaf blocks within the range set by the access predicate.
- Good when
- Narrow range: the access predicate uses the leading index columns with equality and few keys remain.
- Bad when
- Wide range (many leaf blocks), a predicate that does not use the leading index column (it becomes a filter predicate inside the index), or many executions as the inner of a NESTED LOOPS. If the TABLE ACCESS above discards almost everything, the index is missing the filter's column.
- In the plan, check
- Rows returned and self LIO, compared with those of the table operation right above.
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.
#14 · SELECT
sql_id aggvkb3vxk338hv 4158196840Text
SELECT A.COL_0120, A.COL_0121, A.COL_0113, B.COL_0125, C.COL_0126, C.COL_0127, C.COL_0128, A.COL_0129, A.COL_0130, B.COL_0131, ROWNUM FROM TAB_0032 A, TAB_0033 B, TAB_0034 C WHERE B.COL_0120 = :B3 AND B.COL_0121 = :B2 AND B.COL_0113 = :B1 AND A.COL_0120 = B.COL_0120 AND A.COL_0121 = B.COL_0121 AND A.COL_0113 = B.COL_0113 AND C.COL_0125 = B.COL_0125
- 1 operation 2 (NESTED LOOPS) has no object of its own in the text
- 2 operation 1 (COUNT) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.047491 | 55.0 | 621 | |
| unaccounted-for | 0.033690 | 39.0 | 1,864 | |
| cpu | 0.004879 | 5.6 | 621 | |
| cpu | 0.000264 | 0.3 | 621 | |
| cpu | 0.000099 | 0.1 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000099 | 0.000158 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 621 | 0.047491 | 0.077781 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 621 | 0.004879 | 0.008027 | 0 | 2,732 | 0 | 0 | 0 |
| CLOSE | 621 | 0.000264 | 0.000457 | 0 | 0 | 0 | 0 | 0 |
Execution plan 1908278932
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 2 · NESTED LOOPS 40.0% of time · 0.0% of logical reads
- 2 Id 1 · COUNT 30.0% of time · 0.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 | 2 | 0 | 0.000003 | 30.0 | 0 | 0.0 | 0 | 0 | 0.000010 | 0 | |||||
| 2 | 1 | 0 | 1 | 0.000004 | 40.0 | 0 | 0.0 | 0 | 0 | 0.000007 | 0 | 3 | |||
| 3 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000003 | 0 | 3 | ||||
| 4 | 0 | 1 | 0.000001 | 10.0 | 0 | 0.0 | 0 | 0 | 0.000003 | 0 | 2 | ||||
| 5 | 0 | 1 | 0.000001 | 10.0 | 0 | 0.0 | 0 | 0 | 0.000002 | 0 | 2 | 190916 | |||
| 6 | 0 | 1 | 0.000001 | 10.0 | 0 | 0.0 | 0 | 0 | 0.000001 | 0 | 1 | 199273 | |||
| 7 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 190918 | |||
| 8 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 199275 | |||
| 9 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 199274 | |||
| 10 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 1 | 190917 |
Row numbering
COUNT
Numbers the rows (ROWNUM).
- Good when
- No cost of its own.
- Bad when
- Almost never.
Nested loops join
NESTED LOOPS
For each row of the outer (driving) row source, executes the inner row source.
- Good when
- Few rows in the outer and selective index access in the inner. Returns the first rows quickly (good for FIRST_ROWS).
- Bad when
- Many rows in the outer: the inner runs thousands of times. It usually comes from an underestimated cardinality in the outer; a HASH JOIN would read each side only once.
- In the plan, check
- Exec of the inner operations and, in the outer, Estimated compared with Rows/exec.
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.
Index range scan
INDEX RANGE SCAN
Goes down to the first leaf block of the range and walks, in order, the leaf blocks within the range set by the access predicate.
- Good when
- Narrow range: the access predicate uses the leading index columns with equality and few keys remain.
- Bad when
- Wide range (many leaf blocks), a predicate that does not use the leading index column (it becomes a filter predicate inside the index), or many executions as the inner of a NESTED LOOPS. If the TABLE ACCESS above discards almost everything, the index is missing the filter's column.
- In the plan, check
- Rows returned and self LIO, compared with those of the table operation right above.
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.
#15 · SELECT
sql_id g6km04yyxuhtwhv 3185394492Text
SELECT NVL(C.COL_0116,***), NVL(COL_0112, '***') FROM TAB_003212 C WHERE C.COL_0120 = :B3 AND C.COL_0121 = :B2 AND C.COL_0113 = :B1
- 1 TAB_0032: plan operation 1
- 2 TAB_0032, table of index IDX_0019: plan operation 2
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.045931 | 54.3 | 621 | |
| unaccounted-for | 0.035520 | 42.0 | 1,864 | |
| cpu | 0.002697 | 3.2 | 621 | |
| cpu | 0.000227 | 0.3 | 621 | |
| cpu | 0.000187 | 0.2 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000187 | 0.000326 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 621 | 0.045931 | 0.079058 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 621 | 0.002697 | 0.004772 | 0 | 1,640 | 0 | 546 | 0 |
| CLOSE | 621 | 0.000227 | 0.000406 | 0 | 0 | 0 | 0 | 0 |
Execution plan 2246748672
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 TAB_0032 60.0% of time · 0.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 IDX_0019 40.0% of time · 0.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 | 0 | 1 | 0.000003 | 60.0 | 0 | 0.0 | 0 | 0 | 0.000005 | 0 | 2 | 190916 | ||
| 2 | 2 | 0 | 1 | 0.000002 | 40.0 | 0 | 0.0 | 0 | 0 | 0.000002 | 0 | 1 | 199273 |
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.
#16 · SELECT
sql_id fdnsdx5rvuzbrhv 1874689399Text
SELECT DISTINCT a.COL_0056, a.COL_0057 FROM TAB_0013 a, (select distinct COL_0032,COL_0039 from TAB_0014) b WHERE b.COL_0032 = a.COL_0032 and b.COL_0039 = nvl(trim(a.COL_0039),b.COL_0039) AND ((a.COL_0032 = '***' AND '***' = '***' and a.ROT_0008 = '***' )OR ('***' = '***' AND a.ROT_0008 = '***')) ORDER BY 1, 6
- 1 operation 6 (LOAD AS SELECT) has no object of its own in the text
- 2 TAB_0016 does not appear in the text; it comes from a view, a synonym or recursive SQL (operation 23)
- 3 TAB_0017 does not appear in the text; it comes from a view, a synonym or recursive SQL (operation 26)
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.019388 | 31.8 | 2 | |
| unaccounted-for | 0.014445 | 23.7 | 10 | |
| recursive | 0.010390 | 17.0 | ||
| wait | 0.008608 | 14.1 | 1 | |
| cpu | 0.004513 | 7.4 | 2 | |
| cpu | 0.001200 | 2.0 | 4 | |
| wait | 0.001118 | 1.8 | 1 | |
| wait | 0.000442 | 0.7 | 2 | |
| wait | 0.000415 | 0.7 | 2 | |
| wait | 0.000409 | 0.7 | 6 | |
| wait | 0.000066 | 0.1 | 2 | |
| cpu | 0.000042 | 0.1 | 2 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0.025600 | 0.044120 | 0 | 54 | 0 | 0 | 1 |
| EXEC | 2 | 0.004513 | 0.014524 | 0 | 48 | 20 | 0 | 0 |
| FETCH | 4 | 0.001200 | 0.002322 | 2 | 150 | 2 | 2 | 0 |
| CLOSE | 2 | 0.000042 | 0.000070 | 0 | 0 | 0 | 0 | 0 |
Execution plan 3453167744
From the STAT lines in the trace; plan written 2 times, showing the last one.
Where the plan spends time by each operation's own value, without that of the operations below it
- 1 Id 6 · LOAD AS SELECT 24.6% of time · 0.0% of logical reads
Wrote 1 block to TEMP: the PGA workarea was not enough. - 2 Id 23 · TABLE ACCESS BY INDEX ROWID TAB_0016 1.7% of time · 18.2% of logical reads
Visits the table row by row from the index: unselective index or missing the columns the filter uses. - 3 Id 26 · TABLE ACCESS BY INDEX ROWID TAB_0017 1.0% of time · 18.2% of logical reads
Visits the table row by row from the index: unselective index or missing the columns the filter uses.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 0.000026 | 0.9 | 0 | 0.0 | 1 | 1 | 0.002843 | 99 | 4 | ||||
| 2 | 1 | 1 | 0.000163 | 5.4 | 0 | 0.0 | 1 | 1 | 0.002817 | 99 | 3 | ||||
| 3 | 1 | 1 | 0.000005 | 0.2 | 0 | 0.0 | 1 | 1 | 0.002654 | 99 | 2 | ||||
| 4 | 1 | 1 | 0.000004 | 0.1 | 0 | 0.0 | 1 | 1 | 0.002629 | 98 | 1 | 204006 | |||
| 5 | 1 | 0.000392 | 13.0 | 0 | 0.0 | 1 | 1 | 0.002625 | 98 | ||||||
| 6 | 1 | 0 | 0.000742 | 24.6 | 0 | 0.0 | 0 | 1 | 0.001335 | 24 | |||||
| 7 | 18 | 35 | 0.000002 | 0.1 | 0 | 0.0 | 0 | 0 | 0.000593 | 24 | 6 | 203872 | |||
| 8 | 18 | 35 | 0.000055 | 1.8 | 0 | 0.0 | 0 | 0 | 0.000591 | 24 | 6 | ||||
| 9 | 18 | 0.000054 | 1.8 | 0 | 0.0 | 0 | 0 | 0.000536 | 24 | ||||||
| 10 | 0 | 17 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000289 | 18 | 2 | ||||
| 11 | 18 | 18 | 0.000142 | 4.7 | 2 | 2.0 | 0 | 0 | 0.000142 | 2 | 2 | 190772 | |||
| 12 | 0 | 1 | 0.000172 | 5.7 | 16 | 16.2 | 0 | 0 | 0.000172 | 16 | 0 | 200905 | |||
| 13 | 18 | 18 | 0.000058 | 1.9 | 0 | 0.0 | 0 | 0 | 0.000193 | 6 | 2 | ||||
| 14 | 18 | 18 | 0.000054 | 1.8 | 2 | 2.0 | 0 | 0 | 0.000054 | 2 | 2 | 190772 | |||
| 15 | 18 | 1 | 0.000081 | 2.7 | 4 | 4.0 | 0 | 0 | 0.000081 | 4 | 0 | 200904 | |||
| 16 | 1 | 0.000015 | 0.5 | 0 | 0.0 | 1 | 0 | 0.000898 | 74 | ||||||
| 17 | 1 | 0.000015 | 0.5 | 0 | 0.0 | 1 | 0 | 0.000883 | 74 | ||||||
| 18 | 1 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 1 | 0 | 0.000616 | 48 | 4 | ||||
| 19 | 18 | 1 | 0.000062 | 2.1 | 0 | 0.0 | 1 | 0 | 0.000723 | 30 | 4 | ||||
| 20 | 18 | 1 | 0.000065 | 2.2 | 0 | 0.0 | 1 | 0 | 0.000632 | 26 | 3 | ||||
| 21 | 18 | 1 | 0.000138 | 4.6 | 0 | 0.0 | 1 | 0 | 0.000478 | 4 | 2 | ||||
| 22 | 18 | 1 | 0.000340 | 11.3 | 4 | 4.0 | 1 | 0 | 0.000340 | 4 | 2 | 4254951128 | |||
| 23 | 2 | 18 | 1 | 0.000050 | 1.7 | 18 | 18.2 | 0 | 0 | 0.000089 | 22 | 1 | 190772 | ||
| 24 | 18 | 1 | 0.000039 | 1.3 | 4 | 4.0 | 0 | 0 | 0.000039 | 4 | 0 | 198973 | |||
| 25 | 18 | 1 | 0.000029 | 1.0 | 4 | 4.0 | 0 | 0 | 0.000029 | 4 | 0 | 199137 | |||
| 26 | 3 | 1 | 1 | 0.000030 | 1.0 | 18 | 18.2 | 0 | 0 | 0.000030 | 18 | 1 | 190850 | ||
| 27 | 0 | 1 | 0.000001 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000238 | 24 | 3 | ||||
| 28 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000237 | 24 | 3 | ||||
| 29 | 18 | 1 | 0.000120 | 4.0 | 0 | 0.0 | 0 | 0 | 0.000143 | 2 | 2 | ||||
| 30 | 18 | 1 | 0.000023 | 0.8 | 2 | 2.0 | 0 | 0 | 0.000023 | 2 | 2 | 4254951128 | |||
| 31 | 0 | 1 | 0.000064 | 2.1 | 4 | 4.0 | 0 | 0 | 0.000103 | 22 | 0 | 198973 | |||
| 32 | 18 | 1 | 0.000039 | 1.3 | 18 | 18.2 | 0 | 0 | 0.000039 | 18 | 0 | 199137 | |||
| 33 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 1 | 190772 | |||
| 34 | 0 | 1 | 0.000001 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000014 | 2 | 1 | ||||
| 35 | 1 | 1 | 0.000005 | 0.2 | 1 | 1.0 | 0 | 0 | 0.000010 | 2 | 1 | 192144 | |||
| 36 | 1 | 1 | 0.000005 | 0.2 | 1 | 1.0 | 0 | 0 | 0.000005 | 1 | 0 | 198971 | |||
| 37 | 0 | 0.000002 | 0.1 | 0 | 0.0 | 0 | 0 | 0.000003 | 0 | ||||||
| 38 | 0 | 0.000001 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000001 | 0 | ||||||
| 39 | 0 | 35 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 2 | 4254951128 | |||
| 40 | 1 | 1 | 0.000020 | 0.7 | 1 | 1.0 | 0 | 0 | 0.000020 | 1 | 1 | 202288 |
Sort (ORDER BY)
SORT ORDER BY
Sorts the rows for the ORDER BY.
- Good when
- Few rows, in-memory sort.
- Bad when
- Many rows: the sort does not fit in the workarea and writes to TEMP. An index in the requested order can avoid the SORT, especially with ROWNUM or FETCH FIRST.
- In the plan, check
- PW above zero and Self time (s).
Duplicate removal by hash
HASH UNIQUE
Removes duplicate rows using an in-memory hash table.
- Good when
- Few distinct rows.
- Bad when
- Large volume; DISTINCT added to hide a join that multiplies rows.
- In the plan, check
- Rows before and after the operation, and PW.
Nested loops join
NESTED LOOPS
For each row of the outer (driving) row source, executes the inner row source.
- Good when
- Few rows in the outer and selective index access in the inner. Returns the first rows quickly (good for FIRST_ROWS).
- Bad when
- Many rows in the outer: the inner runs thousands of times. It usually comes from an underestimated cardinality in the outer; a HASH JOIN would read each side only once.
- In the plan, check
- Exec of the inner operations and, in the outer, Estimated compared with Rows/exec.
View or subquery
VIEW
Result of a view or subquery used as a row source by the operation above.
- Good when
- No cost of its own: the work is in the operations below.
- Bad when
- When it keeps the outer filter from being pushed into the view and the whole view is read.
- In the plan, check
- The operations below.
Materialized WITH
TEMP TABLE TRANSFORMATION
A WITH clause was written to a temporary table and is read later.
- Good when
- The WITH is used several times and is expensive to compute.
- Bad when
- The WITH is used only once: writing it and reading it back costs more.
- In the plan, check
- The LOAD AS SELECT operation below, and PW.
Direct-path insert
LOAD AS SELECT
Inserts in direct-path mode (APPEND or CREATE TABLE AS SELECT), writing above the high water mark (HWM).
- Good when
- Large loads.
- Bad when
- Locks the table against other writes until commit.
Duplicate removal by sort
SORT UNIQUE
Removes duplicate rows (DISTINCT, UNION, IN with a subquery) by sorting the result.
- Good when
- Few rows.
- Bad when
- Large volume; DISTINCT added to hide a join that multiplies rows.
- In the plan, check
- Rows before and after the operation, and PW.
Union of the branches (UNION ALL)
UNION-ALL
Returns each branch's results one after the other, without removing duplicates.
- Good when
- No cost of its own.
- Bad when
- Branches that read the same table several times.
- In the plan, check
- Each branch below.
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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.
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.
Filter
FILTER
Applies a predicate to the rows of the row source below. With two row sources, executes the second (a subquery that was not unnested) for each row of the first.
- Good when
- A single row source, or a subquery executed only a few times (FILTER caches the results already computed).
- Bad when
- Subquery executed row by row (high Exec on the second row source): allowing unnesting or rewriting it as a join usually solves it.
- In the plan, check
- Exec of the second row source.
Index range scan
INDEX RANGE SCAN
Goes down to the first leaf block of the range and walks, in order, the leaf blocks within the range set by the access predicate.
- Good when
- Narrow range: the access predicate uses the leading index columns with equality and few keys remain.
- Bad when
- Wide range (many leaf blocks), a predicate that does not use the leading index column (it becomes a filter predicate inside the index), or many executions as the inner of a NESTED LOOPS. If the TABLE ACCESS above discards almost everything, the index is missing the filter's column.
- In the plan, check
- Rows returned and self LIO, compared with those of the table operation right above.
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
#17 · SELECT
sql_id 7mp3qb0atz09bhv 362774827Text
SELECT *** COL_0211, LPAD(COL_0212, ***, '***') COL_0213, COL_0214, COL_0215, COL_0216, COL_0217.COL_0210, COL_0217.COL_0218, COL_0219.COL_0207 COL_0220, COL_0221.COL_0207 COL_0222, NULL COL_0202, COL_0223.COL_0224, COL_0223.COL_0173, COL_0223.COL_0225, COL_0223.COL_0226, COL_0223.COL_0227, COL_0223.COL_0057, PKG_0007.COL_0228, PKG_0007.COL_0229 FROM TAB_0060 COL_0223, TAB_0061 COL_0217, TAB_006213 COL_0219, TAB_006213 COL_0221, TAB_0063 PKG_0007 WHERE COL_0223.COL_0032 = :B2 AND COL_0223.COL_0039 = :B1 AND COL_0223.COL_0224 = '***' AND COL_0223.COL_0230 = COL_0219.COL_0231 AND COL_0223.COL_0232 = COL_0221.COL_0231 AND COL_0223.COL_0233 = COL_0217.COL_0233 AND COL_0223.COL_0162 = PKG_0007.COL_0162(+) UNION ALL SELECT *** COL_0211, LPAD(COL_0212, ***, '***') COL_0213, COL_0214, COL_0215, COL_0216, COL_0217.COL_0210, COL_0217.COL_0218, NULL, NULL, NULL, COL_0223.COL_0224, COL_0223.COL_0173, COL_0223.COL_0225, COL_0223.COL_0226, COL_0223.COL_0227, COL_0223.COL_0057, PKG_0007.COL_0228, PKG_0007.COL_0229 FROM TAB_0060 COL_0223, TAB_0061 COL_0217, TAB_0063 PKG_0007 WHERE COL_0223.COL_0032 = :B2 AND COL_0223.COL_0039 = :B1 AND COL_0223.COL_0224 = '***' AND COL_0223.COL_0230 IS NULL AND COL_0223.COL_0233 = COL_0217.COL_0233 AND COL_0223.COL_0162 = PKG_0007.COL_0162(+) UNION ALL SELECT *** COL_0211, LPAD(COL_0212, ***, '***') COL_0213, COL_0214, COL_0215, COL_0216, NULL, NULL, COL_0219.COL_0207 COL_0220, COL_0221.COL_0207 COL_0222, NULL, COL_0223.COL_0224, COL_0223.COL_0173, COL_0223.COL_0225, COL_0223.COL_0226, COL_0223.COL_0227, COL_0223.COL_0057, PKG_0007.COL_0228, PKG_0007.COL_0229 FROM TAB_0060 COL_0223, TAB_006213 COL_0219, TAB_006213 COL_0221, TAB_0063 PKG_0007 WHERE COL_0223.COL_0032 = :B2 AND COL_0223.COL_0039 = :B1 AND COL_0223.COL_0224 = '***' AND COL_0223.COL_0233 IS NULL AND COL_0223.COL_0232 = COL_0221.COL_0231 AND COL_0223.COL_0230 = COL_0219.COL_0231 AND COL_0223.COL_0162 = PKG_0007.COL_0162(+) UNION ALL SELECT *** COL_0211, LPAD(COL_0212, ***, '***') COL_0213, COL_0214, COL_0215, COL_0216, '***', COL_0234.COL_0235, NULL, NULL, NULL, COL_0223.COL_0224, COL_0223.COL_0173, COL_0223.COL_0225, COL_0223.COL_0226, COL_0223.COL_0227, COL_0223.COL_0057, PKG_0007.COL_0228, PKG_0007.COL_0229 FROM TAB_0060 COL_0223, TAB_0064 COL_0234, TAB_0063 PKG_0007 WHERE COL_0223.COL_0032 = :B2 AND COL_0223.COL_0039 = :B1 AND COL_0223.COL_0224 = '***' AND COL_0223.COL_0236 = COL_0234.COL_0236 AND COL_0223.COL_0162 = PKG_0007.COL_0162(+) UNION ALL SELECT *** COL_0211, LPAD(COL_0212, ***, '***') COL_0213, COL_0214, COL_0215, COL_0216, NULL, NULL, NULL, NULL, COL_0237.COL_0202, COL_0223.COL_0224, COL_0223.COL_0173, COL_0223.COL_0225, COL_0223.COL_0226, COL_0223.COL_0227, COL_0223.COL_0057, PKG_0007.COL_0228, PKG_0007.COL_0229 FROM TAB_0060 COL_0223, TAB_0065 COL_0237, TAB_0063 PKG_0007 WHERE COL_0223.COL_0032 = :B2 AND COL_0223.COL_0039 = :B1 AND COL_0223.COL_0224 = '***' AND (COL_0223.COL_0173 IS NOT NULL OR COL_0223.COL_0226 IS NOT NULL) AND (COL_0223.COL_0225 IS NOT NULL OR COL_0223.COL_0227 IS NOT NULL) AND COL_0223.COL_0238 = COL_0237.COL_0238 AND COL_0223.COL_0162 = PKG_0007.COL_0162(+) UNION ALL SELECT *** COL_0211, LPAD(COL_0212, ***, '***') COL_0213, COL_0214, COL_0215, COL_0216, NULL, NULL, NULL, NULL, NULL, COL_0223.COL_0224, COL_0223.COL_0173, COL_0223.COL_0225, COL_0223.COL_0226, COL_0223.COL_0227, COL_0223.COL_0057, PKG_0007.COL_0228, PKG_0007.COL_0229 FROM TAB_0060 COL_0223, TAB_0063 PKG_0007 WHERE COL_0223.COL_0032 = :B2 AND COL_0223.COL_0039 = :B1 AND COL_0223.COL_0224 = '***' AND COL_0223.COL_0238 IS NULL AND (COL_0223.COL_0173 IS NOT NULL OR COL_0223.COL_0226 IS NOT NULL) AND (COL_0223.COL_0225 IS NOT NULL OR COL_0223.COL_0227 IS NOT NULL) AND COL_0223.COL_0162 = PKG_0007.COL_0162(+) UNION ALL SELECT *** COL_0211, LPAD(COL_0212, ***, '***') COL_0213, COL_0214, COL_0215, COL_0216, NULL, NULL, NULL, NULL, NULL, COL_0223.COL_0224, ***, ***, ***, ***, COL_0223.COL_0057, PKG_0007.COL_0228, PKG_0007.COL_0229 FROM TAB_0060 COL_0223, TAB_0063 PKG_0007 WHERE COL_0223.COL_0224 = '***' AND COL_0223.COL_0032 = :B2 AND COL_0223.COL_0039 = :B1 AND COL_0223.COL_0238 IS NULL AND COL_0223.COL_0173 IS NULL AND COL_0223.COL_0225 IS NULL AND COL_0223.COL_0226 IS NULL AND COL_0223.COL_0227 IS NULL AND COL_0223.COL_0162 = PKG_0007.COL_0162(+) UNION ALL SELECT *** COL_0211, LPAD(COL_0212, ***, '***') COL_0213, COL_0214, COL_0215, COL_0216, NULL, NULL, NULL, NULL, NULL, COL_0223.COL_0224, ***, ***, ***, ***, COL_0223.COL_0057, PKG_0007.COL_0228, PKG_0007.COL_0229 FROM TAB_0060 COL_0223, TAB_0063 PKG_0007 WHERE COL_0223.COL_0224 = '***' AND COL_0223.COL_0032 = :B2 AND COL_0223.COL_0039 = :B1 AND COL_0223.COL_0238 IS NULL AND COL_0223.COL_0173 IS NULL AND COL_0223.COL_0225 IS NULL AND COL_0223.COL_0226 IS NULL AND COL_0223.COL_0227 IS NULL AND COL_0223.COL_0162 = PKG_0007.COL_0162(+) ORDER BY 6, 8, 5, 1
- 1 TAB_0062, table of index IDX_0045: plan operation 36
- 2 IDX_0045 does not appear in the text; it comes from a view, a synonym or recursive SQL (operation 37)
- 3 TAB_0062: plan operation 35
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.009626 | 41.2 | 7 | |
| cpu | 0.009587 | 41.1 | 2 | |
| cpu | 0.003153 | 13.5 | 1 | |
| cpu | 0.000975 | 4.2 | 2 | |
| cpu | 0.000002 | 0.0 | 2 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.003153 | 0.005158 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2 | 0.009587 | 0.016618 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0.000975 | 0.001563 | 0 | 204 | 0 | 52 | 0 |
| CLOSE | 2 | 0.000002 | 0.000004 | 0 | 0 | 0 | 0 | 0 |
Execution plan 631057487
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 36 · INDEX UNIQUE SCAN IDX_0045 12.1% of time · 23.5% of logical reads
- 2 Id 37 · INDEX UNIQUE SCAN IDX_0045 6.3% of time · 23.5% of logical reads
- 3 Id 35 · TABLE ACCESS BY INDEX ROWID TAB_0062 7.7% of time · 21.6% of logical reads
Visits the table row by row from the index: unselective index or missing the columns the filter uses.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 26 | 25 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000741 | 102 | 43 | ||||
| 2 | 26 | 0.000151 | 16.6 | 0 | 0.0 | 0 | 0 | 0.000895 | 102 | ||||||
| 3 | 0 | 1 | 0.000003 | 0.3 | 0 | 0.0 | 0 | 0 | 0.000066 | 1 | 3 | ||||
| 4 | 0 | 1 | 0.000002 | 0.2 | 0 | 0.0 | 0 | 0 | 0.000063 | 1 | 3 | ||||
| 5 | 0 | 1 | 0.000001 | 0.1 | 0 | 0.0 | 0 | 0 | 0.000061 | 1 | 2 | ||||
| 6 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000060 | 1 | 1 | ||||
| 7 | 0 | 1 | 0.000002 | 0.2 | 0 | 0.0 | 0 | 0 | 0.000060 | 1 | 1 | ||||
| 8 | 0 | 1 | 0.000004 | 0.4 | 0 | 0.0 | 0 | 0 | 0.000058 | 1 | 1 | 192229 | |||
| 9 | 0 | 1 | 0.000054 | 5.9 | 1 | 1.0 | 0 | 0 | 0.000054 | 1 | 1 | 202722 | |||
| 10 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 190757 | |||
| 11 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 202796 | |||
| 12 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 190751 | |||
| 13 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 198961 | |||
| 14 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 1 | 192152 | |||
| 15 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 198940 | |||
| 16 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 198940 | |||
| 17 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 1 | 192152 | |||
| 18 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000009 | 1 | 1 | ||||
| 19 | 0 | 1 | 0.000001 | 0.1 | 0 | 0.0 | 0 | 0 | 0.000009 | 1 | 1 | ||||
| 20 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000008 | 1 | 1 | ||||
| 21 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000008 | 1 | 1 | 192229 | |||
| 22 | 0 | 1 | 0.000008 | 0.9 | 1 | 1.0 | 0 | 0 | 0.000008 | 1 | 1 | 202722 | |||
| 23 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 190757 | |||
| 24 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 202796 | |||
| 25 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 198961 | |||
| 26 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 190751 | |||
| 27 | 22 | 15 | 0.000023 | 2.5 | 0 | 0.0 | 0 | 0 | 0.000608 | 94 | 32 | ||||
| 28 | 22 | 15 | 0.000095 | 10.5 | 0 | 0.0 | 0 | 0 | 0.000539 | 72 | 32 | ||||
| 29 | 22 | 15 | 0.000089 | 9.8 | 0 | 0.0 | 0 | 0 | 0.000387 | 48 | 17 | ||||
| 30 | 22 | 15 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000118 | 2 | 2 | ||||
| 31 | 22 | 15 | 0.000088 | 9.7 | 1 | 1.0 | 0 | 0 | 0.000093 | 2 | 2 | 192229 | |||
| 32 | 22 | 21 | 0.000005 | 0.6 | 1 | 1.0 | 0 | 0 | 0.000005 | 1 | 1 | 202722 | |||
| 33 | 0 | 1 | 0.000021 | 2.3 | 0 | 0.0 | 0 | 0 | 0.000030 | 0 | 0 | 190757 | |||
| 34 | 0 | 1 | 0.000009 | 1.0 | 0 | 0.0 | 0 | 0 | 0.000009 | 0 | 0 | 202796 | |||
| 35 | 3 | 22 | 1 | 0.000070 | 7.7 | 22 | 21.6 | 0 | 0 | 0.000180 | 46 | 1 | 192152 | ||
| 36 | 1 | 22 | 1 | 0.000110 | 12.1 | 24 | 23.5 | 0 | 0 | 0.000110 | 24 | 0 | 198940 | ||
| 37 | 2 | 22 | 1 | 0.000057 | 6.3 | 24 | 23.5 | 0 | 0 | 0.000057 | 24 | 0 | 198940 | ||
| 38 | 22 | 1 | 0.000046 | 5.1 | 22 | 21.6 | 0 | 0 | 0.000046 | 22 | 1 | 192152 | |||
| 39 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000008 | 1 | 1 | ||||
| 40 | 0 | 1 | 0.000001 | 0.1 | 0 | 0.0 | 0 | 0 | 0.000008 | 1 | 1 | ||||
| 41 | 0 | 1 | 0.000001 | 0.1 | 0 | 0.0 | 0 | 0 | 0.000007 | 1 | 1 | 192229 | |||
| 42 | 0 | 1 | 0.000006 | 0.7 | 1 | 1.0 | 0 | 0 | 0.000006 | 1 | 1 | 202722 | |||
| 43 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 191482 | |||
| 44 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 200422 | |||
| 45 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 190757 | |||
| 46 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 202796 | |||
| 47 | 0 | 1 | 0.000002 | 0.2 | 0 | 0.0 | 0 | 0 | 0.000008 | 1 | 1 | ||||
| 48 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000006 | 1 | 1 | ||||
| 49 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000006 | 1 | 1 | 192229 | |||
| 50 | 0 | 1 | 0.000006 | 0.7 | 1 | 1.0 | 0 | 0 | 0.000006 | 1 | 1 | 202722 | |||
| 51 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 192133 | |||
| 52 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 198991 | |||
| 53 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 190757 | |||
| 54 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 202796 | |||
| 55 | 4 | 4 | 0.000001 | 0.1 | 0 | 0.0 | 0 | 0 | 0.000030 | 2 | 2 | ||||
| 56 | 4 | 4 | 0.000000 | 0.0 | 1 | 1.0 | 0 | 0 | 0.000022 | 2 | 2 | 192229 | |||
| 57 | 26 | 25 | 0.000030 | 3.3 | 1 | 1.0 | 0 | 0 | 0.000030 | 1 | 1 | 202722 | |||
| 58 | 0 | 1 | 0.000004 | 0.4 | 0 | 0.0 | 0 | 0 | 0.000007 | 0 | 0 | 190757 | |||
| 59 | 0 | 1 | 0.000003 | 0.3 | 0 | 0.0 | 0 | 0 | 0.000003 | 0 | 0 | 202796 | |||
| 60 | 0 | 1 | 0.000001 | 0.1 | 0 | 0.0 | 0 | 0 | 0.000008 | 1 | 1 | ||||
| 61 | 0 | 1 | 0.000001 | 0.1 | 0 | 0.0 | 0 | 0 | 0.000007 | 1 | 1 | 192229 | |||
| 62 | 0 | 1 | 0.000006 | 0.7 | 1 | 1.0 | 0 | 0 | 0.000006 | 1 | 1 | 202722 | |||
| 63 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 190757 | |||
| 64 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 202796 | |||
| 65 | 0 | 1 | 0.000001 | 0.1 | 0 | 0.0 | 0 | 0 | 0.000007 | 1 | 1 | ||||
| 66 | 0 | 1 | 0.000001 | 0.1 | 0 | 0.0 | 0 | 0 | 0.000006 | 1 | 1 | 192229 | |||
| 67 | 0 | 1 | 0.000005 | 0.6 | 1 | 1.0 | 0 | 0 | 0.000005 | 1 | 1 | 202722 | |||
| 68 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 190757 | |||
| 69 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 202796 |
Sort (ORDER BY)
SORT ORDER BY
Sorts the rows for the ORDER BY.
- Good when
- Few rows, in-memory sort.
- Bad when
- Many rows: the sort does not fit in the workarea and writes to TEMP. An index in the requested order can avoid the SORT, especially with ROWNUM or FETCH FIRST.
- In the plan, check
- PW above zero and Self time (s).
Union of the branches (UNION ALL)
UNION-ALL
Returns each branch's results one after the other, without removing duplicates.
- Good when
- No cost of its own.
- Bad when
- Branches that read the same table several times.
- In the plan, check
- Each branch below.
Nested loops join
NESTED LOOPS
For each row of the outer (driving) row source, executes the inner row source.
- Good when
- Few rows in the outer and selective index access in the inner. Returns the first rows quickly (good for FIRST_ROWS).
- Bad when
- Many rows in the outer: the inner runs thousands of times. It usually comes from an underestimated cardinality in the outer; a HASH JOIN would read each side only once.
- In the plan, check
- Exec of the inner operations and, in the outer, Estimated compared with Rows/exec.
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.
Index range scan
INDEX RANGE SCAN
Goes down to the first leaf block of the range and walks, in order, the leaf blocks within the range set by the access predicate.
- Good when
- Narrow range: the access predicate uses the leading index columns with equality and few keys remain.
- Bad when
- Wide range (many leaf blocks), a predicate that does not use the leading index column (it becomes a filter predicate inside the index), or many executions as the inner of a NESTED LOOPS. If the TABLE ACCESS above discards almost everything, the index is missing the filter's column.
- In the plan, check
- Rows returned and self LIO, compared with those of the table operation right above.
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.
#18 · SELECT
sql_id 3x9jshgkx2rpqhv 3855703734Text
SELECT COL_0202 FROM TAB_006512 WHERE COL_0238 = :B1
- 1 TAB_0065, table of index IDX_0047: plan operation 2
- 2 TAB_0065: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| wait | 0.018272 | 86.1 | 2 | |
| cpu | 0.001060 | 5.0 | 23 | |
| unaccounted-for | 0.000888 | 4.2 | 70 | |
| cpu | 0.000880 | 4.1 | 23 | |
| cpu | 0.000104 | 0.5 | 1 | |
| cpu | 0.000012 | 0.1 | 23 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000104 | 0.000166 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 23 | 0.001060 | 0.001719 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 23 | 0.000880 | 0.019310 | 2 | 69 | 0 | 23 | 0 |
| CLOSE | 23 | 0.000012 | 0.000021 | 0 | 0 | 0 | 0 | 0 |
Execution plan 2304785892
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 2 · INDEX UNIQUE SCAN IDX_0047 69.2% of time · 66.7% of logical reads
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0065 30.8% of time · 33.3% of logical reads
Visits the table row by row from the index: unselective index or missing the columns the filter uses.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0.000004 | 30.8 | 1 | 33.3 | 0 | 0 | 0.000013 | 3 | 2 | 192133 | ||
| 2 | 1 | 1 | 1 | 0.000009 | 69.2 | 2 | 66.7 | 0 | 0 | 0.000009 | 2 | 1 | 198991 |
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.
#19 · SELECT
sql_id d5h8zj9sz0qrghv 1911577327Text
SELECT A.COL_0107, C.COL_0108, A.COL_0109, A.COL_0110, B.COL_0111, B.COL_0112, B.COL_0113, B.COL_0114, B.ROT_0008, B.COL_0115, B.COL_0116, B.COL_0117, B.COL_0118, B.COL_0119, A.COL_0120, A.COL_0121, A.COL_0122, (SELECT S.COL_0123 FROM TAB_0019 S WHERE S.COL_0059 = A.COL_0059 AND S.COL_0062 = :B1 ) COL_0123, B.COL_0124 FROM TAB_0028 A, TAB_00292 B, TAB_0030 C WHERE A.COL_0059 = :B2 AND A.COL_0059 = B.COL_0059 AND A.COL_0107 = B.COL_0107 AND A.COL_0109 = B.COL_0109 AND A.COL_0059 = C.COL_0059 AND A.COL_0107 = C.COL_0107 AND ( :B1 IS NULL OR EXISTS (SELECT '***' FROM TAB_0031 P WHERE P.COL_0059 = :B2 AND P.COL_0062 = :B1 AND P.COL_0107 = A.COL_0107 AND P.COL_0109 = A.COL_0109)) ORDER BY C.COL_0108, A.COL_0109, A.COL_0110, B.COL_0111
- 1 operation 3 (SORT ORDER BY) has no object of its own in the text
- 2 TAB_0029: plan operation 9
- 3 IDX_0022 does not appear in the text; it comes from a view, a synonym or recursive SQL (operation 10)
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.010344 | 54.8 | 10 | |
| cpu | 0.005390 | 28.6 | 7 | |
| cpu | 0.002786 | 14.8 | 1 | |
| cpu | 0.000196 | 1.0 | 1 | |
| recursive | 0.000146 | 0.8 | ||
| cpu | 0.000001 | 0.0 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000196 | 0.000317 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.002877 | 0.004953 | 0 | 2 | 0 | 0 | 1 |
| FETCH | 7 | 0.005390 | 0.013592 | 0 | 677 | 0 | 621 | 0 |
| CLOSE | 1 | 0.000001 | 0.000001 | 0 | 0 | 0 | 0 | 0 |
Execution plan 4266619821
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 3 · SORT ORDER BY 60.7% of time · 0.3% of logical reads
- 2 Id 9 · TABLE ACCESS FULL TAB_0029 12.5% of time · 49.2% of logical reads
Reads the whole object: check whether the filter is selective and has an index. - 3 Id 10 · INDEX UNIQUE SCAN IDX_0022 3.4% of time · 41.7% 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 | 0.000006 | 0.0 | 1 | 0.1 | 0 | 0 | 0.000010 | 2 | 1 | 190865 | |||
| 2 | 1 | 1 | 0.000004 | 0.0 | 1 | 0.1 | 0 | 0 | 0.000004 | 1 | 0 | 199165 | |||
| 3 | 1 | 621 | 11 | 0.008924 | 60.7 | 2 | 0.3 | 0 | 0 | 0.011565 | 677 | 53 | |||
| 4 | 621 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.002641 | 675 | ||||||
| 5 | 1,453 | 111 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.004030 | 392 | 52 | ||||
| 6 | 169 | 108 | 0.000479 | 3.3 | 0 | 0.0 | 0 | 0 | 0.003414 | 58 | 10 | ||||
| 7 | 9 | 9 | 0.000050 | 0.3 | 6 | 0.9 | 0 | 0 | 0.000050 | 6 | 2 | 190798 | |||
| 8 | 169 | 169 | 0.002885 | 19.6 | 52 | 7.7 | 0 | 0 | 0.002885 | 52 | 7 | 192099 | |||
| 9 | 2 | 1,453 | 1,350 | 0.001842 | 12.5 | 334 | 49.2 | 0 | 0 | 0.001842 | 334 | 42 | 192036 | ||
| 10 | 3 | 78 | 1 | 0.000506 | 3.4 | 283 | 41.7 | 0 | 0 | 0.000506 | 283 | 1 | 199166 |
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.
Sort (ORDER BY)
SORT ORDER BY
Sorts the rows for the ORDER BY.
- Good when
- Few rows, in-memory sort.
- Bad when
- Many rows: the sort does not fit in the workarea and writes to TEMP. An index in the requested order can avoid the SORT, especially with ROWNUM or FETCH FIRST.
- In the plan, check
- PW above zero and Self time (s).
Filter
FILTER
Applies a predicate to the rows of the row source below. With two row sources, executes the second (a subquery that was not unnested) for each row of the first.
- Good when
- A single row source, or a subquery executed only a few times (FILTER caches the results already computed).
- Bad when
- Subquery executed row by row (high Exec on the second row source): allowing unnesting or rewriting it as a join usually solves it.
- In the plan, check
- Exec of the second row source.
Hash join
HASH JOIN
Builds a hash table in the PGA from the first row source (build input, the smaller one) and reads the second (probe input) looking for matches.
- Good when
- Joining many rows with no useful index: each side is read only once.
- Bad when
- The build input is large and does not fit in the PGA workarea: the join goes one-pass or multipass and writes to TEMP. Or a few rows would be enough and a NESTED LOOPS with an index would be cheaper.
- In the plan, check
- PW above zero (writes to TEMP), Self time (s) and the Rows of the build input.
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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 |
|---|---|---|
| 108 | 0.000 | select COL_0016 from cdef$ where rowid=:1 |
#21 · SELECT
sql_id bduun358kp94rhv 1361749143Text
SELECT COL_0414 FROM TAB_009512 WHERE COL_0329 = :B1
- 1 TAB_0095, table of index IDX_0060: plan operation 2
- 2 TAB_0095: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| wait | 0.013574 | 85.8 | 2 | |
| unaccounted-for | 0.001034 | 6.5 | 22 | |
| cpu | 0.000564 | 3.6 | 7 | |
| cpu | 0.000552 | 3.5 | 7 | |
| cpu | 0.000090 | 0.6 | 1 | |
| cpu | 0.000006 | 0.0 | 7 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000090 | 0.000692 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 7 | 0.000564 | 0.000900 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 7 | 0.000552 | 0.014218 | 2 | 14 | 0 | 7 | 0 |
| CLOSE | 7 | 0.000006 | 0.000010 | 0 | 0 | 0 | 0 | 0 |
Execution plan 4207326742
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 2 · INDEX UNIQUE SCAN IDX_0060 56.9% of time · 50.0% of logical reads
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0095 43.1% of time · 50.0% of logical reads
Visits the table row by row from the index: unselective index or missing the columns the filter uses.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0.006083 | 43.1 | 1 | 50.0 | 2 | 0 | 0.014117 | 2 | 1 | 190981 | ||
| 2 | 1 | 1 | 1 | 0.008034 | 56.9 | 1 | 50.0 | 1 | 0 | 0.008034 | 1 | 0 | 199392 |
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.
#23 · DELETE
sql_id ckb4zrms9xgf3hv 4036935107Text
delete from "ESQ_01"."TAB_00362" where "COL_0086" = :1
- 1 operation 1 (DELETE TAB_0036) has no object of its own in the text
- 2 TAB_0036: plan operation 2
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| wait | 0.005402 | 39.8 | 1 | |
| recursive | 0.004510 | 33.3 | ||
| unaccounted-for | 0.001600 | 11.8 | 3 | |
| cpu | 0.001573 | 11.6 | 1 | |
| cpu | 0.000474 | 3.5 | 1 | |
| cpu | 0.000000 | 0.0 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000474 | 0.000833 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.004088 | 0.012725 | 1 | 40 | 91 | 2 | 1 |
| CLOSE | 1 | 0.000000 | 0.000001 | 0 | 0 | 0 | 0 | 0 |
Execution plan 2264448958
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 · DELETE TAB_0036 99.3% of time · 85.0% of logical reads
- 2 Id 2 · TABLE ACCESS FULL TAB_0036 0.7% of time · 15.0% of logical reads
Reads the whole object: check whether the filter is selective and has an index.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0.011284 | 99.3 | 34 | 85.0 | 1 | 0 | 0.011365 | 40 | |||||
| 2 | 2 | 2 | 2 | 0.000081 | 0.7 | 6 | 15.0 | 0 | 0 | 0.000081 | 6 | 2 | 190485 |
Delete
DELETE
Deletes the rows returned by the row source below.
- Good when
- Few rows, found through an index.
- Bad when
- Too many rows; an unindexed foreign key on the child table locks the whole table.
- In the plan, check
- Rows of the row source below.
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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 |
|---|---|---|
| 63 | 0.003 | delete from "ESQ_01"."TAB_0054" where "COL_0155" = :1 |
| 109 | 0.002 | delete from "ESQ_01"."TAB_0037" where "COL_0155" = :1 |
#24 · SELECT
sql_id 305ug0679zghahv 2392833546Text
SELECT COL_0229, COL_0228 FROM TAB_006312 WHERE COL_0162 = :B1
- 1 TAB_0063, table of index IDX_0043: plan operation 2
- 2 TAB_0063: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| wait | 0.009025 | 69.3 | 1 | |
| unaccounted-for | 0.001911 | 14.7 | 19 | |
| cpu | 0.001585 | 12.2 | 6 | |
| cpu | 0.000415 | 3.2 | 6 | |
| cpu | 0.000080 | 0.6 | 1 | |
| cpu | 0.000007 | 0.1 | 6 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000080 | 0.000128 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 6 | 0.001585 | 0.003313 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 6 | 0.000415 | 0.009570 | 1 | 18 | 0 | 6 | 0 |
| CLOSE | 6 | 0.000007 | 0.000012 | 0 | 0 | 0 | 0 | 0 |
Execution plan 2069586320
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 2 · INDEX UNIQUE SCAN IDX_0043 67.2% of time · 66.7% of logical reads
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0063 32.8% of time · 33.3% of logical reads
Visits the table row by row from the index: unselective index or missing the columns the filter uses.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0.000020 | 32.8 | 1 | 33.3 | 0 | 0 | 0.000061 | 3 | 2 | 190757 | ||
| 2 | 1 | 1 | 1 | 0.000041 | 67.2 | 2 | 66.7 | 0 | 0 | 0.000041 | 2 | 1 | 202796 |
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.
#27 · SELECT
sql_id drt86kmzq1dbhhv 4284527984Text
SELECT * FROM TAB_00231 T WHERE ((T.COL_0088 = *** AND :B1 = '***') OR (T.COL_0088 = *** AND T.COL_0032 = COL_0089.COL_0090 AND :B1 = '***') OR (T.COL_0088 = *** AND T.COL_0032 = COL_0089.COL_0090 AND :B1 = '***') ) AND T.COL_0091 <= COL_0089.COL_0092 AND ( T.COL_0093 >= COL_0089.COL_0094 OR T.COL_0093 IS NULL) ORDER BY T.COL_0095, T.COL_0096
- 1 TAB_0023: plan operation 2
- 2 operation 1 (SORT ORDER BY) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.004538 | 36.9 | 9 | |
| cpu | 0.003259 | 26.5 | 6 | |
| cpu | 0.002024 | 16.4 | 1 | |
| cpu | 0.001296 | 10.5 | 1 | |
| recursive | 0.001191 | 9.7 | ||
| cpu | 0.000001 | 0.0 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.001296 | 0.002087 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.002625 | 0.004446 | 0 | 16 | 0 | 0 | 0 |
| FETCH | 6 | 0.003259 | 0.005776 | 0 | 12 | 0 | 552 | 0 |
| CLOSE | 1 | 0.000001 | 0.000000 | 0 | 0 | 0 | 0 | 0 |
Execution plan 2769640011
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 2 · TABLE ACCESS FULL TAB_0023 63.5% of time · 100.0% of logical reads
Reads the whole object: check whether the filter is selective and has an index. - 2 Id 1 · SORT ORDER BY 36.5% of time · 0.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 | 2 | 552 | 1 | 0.001434 | 36.5 | 0 | 0.0 | 0 | 0 | 0.003926 | 12 | 4 | |||
| 2 | 1 | 552 | 1 | 0.002492 | 63.5 | 12 | 100.0 | 0 | 0 | 0.002492 | 12 | 3 | 192745 |
Sort (ORDER BY)
SORT ORDER BY
Sorts the rows for the ORDER BY.
- Good when
- Few rows, in-memory sort.
- Bad when
- Many rows: the sort does not fit in the workarea and writes to TEMP. An index in the requested order can avoid the SORT, especially with ROWNUM or FETCH FIRST.
- In the plan, check
- PW above zero and Self time (s).
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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
#28 · INSERT
sql_id bmnrd2u43bap2hv 2285218466Text
INSERT INTO TAB_0035 (COL_0086, COL_0032, COL_0039, COL_0137, COL_0132, COL_0133, COL_0134, COL_0198, COL_0199, COL_0136, COL_0059, COL_0062, COL_0101) VALUES (:B13 , :B12 , :B11 , :B10 , :B9 , :B8 , :B7 , :B6 , :B5 , :B4 , :B3 , :B2 , :B1 )
- 1 operation 1 (LOAD TABLE CONVENTIONAL) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| wait | 0.009060 | 73.7 | 2 | |
| cpu | 0.001761 | 14.3 | 1 | |
| unaccounted-for | 0.001201 | 9.8 | 3 | |
| cpu | 0.000274 | 2.2 | 1 | |
| cpu | 0.000003 | 0.0 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000274 | 0.000479 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.001761 | 0.011816 | 2 | 1 | 10 | 1 | 1 |
| CLOSE | 1 | 0.000003 | 0.000004 | 0 | 0 | 0 | 0 | 0 |
Execution plan 0
From the STAT lines in the trace.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0.009993 | 100.0 | 1 | 100.0 | 2 | 0 | 0.009993 | 1 |
Conventional insert
LOAD TABLE CONVENTIONAL
Inserts the rows into the table through the regular INSERT path.
- Good when
- Everyday inserts.
- Bad when
- The table's triggers, indexes and constraints add cost here; for large loads, direct-path mode (APPEND) writes faster.
- In the plan, check
- Self time (s) and the statement's waits.
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.
#29 · SELECT
sql_id 61x5n662780a6hv 2222195014Text
select u.name, o.name, a.COL_0052, o.obj# from association$1 a, user$ u, obj$ o where a.obj# = :1 and a.property = :2 and a.COL_0053 = o.obj# and u.user# = o.owner#
- 1 ASSOCIATION$: plan operation 3
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.005217 | 42.4 | 260 | |
| cpu | 0.005181 | 42.2 | 65 | |
| cpu | 0.000894 | 7.3 | 65 | |
| cpu | 0.000862 | 7.0 | 65 | |
| cpu | 0.000136 | 1.1 | 65 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 65 | 0.000862 | 0.001414 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 65 | 0.005181 | 0.009158 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 65 | 0.000894 | 0.001491 | 0 | 130 | 0 | 0 | 0 |
| CLOSE | 65 | 0.000136 | 0.000227 | 0 | 0 | 0 | 0 | 0 |
Execution plan 2485131612
From the STAT lines in the trace; plan written 4 times, showing the last one.
Where the plan spends time by each operation's own value, without that of the operations below it
- 1 Id 3 · TABLE ACCESS FULL ASSOCIATION$ 93.3% of time · 100.0% of logical reads
Reads the whole object: check whether the filter is selective and has an index.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 1 | 0.000004 | 4.5 | 0 | 0.0 | 0 | 0 | 0.000089 | 2 | 5 | ||||
| 2 | 0 | 1 | 0.000002 | 2.2 | 0 | 0.0 | 0 | 0 | 0.000085 | 2 | 4 | ||||
| 3 | 1 | 0 | 1 | 0.000083 | 93.3 | 2 | 100.0 | 0 | 0 | 0.000083 | 2 | 2 | 440 | ||
| 4 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 2 | 18 | |||
| 5 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 1 | 36 | |||
| 6 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 1 | 22 | |||
| 7 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 11 |
Nested loops join
NESTED LOOPS
For each row of the outer (driving) row source, executes the inner row source.
- Good when
- Few rows in the outer and selective index access in the inner. Returns the first rows quickly (good for FIRST_ROWS).
- Bad when
- Many rows in the outer: the inner runs thousands of times. It usually comes from an underestimated cardinality in the outer; a HASH JOIN would read each side only once.
- In the plan, check
- Exec of the inner operations and, in the outer, Estimated compared with Rows/exec.
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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.
Index range scan
INDEX RANGE SCAN
Goes down to the first leaf block of the range and walks, in order, the leaf blocks within the range set by the access predicate.
- Good when
- Narrow range: the access predicate uses the leading index columns with equality and few keys remain.
- Bad when
- Wide range (many leaf blocks), a predicate that does not use the leading index column (it becomes a filter predicate inside the index), or many executions as the inner of a NESTED LOOPS. If the TABLE ACCESS above discards almost everything, the index is missing the filter's column.
- In the plan, check
- Rows returned and self LIO, compared with those of the table operation right above.
Table access by cluster
TABLE ACCESS CLUSTER
Reads a table stored in a cluster, by the cluster key.
- Good when
- Tables that are always read together by the same key.
- Bad when
- Poorly sized cluster, with chained blocks.
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.
#32 · SELECT
sql_id dhxd3kb4f5ybdhv 3370318189Text
SELECT COL_0086, COL_0132, COL_0133, DECODE(COL_0134, '***', '***', '***', '***', '***') COL_0135, COL_0136, COL_0137 FROM TAB_00351 WHERE COL_0032 = COL_0089.COL_0090 AND COL_0039 = COL_0089.COL_0138 AND COL_0101 IS NULL AND ( (((COL_0089.COL_0094 > COL_0132 AND COL_0089.COL_0094 < COL_0133) OR (COL_0089.COL_0092 > COL_0132 AND COL_0089.COL_0092 < COL_0133) AND COL_0134 IN ('***')) ) OR ( ( COL_0089.COL_0094 > COL_0132) AND COL_0134 IN ('***','***') AND COL_0137 <> '***'))
- 1 TAB_0035: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.005553 | 49.7 | 1 | |
| unaccounted-for | 0.003892 | 34.8 | 4 | |
| recursive | 0.001550 | 13.9 | ||
| cpu | 0.000168 | 1.5 | 1 | |
| cpu | 0.000007 | 0.1 | 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.006530 | 0.010883 | 0 | 28 | 0 | 0 | 1 |
| EXEC | 1 | 0.000007 | 0.000012 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0.000168 | 0.000275 | 0 | 6 | 0 | 0 | 0 |
| CLOSE | 1 | 0.000001 | 0.000001 | 0 | 0 | 0 | 0 | 0 |
Execution plan 508576461
From the STAT lines in the trace.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 1 | 0.000272 | 100.0 | 6 | 100.0 | 0 | 0 | 0.000272 | 6 | 2 | 190484 |
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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
#33 · SELECT
sql_id 4gh2v4tbkq9a5hv 1462445381Text
SELECT '***' FROM TAB_0017 COL_0260, TAB_0016123 COL_0241 WHERE COL_0260.COL_0032 = COL_0089.COL_0090 AND COL_0260.COL_0261 = COL_0089.COL_0138 AND COL_0241.COL_0262 <> '***' AND COL_0260.COL_0032 = COL_0241.COL_0032 AND COL_0260.COL_0039 = COL_0241.COL_0039 UNION SELECT '***' FROM TAB_0016123 COL_0241 WHERE COL_0241.COL_0032 = COL_0089.COL_0090 AND COL_0241.COL_0039 = COL_0089.COL_0138 AND COL_0241.COL_0262 <> '***'
- 1 TAB_0016, table of index IDX_0010: plan operation 7
- 2 TAB_0016: plan operation 4
- 3 TAB_0016: plan operation 6
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.005034 | 50.6 | 1 | |
| unaccounted-for | 0.003474 | 34.9 | 4 | |
| recursive | 0.001319 | 13.3 | ||
| cpu | 0.000096 | 1.0 | 1 | |
| cpu | 0.000019 | 0.2 | 1 | |
| cpu | 0.000000 | 0.0 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.005832 | 0.009751 | 0 | 16 | 0 | 0 | 1 |
| EXEC | 1 | 0.000019 | 0.000029 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0.000096 | 0.000160 | 0 | 4 | 0 | 0 | 0 |
| CLOSE | 1 | 0.000000 | 0.000002 | 0 | 0 | 0 | 0 | 0 |
Execution plan 2719423886
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 7 · INDEX UNIQUE SCAN IDX_0010 63.3% of time · 25.0% of logical reads
- 2 Id 4 · TABLE ACCESS FULL TAB_0016 17.5% of time · 50.0% of logical reads
Reads the whole object: check whether the filter is selective and has an index. - 3 Id 6 · TABLE ACCESS BY INDEX ROWID TAB_0016 4.8% of time · 25.0% of logical reads
Visits the table row by row from the index: unselective index or missing the columns the filter uses.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 2 | 0.000018 | 10.8 | 0 | 0.0 | 0 | 0 | 0.000166 | 4 | 5 | ||||
| 2 | 0 | 0.000005 | 3.0 | 0 | 0.0 | 0 | 0 | 0.000148 | 4 | ||||||
| 3 | 0 | 1 | 0.000001 | 0.6 | 0 | 0.0 | 0 | 0 | 0.000030 | 2 | 2 | ||||
| 4 | 2 | 0 | 1 | 0.000029 | 17.5 | 2 | 50.0 | 0 | 0 | 0.000029 | 2 | 2 | 190772 | ||
| 5 | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 0 | 199136 | |||
| 6 | 3 | 0 | 1 | 0.000008 | 4.8 | 1 | 25.0 | 0 | 0 | 0.000113 | 2 | 1 | 190772 | ||
| 7 | 1 | 1 | 1 | 0.000105 | 63.3 | 1 | 25.0 | 0 | 0 | 0.000105 | 1 | 0 | 198973 |
Duplicate removal by sort
SORT UNIQUE
Removes duplicate rows (DISTINCT, UNION, IN with a subquery) by sorting the result.
- Good when
- Few rows.
- Bad when
- Large volume; DISTINCT added to hide a join that multiplies rows.
- In the plan, check
- Rows before and after the operation, and PW.
Union of the branches (UNION ALL)
UNION-ALL
Returns each branch's results one after the other, without removing duplicates.
- Good when
- No cost of its own.
- Bad when
- Branches that read the same table several times.
- In the plan, check
- Each branch below.
Nested loops join
NESTED LOOPS
For each row of the outer (driving) row source, executes the inner row source.
- Good when
- Few rows in the outer and selective index access in the inner. Returns the first rows quickly (good for FIRST_ROWS).
- Bad when
- Many rows in the outer: the inner runs thousands of times. It usually comes from an underestimated cardinality in the outer; a HASH JOIN would read each side only once.
- In the plan, check
- Exec of the inner operations and, in the outer, Estimated compared with Rows/exec.
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
Index range scan
INDEX RANGE SCAN
Goes down to the first leaf block of the range and walks, in order, the leaf blocks within the range set by the access predicate.
- Good when
- Narrow range: the access predicate uses the leading index columns with equality and few keys remain.
- Bad when
- Wide range (many leaf blocks), a predicate that does not use the leading index column (it becomes a filter predicate inside the index), or many executions as the inner of a NESTED LOOPS. If the TABLE ACCESS above discards almost everything, the index is missing the filter's column.
- In the plan, check
- Rows returned and self LIO, compared with those of the table operation right above.
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
#34 · SELECT
sql_id 3nvfb7mqmg15mhv 3979838643Text
Select PKG_0003.ROT_0003 ( '***' , TO_DATE('***','***') , '***' , '***' ) From Dual
- 1 operation 1 (FAST DUAL) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.003730 | 42.4 | 5 | |
| cpu | 0.002364 | 26.9 | 1 | |
| cpu | 0.001827 | 20.8 | 2 | |
| recursive | 0.000815 | 9.3 | ||
| wait | 0.000033 | 0.4 | 1 | |
| cpu | 0.000018 | 0.2 | 1 | |
| cpu | 0.000005 | 0.1 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.002364 | 0.003855 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.000018 | 0.000031 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0.002327 | 0.004897 | 0 | 7 | 34 | 1 | 0 |
| CLOSE | 1 | 0.000005 | 0.000009 | 0 | 0 | 0 | 0 | 0 |
Execution plan 1546270724
From the STAT lines in the trace.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 FAST DUAL | 1 | 1 | 0.000003 | 100.0 | 0 | 0.0 | 0 | 0 | 0.000003 | 0 | 2 |
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
#35 · DELETE
sql_id 4qms6yajbu8wchv 2730304396Text
delete from "ESQ_01"."TAB_00402" where "COL_0086" = :1
- 1 operation 1 (DELETE TAB_0040) has no object of its own in the text
- 2 TAB_0040: plan operation 2
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| recursive | 0.005970 | 71.2 | ||
| unaccounted-for | 0.000996 | 11.9 | 3 | |
| cpu | 0.000932 | 11.1 | 1 | |
| cpu | 0.000486 | 5.8 | 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.000486 | 0.000901 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.003345 | 0.007483 | 1 | 26 | 58 | 2 | 1 |
| CLOSE | 1 | 0.000001 | 0.000001 | 0 | 0 | 0 | 0 | 0 |
Execution plan 2302209967
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 · DELETE TAB_0040 99.3% of time · 76.9% of logical reads
- 2 Id 2 · TABLE ACCESS FULL TAB_0040 0.7% of time · 23.1% of logical reads
Reads the whole object: check whether the filter is selective and has an index.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0.006512 | 99.3 | 20 | 76.9 | 1 | 0 | 0.006559 | 26 | |||||
| 2 | 2 | 2 | 2 | 0.000047 | 0.7 | 6 | 23.1 | 0 | 0 | 0.000047 | 6 | 2 | 192742 |
Delete
DELETE
Deletes the rows returned by the row source below.
- Good when
- Few rows, found through an index.
- Bad when
- Too many rows; an unindexed foreign key on the child table locks the whole table.
- In the plan, check
- Rows of the row source below.
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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 |
|---|---|---|
| 46 | 0.005 | delete from "ESQ_01"."TAB_0041" where "COL_0170" = :1 |
| 136 | 0.001 | delete from "ESQ_01"."TAB_0039" where "COL_0170" = :1 |
#39 · SELECT
sql_id 7mxr9pjnj9tkahv 1762977354Text
select a.COL_0054, a.COL_0055 from association$1 a where a.obj# = :1 and a.property = :2
- 1 ASSOCIATION$: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.003439 | 45.1 | 60 | |
| unaccounted-for | 0.003128 | 41.0 | 240 | |
| cpu | 0.000498 | 6.5 | 60 | |
| cpu | 0.000471 | 6.2 | 60 | |
| cpu | 0.000085 | 1.1 | 60 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 60 | 0.000498 | 0.000812 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 60 | 0.003439 | 0.005882 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 60 | 0.000471 | 0.000781 | 0 | 120 | 0 | 0 | 0 |
| CLOSE | 60 | 0.000085 | 0.000146 | 0 | 0 | 0 | 0 | 0 |
Execution plan 1783251294
From the STAT lines in the trace; plan written 4 times, showing the last one.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 1 | 0.000025 | 100.0 | 2 | 100.0 | 0 | 0 | 0.000025 | 2 | 2 | 440 |
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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.
#41 · SELECT
sql_id 08ndunzrd46fnhv 4006746580Text
SELECT DISTINCT COL_0095 FROM TAB_00231 COL_0098 WHERE COL_0098.COL_0032 = COL_0089.COL_0090 AND :B1 = '***' UNION ALL SELECT DISTINCT COL_0095 FROM TAB_00231 COL_0098 WHERE COL_0098.COL_0032 = '***' AND :B1 = '***'
- 1 TAB_0023: plan operation 7
- 2 operation 5 (HASH UNIQUE) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.002527 | 38.9 | 4 | |
| cpu | 0.002274 | 35.0 | 1 | |
| cpu | 0.000961 | 14.8 | 1 | |
| cpu | 0.000471 | 7.3 | 1 | |
| recursive | 0.000254 | 3.9 | ||
| cpu | 0.000001 | 0.0 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000471 | 0.000762 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.001116 | 0.001929 | 0 | 4 | 0 | 0 | 0 |
| FETCH | 1 | 0.002274 | 0.003796 | 0 | 12 | 0 | 14 | 0 |
| CLOSE | 1 | 0.000001 | 0.000001 | 0 | 0 | 0 | 0 | 0 |
Execution plan 913560347
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 7 · TABLE ACCESS FULL TAB_0023 3.4% of time · 100.0% of logical reads
Reads the whole object: check whether the filter is selective and has an index. - 2 Id 5 · HASH UNIQUE 92.7% of time · 0.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 | 14 | 0.000004 | 0.1 | 0 | 0.0 | 0 | 0 | 0.003816 | 12 | ||||||
| 2 | 0 | 14 | 0.000036 | 0.9 | 0 | 0.0 | 0 | 0 | 0.000037 | 0 | 5 | ||||
| 3 | 0 | 0.000001 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000001 | 0 | ||||||
| 4 | 0 | 446 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000000 | 0 | 4 | 192745 | |||
| 5 | 2 | 14 | 14 | 0.003536 | 92.7 | 0 | 0.0 | 0 | 0 | 0.003775 | 12 | 4 | |||
| 6 | 552 | 0.000111 | 2.9 | 0 | 0.0 | 0 | 0 | 0.000239 | 12 | ||||||
| 7 | 1 | 552 | 552 | 0.000128 | 3.4 | 12 | 100.0 | 0 | 0 | 0.000128 | 12 | 3 | 192745 |
Union of the branches (UNION ALL)
UNION-ALL
Returns each branch's results one after the other, without removing duplicates.
- Good when
- No cost of its own.
- Bad when
- Branches that read the same table several times.
- In the plan, check
- Each branch below.
Duplicate removal by hash
HASH UNIQUE
Removes duplicate rows using an in-memory hash table.
- Good when
- Few distinct rows.
- Bad when
- Large volume; DISTINCT added to hide a join that multiplies rows.
- In the plan, check
- Rows before and after the operation, and PW.
Filter
FILTER
Applies a predicate to the rows of the row source below. With two row sources, executes the second (a subquery that was not unnested) for each row of the first.
- Good when
- A single row source, or a subquery executed only a few times (FILTER caches the results already computed).
- Bad when
- Subquery executed row by row (high Exec on the second row source): allowing unnesting or rewriting it as a join usually solves it.
- In the plan, check
- Exec of the second row source.
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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
#46 · DELETE
sql_id dfrsttzpa81pmhv 3936618163Text
delete from "ESQ_01"."TAB_00412" where "COL_0170" = :1
- 1 operation 1 (DELETE TAB_0041) has no object of its own in the text
- 2 TAB_0041: plan operation 2
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| wait | 0.001936 | 37.6 | 1 | |
| recursive | 0.001427 | 27.7 | ||
| cpu | 0.000888 | 17.2 | 2 | |
| unaccounted-for | 0.000673 | 13.1 | 5 | |
| cpu | 0.000226 | 4.4 | 1 | |
| cpu | 0.000001 | 0.0 | 2 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000226 | 0.000361 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2 | 0.001708 | 0.004790 | 1 | 17 | 37 | 4 | 1 |
| CLOSE | 2 | 0.000001 | 0.000000 | 0 | 0 | 0 | 0 | 0 |
Execution plan 2946369044
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 · DELETE TAB_0041 99.1% of time · 25.0% of logical reads
- 2 Id 2 · TABLE ACCESS FULL TAB_0041 0.9% of time · 75.0% of logical reads
Reads the whole object: check whether the filter is selective and has an index.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0.003744 | 99.1 | 2 | 25.0 | 1 | 0 | 0.003779 | 8 | |||||
| 2 | 2 | 2 | 2 | 0.000035 | 0.9 | 6 | 75.0 | 0 | 0 | 0.000035 | 6 | 2 | 192743 |
Delete
DELETE
Deletes the rows returned by the row source below.
- Good when
- Few rows, found through an index.
- Bad when
- Too many rows; an unindexed foreign key on the child table locks the whole table.
- In the plan, check
- Rows of the row source below.
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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 |
|---|---|---|
| 116 | 0.001 | delete from "ESQ_01"."TAB_0043" where "COL_0180" = :1 |
#47 · SELECT
sql_id 70690x7jfswszhv 3807146783Text
SELECT *** COL_0086 FROM TAB_0023 COL_0087 WHERE COL_0087.COL_0088 = '***' AND COL_0087.COL_0032 = '***' GROUP BY COL_0087.COL_0088 UNION SELECT *** COL_0086 FROM TAB_0023 COL_0087 WHERE COL_0087.COL_0088 = '***' AND COL_0087.COL_0032 = COL_0089.COL_0090 GROUP BY COL_0087.COL_0088 UNION SELECT *** COL_0086 FROM TAB_0023 COL_0087 WHERE COL_0087.COL_0088 = '***' AND COL_0087.COL_0032 = COL_0089.COL_0090 GROUP BY COL_0087.COL_0088
- 1 IDX_0016 does not appear in the text; it comes from a view, a synonym or recursive SQL (operation 4)
- 2 IDX_0016 does not appear in the text; it comes from a view, a synonym or recursive SQL (operation 8)
- 3 operation 7 (SORT GROUP BY NOSORT) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.002361 | 46.6 | 1 | |
| unaccounted-for | 0.001975 | 39.0 | 4 | |
| recursive | 0.000501 | 9.9 | ||
| cpu | 0.000212 | 4.2 | 1 | |
| cpu | 0.000014 | 0.3 | 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.002656 | 0.004700 | 0 | 8 | 0 | 0 | 1 |
| EXEC | 1 | 0.000014 | 0.000022 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0.000212 | 0.000341 | 0 | 8 | 0 | 2 | 0 |
| CLOSE | 1 | 0.000001 | 0.000001 | 0 | 0 | 0 | 0 | 0 |
Execution plan 3312525320
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 4 · INDEX RANGE SCAN IDX_0016 37.5% of time · 37.5% of logical reads
Scans a wide range of the index: check the selectivity and the column order. - 2 Id 8 · INDEX RANGE SCAN IDX_0016 4.8% of time · 37.5% of logical reads
Scans a wide range of the index: check the selectivity and the column order. - 3 Id 7 · SORT GROUP BY NOSORT 27.3% of time · 0.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 | 2 | 3 | 0.000022 | 6.6 | 0 | 0.0 | 0 | 0 | 0.000333 | 8 | 7 | ||||
| 2 | 2 | 0.000007 | 2.1 | 0 | 0.0 | 0 | 0 | 0.000311 | 8 | ||||||
| 3 | 1 | 1 | 0.000026 | 7.8 | 0 | 0.0 | 0 | 0 | 0.000151 | 3 | 3 | ||||
| 4 | 1 | 552 | 342 | 0.000125 | 37.5 | 3 | 37.5 | 0 | 0 | 0.000125 | 3 | 2 | 202345 | ||
| 5 | 0 | 1 | 0.000003 | 0.9 | 0 | 0.0 | 0 | 0 | 0.000046 | 2 | 2 | ||||
| 6 | 0 | 85 | 0.000043 | 12.9 | 2 | 25.0 | 0 | 0 | 0.000043 | 2 | 1 | 202345 | |||
| 7 | 3 | 1 | 1 | 0.000091 | 27.3 | 0 | 0.0 | 0 | 0 | 0.000107 | 3 | 2 | |||
| 8 | 2 | 339 | 169 | 0.000016 | 4.8 | 3 | 37.5 | 0 | 0 | 0.000016 | 3 | 1 | 202345 |
Duplicate removal by sort
SORT UNIQUE
Removes duplicate rows (DISTINCT, UNION, IN with a subquery) by sorting the result.
- Good when
- Few rows.
- Bad when
- Large volume; DISTINCT added to hide a join that multiplies rows.
- In the plan, check
- Rows before and after the operation, and PW.
Union of the branches (UNION ALL)
UNION-ALL
Returns each branch's results one after the other, without removing duplicates.
- Good when
- No cost of its own.
- Bad when
- Branches that read the same table several times.
- In the plan, check
- Each branch below.
Sort grouping
SORT GROUP BY
Groups the rows for GROUP BY by sorting on the group key.
- Good when
- Few rows, or the result must come out sorted.
- Bad when
- Many rows, writing to TEMP.
- In the plan, check
- PW and Self time (s).
Index range scan
INDEX RANGE SCAN
Goes down to the first leaf block of the range and walks, in order, the leaf blocks within the range set by the access predicate.
- Good when
- Narrow range: the access predicate uses the leading index columns with equality and few keys remain.
- Bad when
- Wide range (many leaf blocks), a predicate that does not use the leading index column (it becomes a filter predicate inside the index), or many executions as the inner of a NESTED LOOPS. If the TABLE ACCESS above discards almost everything, the index is missing the filter's column.
- In the plan, check
- Rows returned and self LIO, compared with those of the table operation right above.
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
#48 · CREATE TABLE
4 variantsText
CREATE GLOBAL TEMPORARY T
Text truncated: the trace declares 184 characters.
Shape text: the literals became :s (text) and :n (number).
Variants that cost the most
| Calls | Inclusive (s) | Literals |
|---|---|---|
| 3 | 0.001 | |
| 3 | 0.001 | |
| 3 | 0.001 | |
| 3 | 0.001 |
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.002002 | 41.9 | 4 | |
| unaccounted-for | 0.001644 | 34.4 | 12 | |
| recursive | 0.000622 | 13.0 | ||
| cpu | 0.000500 | 10.5 | 4 | |
| cpu | 0.000005 | 0.1 | 4 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 4 | 0.002002 | 0.003326 | 0 | 0 | 0 | 0 | 4 |
| EXEC | 4 | 0.000871 | 0.001436 | 0 | 12 | 0 | 0 | 0 |
| CLOSE | 4 | 0.000005 | 0.000011 | 0 | 0 | 0 | 0 | 0 |
Recursive SQL executed by this statement
#51 · SELECT
sql_id 87x10zx4cp3y0hv 1221234624Text
SELECT *** COL_0086 FROM TAB_0024123 COL_0087 WHERE COL_0087.COL_0088 = '***' AND COL_0087.COL_0032 = '***' GROUP BY COL_0087.COL_0088 UNION SELECT *** COL_0086 FROM TAB_0024123 COL_0087 WHERE COL_0087.COL_0088 = '***' AND COL_0087.COL_0032 = COL_0089.COL_0090 GROUP BY COL_0087.COL_0088 UNION SELECT *** COL_0086 FROM TAB_0024123 COL_0087 WHERE COL_0087.COL_0088 = '***' AND COL_0087.COL_0032 = COL_0089.COL_0090 GROUP BY COL_0087.COL_0088
- 1 TAB_0024: plan operation 8
- 2 TAB_0024: plan operation 4
- 3 TAB_0024: plan operation 6
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.002410 | 52.6 | 1 | |
| unaccounted-for | 0.001586 | 34.6 | 4 | |
| recursive | 0.000486 | 10.6 | ||
| cpu | 0.000086 | 1.9 | 1 | |
| cpu | 0.000011 | 0.2 | 1 | |
| cpu | 0.000000 | 0.0 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.002703 | 0.004418 | 0 | 8 | 0 | 0 | 1 |
| EXEC | 1 | 0.000011 | 0.000019 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0.000086 | 0.000141 | 0 | 6 | 0 | 2 | 0 |
| CLOSE | 1 | 0.000000 | 0.000001 | 0 | 0 | 0 | 0 | 0 |
Execution plan 891646665
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 8 · TABLE ACCESS FULL TAB_0024 52.1% of time · 33.3% of logical reads
Reads the whole object: check whether the filter is selective and has an index. - 2 Id 4 · TABLE ACCESS FULL TAB_0024 20.0% of time · 33.3% of logical reads
Reads the whole object: check whether the filter is selective and has an index. - 3 Id 6 · TABLE ACCESS FULL TAB_0024 8.6% of time · 33.3% of logical reads
Reads the whole object: check whether the filter is selective and has an index.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 0.000017 | 12.1 | 0 | 0.0 | 0 | 0 | 0.000137 | 6 | 9 | ||||
| 2 | 2 | 0.000007 | 5.0 | 0 | 0.0 | 0 | 0 | 0.000120 | 6 | ||||||
| 3 | 1 | 1 | 0.000001 | 0.7 | 0 | 0.0 | 0 | 0 | 0.000029 | 2 | 3 | ||||
| 4 | 2 | 13 | 7 | 0.000028 | 20.0 | 2 | 33.3 | 0 | 0 | 0.000028 | 2 | 2 | 192750 | ||
| 5 | 0 | 1 | 0.000002 | 1.4 | 0 | 0.0 | 0 | 0 | 0.000014 | 2 | 3 | ||||
| 6 | 3 | 0 | 3 | 0.000012 | 8.6 | 2 | 33.3 | 0 | 0 | 0.000012 | 2 | 2 | 192750 | ||
| 7 | 1 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000070 | 2 | 3 | ||||
| 8 | 1 | 13 | 6 | 0.000073 | 52.1 | 2 | 33.3 | 0 | 0 | 0.000073 | 2 | 2 | 192750 |
Duplicate removal by sort
SORT UNIQUE
Removes duplicate rows (DISTINCT, UNION, IN with a subquery) by sorting the result.
- Good when
- Few rows.
- Bad when
- Large volume; DISTINCT added to hide a join that multiplies rows.
- In the plan, check
- Rows before and after the operation, and PW.
Union of the branches (UNION ALL)
UNION-ALL
Returns each branch's results one after the other, without removing duplicates.
- Good when
- No cost of its own.
- Bad when
- Branches that read the same table several times.
- In the plan, check
- Each branch below.
Sort grouping
SORT GROUP BY
Groups the rows for GROUP BY by sorting on the group key.
- Good when
- Few rows, or the result must come out sorted.
- Bad when
- Many rows, writing to TEMP.
- In the plan, check
- PW and Self time (s).
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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
#52 · SELECT
sql_id 0fxxq8umxumv3hv 2816298851Text
select count(COL_0251) from SYS_FBA_TRACKEDTABLES1 where OBJ# = :1 and bitand(FLAGS, :2)=***
- 1 SYS_FBA_TRACKEDTABLES, table of index SYS_C001489: plan operation 3
- 2 operation 1 (SORT AGGREGATE) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.002012 | 44.8 | 24 | |
| unaccounted-for | 0.002001 | 44.5 | 95 | |
| cpu | 0.000273 | 6.1 | 24 | |
| cpu | 0.000116 | 2.6 | 24 | |
| cpu | 0.000091 | 2.0 | 23 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 24 | 0.000273 | 0.000475 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 24 | 0.002012 | 0.003684 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 24 | 0.000116 | 0.000185 | 0 | 24 | 0 | 24 | 0 |
| CLOSE | 23 | 0.000091 | 0.000149 | 0 | 0 | 0 | 0 | 0 |
Execution plan 832246118
From the STAT lines in the trace; plan written 3 times, showing the last one.
Where the plan spends time by each operation's own value, without that of the operations below it
- 1 Id 3 · INDEX UNIQUE SCAN SYS_C001489 50.0% of time · 100.0% of logical reads
- 2 Id 1 · SORT AGGREGATE 40.0% of time · 0.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 | 2 | 1 | 0.000004 | 40.0 | 0 | 0.0 | 0 | 0 | 0.000010 | 1 | |||||
| 2 | 0 | 1 | 0.000001 | 10.0 | 0 | 0.0 | 0 | 0 | 0.000006 | 1 | 1 | 1271 | |||
| 3 | 1 | 0 | 1 | 0.000005 | 50.0 | 1 | 100.0 | 0 | 0 | 0.000005 | 1 | 0 | 1272 |
Aggregation (COUNT, SUM, MAX...)
SORT AGGREGATE
Computes the aggregate functions and returns one row.
- Good when
- Cheap in itself: the cost is in the operations below.
- Bad when
- Almost never.
- In the plan, check
- The operations below it.
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.
#53 · PL/SQL
sql_id d7kdjgkfuxcpnhv 2645471924Text
DECLARE COL_0074 INTEGER; ROT_0010 COL_0075.COL_0076; BEGIN FOR c1 IN (SELECT * FROM TAB_0021 WHERE COL_0064 = *** AND UPPER( ROT_0008 ) = '***' ORDER BY COL_0070 ) LOOP ROT_0010(ROT_0010.count + ***) := c1.COL_0071; END LOOP; PKG_0004.ROT_0005( '***', '***' ); PKG_0004.ROT_0005( '***', '***' ); PKG_0004.ROT_0005( '***', '***' ); PKG_0004.ROT_0005( '***', '***' ); PKG_0004.ROT_0005( '***', '***' ); PKG_0004.ROT_0005( '***', '***' ); COL_0074 := PKG_0005.ROT_0011( '***','***','***','***','***',NULL,'***',NULL,NULL,NULL,'***','***' ); UPDATE TAB_0021 SET COL_0064 = COL_0074 WHERE COL_0064 = ***; DELETE FROM TAB_0020 WHERE COL_0064 = ***; END;
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.002675 | 61.4 | 1 | |
| unaccounted-for | 0.001681 | 38.6 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.002675 | 0.004356 | 0 | 0 | 0 | 0 | 1 |
#54 · SELECT
sql_id 2pta3vm59y7tahv 3399425834Text
SELECT PKG_0005.ROT_0006(), PKG_0005.ROT_0007(), PKG_0005.ROT_0008() FROM dual
- 1 operation 1 (FAST DUAL) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.002369 | 54.9 | 1 | |
| unaccounted-for | 0.001667 | 38.6 | 4 | |
| cpu | 0.000239 | 5.5 | 1 | |
| cpu | 0.000027 | 0.6 | 1 | |
| cpu | 0.000017 | 0.4 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.002369 | 0.003858 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.000027 | 0.000046 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0.000239 | 0.000387 | 0 | 0 | 0 | 1 | 0 |
| CLOSE | 1 | 0.000017 | 0.000028 | 0 | 0 | 0 | 0 | 0 |
Execution plan 1546270724
From the STAT lines in the trace.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 FAST DUAL | 1 | 1 | 0.000002 | 100.0 | 0 | 0.0 | 0 | 0 | 0.000002 | 0 | 2 |
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.
#55 · INSERT
8 variantsText
INSERT INTO TAB_0021 ( COL_0070 , COL_0064 , ROT_0007 , COL_0071 , ROT_0008 , COL_0072 , COL_0073 ) VALUES ( SEQ_002.NEXTVAL , :n , :s , :s , :s , :s , :s )
- 1 operation 1 (LOAD TABLE CONVENTIONAL) has no object of its own in the text
Shape text: the literals became :s (text) and :n (number).
Variants that cost the most
| Calls | Inclusive (s) | Literals |
|---|---|---|
| 3 | 0.001 | ***, '***', '***', '***', '***', '*** |
| 3 | 0.001 | ***, '***', '***', '***', '***', '***' |
| 3 | 0.001 | ***, '***', '***', '***', '***', '***' |
| 3 | 0.001 | ***, '***', '***', '***', '***', '***' |
| 3 | 0.000 | ***, '***', '***', '***', '***', '***' |
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.002054 | 48.8 | 8 | |
| unaccounted-for | 0.001699 | 40.4 | 24 | |
| cpu | 0.000437 | 10.4 | 8 | |
| cpu | 0.000019 | 0.5 | 8 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 8 | 0.002054 | 0.003455 | 0 | 0 | 0 | 0 | 8 |
| EXEC | 8 | 0.000437 | 0.000724 | 0 | 8 | 57 | 8 | 0 |
| CLOSE | 8 | 0.000019 | 0.000030 | 0 | 0 | 0 | 0 | 0 |
Execution plan 287011443
From the STAT lines in the trace; plan written 8 times, showing the slowest recording.
Where the plan spends time by each operation's own value, without that of the operations below it
- 1 Id 1 · LOAD TABLE CONVENTIONAL 94.4% of time · 100.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 | 0 | 0.000153 | 94.4 | 1 | 100.0 | 0 | 0 | 0.000162 | 1 | |||||
| 2 | 1 | 0.000009 | 5.6 | 0 | 0.0 | 0 | 0 | 0.000009 | 0 | 190036 |
Conventional insert
LOAD TABLE CONVENTIONAL
Inserts the rows into the table through the regular INSERT path.
- Good when
- Everyday inserts.
- Bad when
- The table's triggers, indexes and constraints add cost here; for large loads, direct-path mode (APPEND) writes faster.
- In the plan, check
- Self time (s) and the statement's waits.
Sequence (NEXTVAL)
SEQUENCE
Generates the next values of a sequence.
- Good when
- Cache sized for the volume.
- Bad when
- Small cache with heavy use: waits on enq: SQ and on the dictionary.
- In the plan, check
- The statement's waits, in its profile.
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.
#57 · INSERT
4 variantsText
INSERT INTO TAB_0021 ( COL_0070 , COL_0064 , ROT_0007 , COL_0071 , ROT_0008 , COL_0072 , COL_0073 ) VALUES ( SEQ_002.NEXTVAL , :n , :s , null , :s , :s , :s )
- 1 operation 2 (SEQUENCE SEQ_002) has no object of its own in the text
- 2 operation 1 (LOAD TABLE CONVENTIONAL) has no object of its own in the text
Shape text: the literals became :s (text) and :n (number).
Variants that cost the most
| Calls | Inclusive (s) | Literals |
|---|---|---|
| 3 | 0.002 | ***, '***', '***', '***', '***' |
| 3 | 0.001 | ***, '***', '***', '***', '***' |
| 3 | 0.001 | ***, '***', '***', '***', '***' |
| 3 | 0.000 | ***, '***', '***', '***', '***' |
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| recursive | 0.001476 | 40.6 | ||
| cpu | 0.000942 | 25.9 | 4 | |
| unaccounted-for | 0.000879 | 24.2 | 12 | |
| cpu | 0.000326 | 9.0 | 4 | |
| cpu | 0.000010 | 0.3 | 4 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 4 | 0.000942 | 0.001602 | 0 | 0 | 0 | 0 | 4 |
| EXEC | 4 | 0.001239 | 0.002011 | 0 | 6 | 33 | 4 | 0 |
| CLOSE | 4 | 0.000010 | 0.000020 | 0 | 0 | 0 | 0 | 0 |
Execution plan 287011443
From the STAT lines in the trace; plan written 4 times, showing the slowest recording.
Where the plan spends time by each operation's own value, without that of the operations below it
- 1 Id 2 · SEQUENCE SEQ_002 96.6% of time · 50.0% of logical reads
- 2 Id 1 · LOAD TABLE CONVENTIONAL 3.4% of time · 50.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 | 2 | 0 | 0.000060 | 3.4 | 1 | 50.0 | 0 | 0 | 0.001766 | 2 | |||||
| 2 | 1 | 1 | 0.001706 | 96.6 | 1 | 50.0 | 0 | 0 | 0.001706 | 1 | 190036 |
Conventional insert
LOAD TABLE CONVENTIONAL
Inserts the rows into the table through the regular INSERT path.
- Good when
- Everyday inserts.
- Bad when
- The table's triggers, indexes and constraints add cost here; for large loads, direct-path mode (APPEND) writes faster.
- In the plan, check
- Self time (s) and the statement's waits.
Sequence (NEXTVAL)
SEQUENCE
Generates the next values of a sequence.
- Good when
- Cache sized for the volume.
- Bad when
- Small cache with heavy use: waits on enq: SQ and on the dictionary.
- In the plan, check
- The statement's waits, in its profile.
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
#60 · SELECT
sql_id 54944trf4zjwthv 3696215961Text
Select COL_0017 From TAB_000212 where COL_0018 ='***'
- 1 TAB_0002, table of index IDX_0001: plan operation 2
- 2 TAB_0002: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| recursive | 0.001417 | 45.2 | ||
| cpu | 0.001003 | 32.0 | 1 | |
| unaccounted-for | 0.000671 | 21.4 | 5 | |
| cpu | 0.000022 | 0.7 | 2 | |
| cpu | 0.000012 | 0.4 | 1 | |
| cpu | 0.000012 | 0.4 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.001827 | 0.003061 | 0 | 2 | 0 | 0 | 1 |
| EXEC | 1 | 0.000012 | 0.000019 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0.000022 | 0.000036 | 0 | 2 | 0 | 1 | 0 |
| CLOSE | 1 | 0.000012 | 0.000021 | 0 | 0 | 0 | 0 | 0 |
Execution plan 1532307768
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 2 · INDEX UNIQUE SCAN IDX_0001 70.4% of time · 50.0% of logical reads
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0002 29.6% of time · 50.0% of logical reads
Visits the table row by row from the index: unselective index or missing the columns the filter uses.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0.000008 | 29.6 | 1 | 50.0 | 0 | 0 | 0.000027 | 2 | 1 | 191790 | ||
| 2 | 1 | 1 | 1 | 0.000019 | 70.4 | 1 | 50.0 | 0 | 0 | 0.000019 | 1 | 0 | 200547 |
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 |
|---|---|---|
| 108 | 0.001 | select COL_0016 from cdef$ where rowid=:1 |
#63 · DELETE
sql_id 6xwgapzx2uwy2hv 4197282754Text
delete from "ESQ_01"."TAB_00541" where "COL_0155" = :1
- 1 TAB_0054: plan operation 2
- 2 operation 1 (DELETE TAB_0054) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.001314 | 44.5 | 5 | |
| cpu | 0.001142 | 38.7 | 2 | |
| cpu | 0.000494 | 16.7 | 1 | |
| cpu | 0.000001 | 0.0 | 2 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000494 | 0.000967 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2 | 0.001142 | 0.001981 | 0 | 30 | 68 | 22 | 1 |
| CLOSE | 2 | 0.000001 | 0.000003 | 0 | 0 | 0 | 0 | 0 |
Execution plan 2430698258
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 2 · TABLE ACCESS FULL TAB_0054 21.1% of time · 100.0% of logical reads
Reads the whole object: check whether the filter is selective and has an index. - 2 Id 1 · DELETE TAB_0054 78.9% of time · 0.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 | 2 | 0 | 0.000487 | 78.9 | 0 | 0.0 | 0 | 0 | 0.000617 | 15 | |||||
| 2 | 1 | 11 | 9 | 0.000130 | 21.1 | 15 | 100.0 | 0 | 0 | 0.000130 | 15 | 3 | 192740 |
Delete
DELETE
Deletes the rows returned by the row source below.
- Good when
- Few rows, found through an index.
- Bad when
- Too many rows; an unindexed foreign key on the child table locks the whole table.
- In the plan, check
- Rows of the row source below.
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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.
#64 · DELETE
sql_id frn64wn5tg6huhv 194484762Text
delete from "ESQ_01"."TAB_0052" where "COL_0086" = :1
- 1 operation 1 (DELETE TAB_0052) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| recursive | 0.001430 | 49.6 | ||
| cpu | 0.000733 | 25.4 | 1 | |
| unaccounted-for | 0.000557 | 19.3 | 3 | |
| cpu | 0.000161 | 5.6 | 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.000161 | 0.000260 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.001605 | 0.002621 | 0 | 42 | 58 | 6 | 1 |
| CLOSE | 1 | 0.000001 | 0.000001 | 0 | 0 | 0 | 0 | 0 |
Execution plan 2128490758
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 · DELETE TAB_0052 97.1% of time · 85.7% 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 | 0 | 0.002055 | 97.1 | 36 | 85.7 | 0 | 0 | 0.002116 | 42 | |||||
| 2 | 6 | 6 | 0.000061 | 2.9 | 6 | 14.3 | 0 | 0 | 0.000061 | 6 | 2 | 190688 |
Delete
DELETE
Deletes the rows returned by the row source below.
- Good when
- Few rows, found through an index.
- Bad when
- Too many rows; an unindexed foreign key on the child table locks the whole table.
- In the plan, check
- Rows of the row source below.
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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 |
|---|---|---|
| 115 | 0.001 | delete from "ESQ_01"."TAB_0053" where "COL_0197" = :1 |
#67 · SELECT
sql_id 4gnsbw8gt82wdhv 529795981Text
select COL_0048 from xdb.TAB_00111 where COL_0049=:1 or COL_0050=:2
- 1 TAB_0011: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.001439 | 55.1 | 2 | |
| unaccounted-for | 0.000990 | 37.9 | 8 | |
| cpu | 0.000107 | 4.1 | 2 | |
| cpu | 0.000071 | 2.7 | 2 | |
| cpu | 0.000003 | 0.1 | 2 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0.000107 | 0.000173 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2 | 0.001439 | 0.002314 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 2 | 0.000071 | 0.000117 | 0 | 12 | 0 | 0 | 0 |
| CLOSE | 2 | 0.000003 | 0.000006 | 0 | 0 | 0 | 0 | 0 |
Execution plan 439120039
From the STAT lines in the trace; plan written 2 times, showing the last one.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 1 | 0.000038 | 100.0 | 6 | 100.0 | 0 | 0 | 0.000038 | 6 | 2 | 57884 |
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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.
#73 · SELECT
sql_id b96cv5jc82ku3hv 1484868419Text
SELECT /* OPT_DYN_SAMP */ /*+ ALL_ROWS IGNORE_WHERE_CLAUSE NO_PARALLEL(TAB_0097) opt_param('parallel_execution_enabled', 'false') NO_PARALLEL_INDEX(TAB_0097) NO_SQL_TUNE */ NVL(SUM(C1),***), NVL(SUM(C2),***) FROM (SELECT /*+ IGNORE_WHERE_CLAUSE NO_PARALLEL("TAB_0074") FULL("TAB_0074") NO_PARALLEL_INDEX("TAB_0074") */ *** AS C1, CASE WHEN "TAB_0074"."COL_0412"=:B1 THEN *** ELSE *** END AS C2 FROM "ESQ_01"."TAB_0074" "TAB_0074") TAB_0097
- 1 operation 1 (SORT AGGREGATE) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.001245 | 50.0 | 8 | |
| cpu | 0.000843 | 33.8 | 2 | |
| cpu | 0.000377 | 15.1 | 2 | |
| cpu | 0.000021 | 0.8 | 2 | |
| cpu | 0.000006 | 0.2 | 2 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0.000377 | 0.000608 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2 | 0.000843 | 0.001838 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 2 | 0.000021 | 0.000036 | 0 | 0 | 0 | 2 | 0 |
| CLOSE | 2 | 0.000006 | 0.000010 | 0 | 0 | 0 | 0 | 0 |
Execution plan 3817987311
From the STAT lines in the trace; plan written 2 times, showing the last one.
Where the plan spends time by each operation's own value, without that of the operations below it
- 1 Id 1 · SORT AGGREGATE 88.2% of time · 0.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 | 0.000015 | 88.2 | 0 | 0.0 | 0 | 0 | 0.000017 | 0 | |||||
| 2 | 0 | 8,168 | 0.000002 | 11.8 | 0 | 0.0 | 0 | 0 | 0.000002 | 0 | 13 | 194163 |
Aggregation (COUNT, SUM, MAX...)
SORT AGGREGATE
Computes the aggregate functions and returns one row.
- Good when
- Cheap in itself: the cost is in the operations below.
- Bad when
- Almost never.
- In the plan, check
- The operations below it.
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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.
#78 · SELECT
sql_id 8nxf3aj3j6kadhv 1192446285Text
SELECT PKG_0005.ROT_0009() FROM dual
- 1 operation 1 (FAST DUAL) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.001315 | 57.5 | 1 | |
| unaccounted-for | 0.000892 | 39.0 | 4 | |
| cpu | 0.000042 | 1.8 | 1 | |
| cpu | 0.000025 | 1.1 | 1 | |
| cpu | 0.000011 | 0.5 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.001315 | 0.002153 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.000025 | 0.000044 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0.000042 | 0.000070 | 0 | 0 | 0 | 1 | 0 |
| CLOSE | 1 | 0.000011 | 0.000018 | 0 | 0 | 0 | 0 | 0 |
Execution plan 1546270724
From the STAT lines in the trace.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 FAST DUAL | 1 | 1 | 0.000002 | 100.0 | 0 | 0.0 | 0 | 0 | 0.000002 | 0 | 2 |
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.
#90 · SELECT
sql_id 396wrcr5bfgpthv 3401006777Text
select COL_0029 , COL_0030 from TAB_00061 where COL_0031 ='***'
- 1 TAB_0006: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.000882 | 45.5 | 1 | |
| unaccounted-for | 0.000765 | 39.5 | 5 | |
| cpu | 0.000251 | 13.0 | 2 | |
| cpu | 0.000026 | 1.3 | 1 | |
| cpu | 0.000013 | 0.7 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000882 | 0.001465 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.000026 | 0.000043 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0.000251 | 0.000398 | 0 | 31 | 0 | 1 | 0 |
| CLOSE | 1 | 0.000013 | 0.000031 | 0 | 0 | 0 | 0 | 0 |
Execution plan 3402230504
From the STAT lines in the trace.
| 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.000178 | 100.0 | 31 | 100.0 | 0 | 0 | 0.000178 | 31 | 5 | 190385 |
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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.
#95 · SELECT
sql_id 4zvma3j1yp48uhv 1139446042Text
select COL_0027 from TAB_000512 where COL_0028 ='***'
- 1 TAB_0005, table of index IDX_0002: plan operation 2
- 2 TAB_0005: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.001011 | 54.4 | 1 | |
| unaccounted-for | 0.000738 | 39.7 | 5 | |
| cpu | 0.000053 | 2.9 | 2 | |
| cpu | 0.000043 | 2.3 | 1 | |
| cpu | 0.000012 | 0.6 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.001011 | 0.001677 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.000043 | 0.000073 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0.000053 | 0.000087 | 0 | 3 | 0 | 1 | 0 |
| CLOSE | 1 | 0.000012 | 0.000020 | 0 | 0 | 0 | 0 | 0 |
Execution plan 1723849645
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 2 · INDEX UNIQUE SCAN IDX_0002 72.7% of time · 66.7% of logical reads
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0005 27.3% of time · 33.3% of logical reads
Visits the table row by row from the index: unselective index or missing the columns the filter uses.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0.000021 | 27.3 | 1 | 33.3 | 0 | 0 | 0.000077 | 3 | 2 | 191511 | ||
| 2 | 1 | 1 | 1 | 0.000056 | 72.7 | 2 | 66.7 | 0 | 0 | 0.000056 | 2 | 1 | 200480 |
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.
#98 · SELECT
sql_id cgt43dspav74qhv 716020886Text
SELECT TAB_00061.COL_0031 , TAB_00061.COL_0029 FROM TAB_00061 WHERE lower ( TAB_00061.COL_0045 ) =lower ( '***' )
- 1 TAB_0006: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.000755 | 41.7 | 5 | |
| cpu | 0.000746 | 41.2 | 1 | |
| cpu | 0.000294 | 16.2 | 2 | |
| cpu | 0.000011 | 0.6 | 1 | |
| cpu | 0.000004 | 0.2 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000746 | 0.001322 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.000011 | 0.000019 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0.000294 | 0.000463 | 0 | 31 | 0 | 1 | 0 |
| CLOSE | 1 | 0.000004 | 0.000006 | 0 | 0 | 0 | 0 | 0 |
Execution plan 3402230504
From the STAT lines in the trace.
| 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.000184 | 100.0 | 31 | 100.0 | 0 | 0 | 0.000184 | 31 | 5 | 190385 |
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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.
#101 · SELECT
sql_id c60v92x85ws0jhv 1348362257Text
select text from view$1 where rowid=:1
- 1 VIEW$: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.000747 | 42.6 | 24 | |
| cpu | 0.000607 | 34.6 | 6 | |
| cpu | 0.000265 | 15.1 | 6 | |
| cpu | 0.000067 | 3.8 | 6 | |
| cpu | 0.000066 | 3.8 | 6 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 6 | 0.000265 | 0.000524 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 6 | 0.000607 | 0.001000 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 6 | 0.000066 | 0.000112 | 0 | 12 | 0 | 6 | 0 |
| CLOSE | 6 | 0.000067 | 0.000116 | 0 | 0 | 0 | 0 | 0 |
Execution plan 1028580536
From the STAT lines in the trace; plan written 4 times, showing the last one.
| 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.000010 | 100.0 | 1 | 100.0 | 0 | 0 | 0.000010 | 1 | 1 | 69 |
Table access by ROWID from the SQL itself
TABLE ACCESS BY USER ROWID
Reads the row directly by the ROWID given in the statement.
- Good when
- Almost always: one block per row.
- Bad when
- Almost never; a ROWID kept and used after the row moved (MOVE, SHRINK, partition).
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.
#106 · SELECT
sql_id 9gvxp7q2g5jgshv 2230502904Text
SELECT COL_0058.COL_0059, COL_0058.COL_0059 || '***' || COL_0058.COL_0060 FROM TAB_001812 COL_0058 WHERE ((COL_0058.COL_0059 = '***' AND '***' < to_date('***','***')) OR (COL_0058.COL_0059 in ('***') AND '***' >= to_date('***','***')))
- 1 TAB_0018, table of index IDX_0013: plan operation 2
- 2 TAB_0018: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.000839 | 53.5 | 1 | |
| unaccounted-for | 0.000663 | 42.3 | 5 | |
| cpu | 0.000030 | 1.9 | 2 | |
| cpu | 0.000022 | 1.4 | 1 | |
| cpu | 0.000015 | 1.0 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000839 | 0.001460 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.000022 | 0.000036 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0.000030 | 0.000048 | 0 | 2 | 0 | 1 | 0 |
| CLOSE | 1 | 0.000015 | 0.000025 | 0 | 0 | 0 | 0 | 0 |
Execution plan 3761481271
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 2 · INDEX UNIQUE SCAN IDX_0013 68.3% of time · 50.0% of logical reads
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0018 31.7% of time · 50.0% of logical reads
Visits the table row by row from the index: unselective index or missing the columns the filter uses.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0.000013 | 31.7 | 1 | 50.0 | 0 | 0 | 0.000041 | 2 | 1 | 190797 | ||
| 2 | 1 | 1 | 1 | 0.000028 | 68.3 | 1 | 50.0 | 0 | 0 | 0.000028 | 1 | 0 | 202894 |
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.
#107 · SELECT
sql_id dk43aj6c43v86hv 2554457350Text
SELECT COL_0061.COL_0062, COL_0061.COL_0062 || '***' || COL_0061.COL_0063 FROM TAB_001912 COL_0061 WHERE COL_0059 = '***'
- 1 TAB_0019, table of index IDX_0014: plan operation 2
- 2 TAB_0019: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.000808 | 51.7 | 1 | |
| unaccounted-for | 0.000642 | 41.0 | 5 | |
| cpu | 0.000063 | 4.0 | 2 | |
| cpu | 0.000042 | 2.7 | 1 | |
| cpu | 0.000009 | 0.6 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000808 | 0.001341 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.000042 | 0.000073 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0.000063 | 0.000134 | 0 | 3 | 0 | 1 | 0 |
| CLOSE | 1 | 0.000009 | 0.000016 | 0 | 0 | 0 | 0 | 0 |
Execution plan 1040197197
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 2 · INDEX RANGE SCAN IDX_0014 82.4% of time · 66.7% of logical reads
Scans a wide range of the index: check the selectivity and the column order. - 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0019 17.6% of time · 33.3% of logical reads
Visits the table row by row from the index: unselective index or missing the columns the filter uses.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0.000015 | 17.6 | 1 | 33.3 | 0 | 0 | 0.000085 | 3 | 2 | 190865 | ||
| 2 | 1 | 1 | 1 | 0.000070 | 82.4 | 2 | 66.7 | 0 | 0 | 0.000070 | 2 | 1 | 199165 |
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.
Index range scan
INDEX RANGE SCAN
Goes down to the first leaf block of the range and walks, in order, the leaf blocks within the range set by the access predicate.
- Good when
- Narrow range: the access predicate uses the leading index columns with equality and few keys remain.
- Bad when
- Wide range (many leaf blocks), a predicate that does not use the leading index column (it becomes a filter predicate inside the index), or many executions as the inner of a NESTED LOOPS. If the TABLE ACCESS above discards almost everything, the index is missing the filter's column.
- In the plan, check
- Rows returned and self LIO, compared with those of the table operation right above.
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.
#108 · SELECT
sql_id caf77n4gx5n0whv 533909532Text
select COL_0016 from cdef$1 where rowid=:1
- 1 CDEF$: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.000648 | 41.5 | 8 | |
| cpu | 0.000617 | 39.5 | 2 | |
| cpu | 0.000208 | 13.3 | 2 | |
| cpu | 0.000048 | 3.1 | 2 | |
| cpu | 0.000042 | 2.7 | 2 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0.000208 | 0.000336 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2 | 0.000617 | 0.001079 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 2 | 0.000048 | 0.000080 | 0 | 4 | 0 | 2 | 0 |
| CLOSE | 2 | 0.000042 | 0.000068 | 0 | 0 | 0 | 0 | 0 |
Execution plan 1615075166
From the STAT lines in the trace; plan written 2 times, showing the last one.
| 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.000020 | 100.0 | 1 | 100.0 | 0 | 0 | 0.000020 | 1 | 1 | 31 |
Table access by ROWID from the SQL itself
TABLE ACCESS BY USER ROWID
Reads the row directly by the ROWID given in the statement.
- Good when
- Almost always: one block per row.
- Bad when
- Almost never; a ROWID kept and used after the row moved (MOVE, SHRINK, partition).
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.
#109 · DELETE
sql_id ab0ujqa0zg0hjhv 2180481553Text
delete from "ESQ_01"."TAB_00371" where "COL_0155" = :1
- 1 TAB_0037: plan operation 2
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.000681 | 43.7 | 5 | |
| cpu | 0.000676 | 43.4 | 2 | |
| cpu | 0.000200 | 12.8 | 1 | |
| cpu | 0.000002 | 0.1 | 2 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000200 | 0.000321 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2 | 0.000676 | 0.001235 | 0 | 2 | 0 | 0 | 1 |
| CLOSE | 2 | 0.000002 | 0.000003 | 0 | 0 | 0 | 0 | 0 |
Execution plan 3020594291
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 2 · TABLE ACCESS FULL TAB_0037 93.9% of time · 100.0% of logical reads
Reads the whole object: check whether the filter is selective and has an index.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 0.000004 | 6.1 | 0 | 0.0 | 0 | 0 | 0.000066 | 1 | ||||||
| 2 | 1 | 0 | 1 | 0.000062 | 93.9 | 1 | 100.0 | 0 | 0 | 0.000062 | 1 | 2 | 192741 |
Delete
DELETE
Deletes the rows returned by the row source below.
- Good when
- Few rows, found through an index.
- Bad when
- Too many rows; an unindexed foreign key on the child table locks the whole table.
- In the plan, check
- Rows of the row source below.
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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.
#110 · SELECT
sql_id 9ksy7maahssuqhv 2500617046Text
select obj#,type#,ctime,mtime,stime, status, dataobj#, flags, oid$, spare1, spare2 from obj$1 where owner#=:1 and name=:2 and namespace=:3 and remoteowner is null and linkname is null and subname is null
- 1 OBJ$, table of index I_OBJ2: plan operation 2
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.000706 | 45.9 | 8 | |
| unaccounted-for | 0.000648 | 42.2 | 26 | |
| cpu | 0.000097 | 6.3 | 2 | |
| cpu | 0.000083 | 5.4 | 8 | |
| cpu | 0.000003 | 0.2 | 8 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0.000097 | 0.000207 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 8 | 0.000706 | 0.001162 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 8 | 0.000083 | 0.000157 | 0 | 24 | 0 | 0 | 0 |
| CLOSE | 8 | 0.000003 | 0.000011 | 0 | 0 | 0 | 0 | 0 |
Execution plan 853875749
From the STAT lines in the trace; plan written 2 times, showing the last one.
Where the plan spends time by each operation's own value, without that of the operations below it
- 1 Id 2 · INDEX RANGE SCAN I_OBJ2 92.9% of time · 100.0% of logical reads
Scans a wide range of the index: check the selectivity and the column order.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 1 | 0.000003 | 7.1 | 0 | 0.0 | 0 | 0 | 0.000042 | 3 | 4 | 18 | |||
| 2 | 1 | 0 | 1 | 0.000039 | 92.9 | 3 | 100.0 | 0 | 0 | 0.000039 | 3 | 3 | 37 |
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.
Index range scan
INDEX RANGE SCAN
Goes down to the first leaf block of the range and walks, in order, the leaf blocks within the range set by the access predicate.
- Good when
- Narrow range: the access predicate uses the leading index columns with equality and few keys remain.
- Bad when
- Wide range (many leaf blocks), a predicate that does not use the leading index column (it becomes a filter predicate inside the index), or many executions as the inner of a NESTED LOOPS. If the TABLE ACCESS above discards almost everything, the index is missing the filter's column.
- In the plan, check
- Rows returned and self LIO, compared with those of the table operation right above.
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.
#111 · SELECT
sql_id a2czyy0t875yuhv 847484890Text
Select COL_0046 from TAB_001012 Where COL_0047 ='***'
- 1 TAB_0010, table of index IDX_0006: plan operation 2
- 2 TAB_0010: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.000742 | 50.6 | 1 | |
| unaccounted-for | 0.000657 | 44.8 | 5 | |
| cpu | 0.000031 | 2.1 | 2 | |
| cpu | 0.000026 | 1.8 | 1 | |
| cpu | 0.000011 | 0.7 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000742 | 0.001355 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.000026 | 0.000043 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0.000031 | 0.000050 | 0 | 2 | 0 | 1 | 0 |
| CLOSE | 1 | 0.000011 | 0.000019 | 0 | 0 | 0 | 0 | 0 |
Execution plan 2787323455
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 2 · INDEX UNIQUE SCAN IDX_0006 65.0% of time · 50.0% of logical reads
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0010 35.0% of time · 50.0% of logical reads
Visits the table row by row from the index: unselective index or missing the columns the filter uses.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0.000014 | 35.0 | 1 | 50.0 | 0 | 0 | 0.000040 | 2 | 1 | 191798 | ||
| 2 | 1 | 1 | 1 | 0.000026 | 65.0 | 1 | 50.0 | 0 | 0 | 0.000026 | 1 | 0 | 200497 |
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.
#113 · SELECT
sql_id d26b92as16n6rhv 2954055895Text
select default$ from col$1 where rowid=:1
- 1 COL$: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.000557 | 38.8 | 24 | |
| cpu | 0.000519 | 36.1 | 6 | |
| cpu | 0.000259 | 18.0 | 6 | |
| cpu | 0.000059 | 4.1 | 6 | |
| cpu | 0.000042 | 2.9 | 6 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 6 | 0.000259 | 0.000425 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 6 | 0.000519 | 0.000848 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 6 | 0.000042 | 0.000071 | 0 | 12 | 0 | 6 | 0 |
| CLOSE | 6 | 0.000059 | 0.000092 | 0 | 0 | 0 | 0 | 0 |
Execution plan 3213098354
From the STAT lines in the trace; plan written 3 times, showing the last one.
| 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.000003 | 100.0 | 1 | 100.0 | 0 | 0 | 0.000003 | 1 | 1 | 21 |
Table access by ROWID from the SQL itself
TABLE ACCESS BY USER ROWID
Reads the row directly by the ROWID given in the statement.
- Good when
- Almost always: one block per row.
- Bad when
- Almost never; a ROWID kept and used after the row moved (MOVE, SHRINK, partition).
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.
#115 · DELETE
sql_id 0g5361p55vdu4hv 1247655748Text
delete from "ESQ_01"."TAB_00531" where "COL_0197" = :1
- 1 TAB_0053: plan operation 2
- 2 operation 1 (DELETE TAB_0053) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.000739 | 51.7 | 6 | |
| unaccounted-for | 0.000558 | 39.0 | 13 | |
| cpu | 0.000130 | 9.1 | 1 | |
| cpu | 0.000003 | 0.2 | 6 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000130 | 0.000210 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 6 | 0.000739 | 0.001215 | 0 | 36 | 25 | 8 | 1 |
| CLOSE | 6 | 0.000003 | 0.000005 | 0 | 0 | 0 | 0 | 0 |
Execution plan 2820097506
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 2 · TABLE ACCESS FULL TAB_0053 28.3% of time · 100.0% of logical reads
Reads the whole object: check whether the filter is selective and has an index. - 2 Id 1 · DELETE TAB_0053 71.7% of time · 0.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 | 2 | 0 | 0.000081 | 71.7 | 0 | 0.0 | 0 | 0 | 0.000113 | 6 | |||||
| 2 | 1 | 2 | 1 | 0.000032 | 28.3 | 6 | 100.0 | 0 | 0 | 0.000032 | 6 | 2 | 190689 |
Delete
DELETE
Deletes the rows returned by the row source below.
- Good when
- Few rows, found through an index.
- Bad when
- Too many rows; an unindexed foreign key on the child table locks the whole table.
- In the plan, check
- Rows of the row source below.
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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.
#116 · DELETE
sql_id 7kpkq6dqyufnphv 1844263573Text
delete from "ESQ_01"."TAB_00431" where "COL_0180" = :1
- 1 TAB_0043: plan operation 2
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.000607 | 42.5 | 9 | |
| cpu | 0.000528 | 37.0 | 4 | |
| cpu | 0.000289 | 20.3 | 1 | |
| cpu | 0.000003 | 0.2 | 4 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000289 | 0.000565 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 4 | 0.000528 | 0.000859 | 0 | 4 | 0 | 0 | 1 |
| CLOSE | 4 | 0.000003 | 0.000003 | 0 | 0 | 0 | 0 | 0 |
Execution plan 2092666831
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 2 · TABLE ACCESS FULL TAB_0043 91.3% of time · 100.0% of logical reads
Reads the whole object: check whether the filter is selective and has an index.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 0.000002 | 8.7 | 0 | 0.0 | 0 | 0 | 0.000023 | 1 | ||||||
| 2 | 1 | 0 | 1 | 0.000021 | 91.3 | 1 | 100.0 | 0 | 0 | 0.000021 | 1 | 2 | 192744 |
Delete
DELETE
Deletes the rows returned by the row source below.
- Good when
- Few rows, found through an index.
- Bad when
- Too many rows; an unindexed foreign key on the child table locks the whole table.
- In the plan, check
- Rows of the row source below.
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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.
#117 · SELECT
2 variantsText
SELECT SEQ_001.NEXTVAL FROM dual
- 1 operation 1 (SEQUENCE SEQ_001) has no object of its own in the text
Shape text: the literals became :s (text) and :n (number).
Variants that cost the most
| Calls | Inclusive (s) | Literals |
|---|---|---|
| 5 | 0.001 | |
| 4 | 0.000 |
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.000793 | 56.5 | 2 | |
| unaccounted-for | 0.000550 | 39.2 | 9 | |
| cpu | 0.000032 | 2.3 | 2 | |
| cpu | 0.000025 | 1.8 | 3 | |
| cpu | 0.000003 | 0.2 | 2 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0.000793 | 0.001302 | 0 | 0 | 0 | 0 | 2 |
| EXEC | 2 | 0.000032 | 0.000052 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 3 | 0.000025 | 0.000042 | 0 | 0 | 0 | 2 | 0 |
| CLOSE | 2 | 0.000003 | 0.000007 | 0 | 0 | 0 | 0 | 0 |
Execution plan 1008247387
From the STAT lines in the trace; plan written 2 times, showing the slowest recording.
Where the plan spends time by each operation's own value, without that of the operations below it
- 1 Id 1 · SEQUENCE SEQ_001 96.3% of time · 0.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 | 0.000026 | 96.3 | 0 | 0.0 | 0 | 0 | 0.000027 | 0 | 190038 | ||||
| 2 | FAST DUAL | 1 | 1 | 0.000001 | 3.7 | 0 | 0.0 | 0 | 0 | 0.000001 | 0 | 2 |
Sequence (NEXTVAL)
SEQUENCE
Generates the next values of a sequence.
- Good when
- Cache sized for the volume.
- Bad when
- Small cache with heavy use: waits on enq: SQ and on the dictionary.
- In the plan, check
- The statement's waits, in its profile.
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.
#121 · SELECT
sql_id 7vrnqwrm6shamhv 3865854291Text
select a.COL_0102 from association$1 a where a.obj# = :1 and a.property = :2
- 1 ASSOCIATION$: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.000567 | 42.2 | 5 | |
| unaccounted-for | 0.000534 | 39.7 | 20 | |
| cpu | 0.000192 | 14.3 | 5 | |
| cpu | 0.000037 | 2.8 | 5 | |
| cpu | 0.000015 | 1.1 | 5 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 5 | 0.000192 | 0.000310 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 5 | 0.000567 | 0.000950 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 5 | 0.000037 | 0.000060 | 0 | 10 | 0 | 0 | 0 |
| CLOSE | 5 | 0.000015 | 0.000025 | 0 | 0 | 0 | 0 | 0 |
Execution plan 1783251294
From the STAT lines in the trace; plan written 3 times, showing the last one.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 1 | 0.000011 | 100.0 | 2 | 100.0 | 0 | 0 | 0.000011 | 2 | 2 | 440 |
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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.
#124 · INSERT
sql_id 6tabdfs2u7b83hv 94612739Text
INSERT INTO TAB_0020 ( COL_0064 , COL_0065 , COL_0066 , COL_0067 , COL_0068 , COL_0032 , COL_0069 ) VALUES ( *** , '***' , TO_DATE('***','***') , '***' , '***' , '***' , '***' )
- 1 operation 1 (LOAD TABLE CONVENTIONAL) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.000637 | 51.0 | 1 | |
| unaccounted-for | 0.000474 | 38.0 | 3 | |
| cpu | 0.000135 | 10.8 | 1 | |
| cpu | 0.000002 | 0.2 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000637 | 0.001022 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.000135 | 0.000222 | 0 | 1 | 7 | 1 | 0 |
| CLOSE | 1 | 0.000002 | 0.000004 | 0 | 0 | 0 | 0 | 0 |
Execution plan 1546270724
From the STAT lines in the trace.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0.000161 | 100.0 | 1 | 100.0 | 0 | 0 | 0.000161 | 1 |
Conventional insert
LOAD TABLE CONVENTIONAL
Inserts the rows into the table through the regular INSERT path.
- Good when
- Everyday inserts.
- Bad when
- The table's triggers, indexes and constraints add cost here; for large loads, direct-path mode (APPEND) writes faster.
- In the plan, check
- Self time (s) and the statement's waits.
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.
#126 · PL/SQL
sql_id gyas258427y28hv 136575048Text
BEGIN ROT_0017(COL_0257, COL_0258, COL_0259); END;
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.000461 | 38.4 | 36 | |
| cpu | 0.000345 | 28.8 | 12 | |
| cpu | 0.000288 | 24.0 | 12 | |
| cpu | 0.000106 | 8.8 | 12 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 12 | 0.000288 | 0.000479 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 12 | 0.000345 | 0.000552 | 0 | 0 | 0 | 12 | 0 |
| CLOSE | 12 | 0.000106 | 0.000169 | 0 | 0 | 0 | 0 | 0 |
#127 · SELECT
sql_id 5vg126g0wh68uhv 3251116314Text
Select p.COL_0046 from TAB_001012 p where p.COL_0047 ='***'
- 1 TAB_0010, table of index IDX_0006: plan operation 2
- 2 TAB_0010: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.000662 | 55.7 | 1 | |
| unaccounted-for | 0.000472 | 39.7 | 5 | |
| cpu | 0.000022 | 1.9 | 2 | |
| cpu | 0.000020 | 1.7 | 1 | |
| cpu | 0.000013 | 1.1 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000662 | 0.001099 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.000020 | 0.000034 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0.000022 | 0.000035 | 0 | 2 | 0 | 1 | 0 |
| CLOSE | 1 | 0.000013 | 0.000021 | 0 | 0 | 0 | 0 | 0 |
Execution plan 2787323455
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 2 · INDEX UNIQUE SCAN IDX_0006 65.5% of time · 50.0% of logical reads
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0010 34.5% of time · 50.0% of logical reads
Visits the table row by row from the index: unselective index or missing the columns the filter uses.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0.000010 | 34.5 | 1 | 50.0 | 0 | 0 | 0.000029 | 2 | 1 | 191798 | ||
| 2 | 1 | 1 | 1 | 0.000019 | 65.5 | 1 | 50.0 | 0 | 0 | 0.000019 | 1 | 0 | 200497 |
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.
#132 · SELECT
sql_id 30pcsux4mmwqzhv 1228534495Text
select max(COL_0048) from xdb.TAB_0012 where COL_0051=:1
- 1 IDX_0007 does not appear in the text; it comes from a view, a synonym or recursive SQL (operation 3)
- 2 operation 1 (SORT AGGREGATE) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.000477 | 47.2 | 8 | |
| cpu | 0.000402 | 39.8 | 2 | |
| cpu | 0.000112 | 11.1 | 2 | |
| cpu | 0.000018 | 1.8 | 2 | |
| cpu | 0.000002 | 0.2 | 2 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0.000112 | 0.000228 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2 | 0.000402 | 0.000748 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 2 | 0.000018 | 0.000031 | 0 | 2 | 0 | 0 | 0 |
| CLOSE | 2 | 0.000002 | 0.000004 | 0 | 0 | 0 | 0 | 0 |
Execution plan 3081016048
From the STAT lines in the trace; plan written 2 times, showing the last one.
Where the plan spends time by each operation's own value, without that of the operations below it
- 1 Id 3 · INDEX FULL SCAN (MIN/MAX) IDX_0007 60.0% of time · 100.0% of logical reads
Reads the whole object: check whether the filter is selective and has an index. - 2 Id 1 · SORT AGGREGATE 40.0% of time · 0.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 | 2 | 1 | 0.000004 | 40.0 | 0 | 0.0 | 0 | 0 | 0.000010 | 1 | |||||
| 2 | FIRST ROW | 0 | 1 | 0.000000 | 0.0 | 0 | 0.0 | 0 | 0 | 0.000006 | 1 | 1 | |||
| 3 | 1 | 0 | 1 | 0.000006 | 60.0 | 1 | 100.0 | 0 | 0 | 0.000006 | 1 | 1 | 57920 |
Aggregation (COUNT, SUM, MAX...)
SORT AGGREGATE
Computes the aggregate functions and returns one row.
- Good when
- Cheap in itself: the cost is in the operations below.
- Bad when
- Almost never.
- In the plan, check
- The operations below it.
Index end for MIN or MAX
INDEX FULL SCAN (MIN/MAX)
Reads only one end of the index to find the lowest or highest value.
- Good when
- Always cheap.
- Bad when
- Almost never.
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.
#136 · DELETE
sql_id gtv9y0tu9pcbwhv 1956295036Text
delete from "ESQ_01"."TAB_00391" where "COL_0170" = :1
- 1 TAB_0039: plan operation 2
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.000341 | 41.6 | 5 | |
| cpu | 0.000332 | 40.5 | 2 | |
| cpu | 0.000144 | 17.6 | 1 | |
| cpu | 0.000002 | 0.2 | 2 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000144 | 0.000232 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2 | 0.000332 | 0.000585 | 0 | 2 | 0 | 0 | 1 |
| CLOSE | 2 | 0.000002 | 0.000002 | 0 | 0 | 0 | 0 | 0 |
Execution plan 1294023273
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 2 · TABLE ACCESS FULL TAB_0039 91.7% of time · 100.0% of logical reads
Reads the whole object: check whether the filter is selective and has an index.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 0.000001 | 8.3 | 0 | 0.0 | 0 | 0 | 0.000012 | 1 | ||||||
| 2 | 1 | 0 | 1 | 0.000011 | 91.7 | 1 | 100.0 | 0 | 0 | 0.000011 | 1 | 2 | 193211 |
Delete
DELETE
Deletes the rows returned by the row source below.
- Good when
- Few rows, found through an index.
- Bad when
- Too many rows; an unindexed foreign key on the child table locks the whole table.
- In the plan, check
- Rows of the row source below.
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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.
#137 · SELECT
sql_id 4fugx7sv8y32bhv 915344459Text
SELECT /*+ RESULT_CACHE */ B.COL_0032, B.COL_0038, A.ROT_0004, C.COL_0039, C.COL_0040, NVL(C.COL_0041,'***') COL_0042 FROM TAB_00083 A, TAB_0009 C, TAB_00072 B WHERE A.COL_0032 = C.COL_0032(+) AND A.ROT_0004 = C.ROT_0004(+) AND A.COL_0032(+) = B.COL_0032 AND B.COL_0035 = :B2 AND B.COL_0034 = :B1 ORDER BY B.COL_0043, A.COL_0044, C.ROWID
- 1 operation 3 (NESTED LOOPS OUTER) has no object of its own in the text
- 2 TAB_0007: plan operation 4
- 3 TAB_0008, table of index IDX_0004: plan operation 6
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.000392 | 48.1 | 1 | |
| unaccounted-for | 0.000315 | 38.7 | 4 | |
| cpu | 0.000078 | 9.6 | 1 | |
| cpu | 0.000029 | 3.6 | 1 | |
| cpu | 0.000001 | 0.1 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000029 | 0.000049 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0.000078 | 0.000136 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0.000392 | 0.000628 | 0 | 6 | 0 | 86 | 0 |
| CLOSE | 1 | 0.000001 | 0.000002 | 0 | 0 | 0 | 0 | 0 |
Execution plan 1441506424
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 3 · NESTED LOOPS OUTER 47.4% of time · 0.0% of logical reads
- 2 Id 4 · TABLE ACCESS FULL TAB_0007 12.2% of time · 33.3% of logical reads
Reads the whole object: check whether the filter is selective and has an index. - 3 Id 6 · INDEX RANGE SCAN IDX_0004 6.1% of time · 33.3% of logical reads
Scans a wide range of the index: check the selectivity and the column order.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 86 | 32 | 0.000062 | 11.8 | 0 | 0.0 | 0 | 0 | 0.000525 | 6 | 5 | ||||
| 2 | 86 | 32 | 0.000008 | 1.5 | 0 | 0.0 | 0 | 0 | 0.000463 | 6 | 4 | ||||
| 3 | 1 | 86 | 32 | 0.000249 | 47.4 | 0 | 0.0 | 0 | 0 | 0.000366 | 5 | 4 | |||
| 4 | 2 | 2 | 1 | 0.000064 | 12.2 | 2 | 33.3 | 0 | 0 | 0.000064 | 2 | 2 | 192144 | ||
| 5 | 86 | 43 | 0.000021 | 4.0 | 1 | 16.7 | 0 | 0 | 0.000053 | 3 | 2 | 191468 | |||
| 6 | 3 | 86 | 43 | 0.000032 | 6.1 | 2 | 33.3 | 0 | 0 | 0.000032 | 2 | 1 | 200401 | ||
| 7 | 0 | 1 | 0.000057 | 10.9 | 0 | 0.0 | 0 | 0 | 0.000089 | 1 | 0 | 192370 | |||
| 8 | 0 | 1 | 0.000032 | 6.1 | 1 | 16.7 | 0 | 0 | 0.000032 | 1 | 0 | 201139 |
Sort (ORDER BY)
SORT ORDER BY
Sorts the rows for the ORDER BY.
- Good when
- Few rows, in-memory sort.
- Bad when
- Many rows: the sort does not fit in the workarea and writes to TEMP. An index in the requested order can avoid the SORT, especially with ROWNUM or FETCH FIRST.
- In the plan, check
- PW above zero and Self time (s).
Nested loops join
NESTED LOOPS
For each row of the outer (driving) row source, executes the inner row source.
- Good when
- Few rows in the outer and selective index access in the inner. Returns the first rows quickly (good for FIRST_ROWS).
- Bad when
- Many rows in the outer: the inner runs thousands of times. It usually comes from an underestimated cardinality in the outer; a HASH JOIN would read each side only once.
- In the plan, check
- Exec of the inner operations and, in the outer, Estimated compared with Rows/exec.
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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.
Index range scan
INDEX RANGE SCAN
Goes down to the first leaf block of the range and walks, in order, the leaf blocks within the range set by the access predicate.
- Good when
- Narrow range: the access predicate uses the leading index columns with equality and few keys remain.
- Bad when
- Wide range (many leaf blocks), a predicate that does not use the leading index column (it becomes a filter predicate inside the index), or many executions as the inner of a NESTED LOOPS. If the TABLE ACCESS above discards almost everything, the index is missing the filter's column.
- In the plan, check
- Rows returned and self LIO, compared with those of the table operation right above.
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.
#138 · SELECT
sql_id 45r4tc0zhtfjuhv 1057798714Text
SELECT PKG_0002.ROT_0002 ( nvl ( LTRIM ( RTRIM ( COL_0034 ) ) , '***' ) , '***' ) , COL_0035 , COL_0036 , COL_0033 , COL_0037 , PKG_0002.ROT_0002 ( nvl ( LTRIM ( RTRIM ( COL_0034 ) ) , '***' ) , '***' ) FROM TAB_000712 WHERE COL_0032 ='***'
- 1 TAB_0007, table of index IDX_0003: plan operation 2
- 2 TAB_0007: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.000336 | 42.2 | 2 | |
| unaccounted-for | 0.000311 | 39.0 | 5 | |
| cpu | 0.000099 | 12.4 | 1 | |
| cpu | 0.000042 | 5.3 | 1 | |
| cpu | 0.000009 | 1.1 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000099 | 0.000166 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0.000042 | 0.000069 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0.000336 | 0.000546 | 0 | 2 | 0 | 1 | 0 |
| CLOSE | 1 | 0.000009 | 0.000016 | 0 | 0 | 0 | 0 | 0 |
Execution plan 904532920
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 2 · INDEX UNIQUE SCAN IDX_0003 63.2% of time · 50.0% of logical reads
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0007 36.8% of time · 50.0% of logical reads
Visits the table row by row from the index: unselective index or missing the columns the filter uses.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0.000028 | 36.8 | 1 | 50.0 | 0 | 0 | 0.000076 | 2 | 1 | 192144 | ||
| 2 | 1 | 1 | 1 | 0.000048 | 63.2 | 1 | 50.0 | 0 | 0 | 0.000048 | 1 | 0 | 198971 |
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.
#140 · PL/SQL
sql_id 067p5vfcywqvvhv 2582535035Text
BEGIN PKG_0001.ROT_0001( '***' );END;
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.000463 | 69.7 | 3 | |
| cpu | 0.000110 | 16.6 | 1 | |
| cpu | 0.000063 | 9.5 | 1 | |
| cpu | 0.000028 | 4.2 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000110 | 0.000445 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0.000063 | 0.000172 | 0 | 0 | 0 | 1 | 0 |
| CLOSE | 1 | 0.000028 | 0.000047 | 0 | 0 | 0 | 0 | 0 |
#143 · SELECT
sql_id 00s7ysm70x6cjhv 3457063313Text
SELECT SYSDATE FROM dual
- 1 operation 1 (FAST DUAL) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.000326 | 57.7 | 1 | |
| unaccounted-for | 0.000221 | 39.1 | 5 | |
| cpu | 0.000010 | 1.8 | 1 | |
| cpu | 0.000006 | 1.1 | 2 | |
| cpu | 0.000002 | 0.4 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000326 | 0.000533 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0.000010 | 0.000018 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0.000006 | 0.000011 | 0 | 0 | 0 | 1 | 0 |
| CLOSE | 1 | 0.000002 | 0.000003 | 0 | 0 | 0 | 0 | 0 |
Execution plan 1546270724
From the STAT lines in the trace.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 FAST DUAL | 1 | 1 | 0.000002 | 100.0 | 0 | 0.0 | 0 | 0 | 0.000002 | 0 | 2 |
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.
#145 · PL/SQL
sql_id 2dxa01wy0h164hv 1007158468Text
BEGIN PKG_0004.ROT_0005( '***', '***' ); PKG_0004.ROT_0005( '***', '***' ); PKG_0004.ROT_0005( '***', '***' ); PKG_0004.ROT_0005( '***', '***' ); PKG_0004.ROT_0005( '***', '***' ); END;
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.000212 | 39.9 | 6 | |
| cpu | 0.000181 | 34.1 | 2 | |
| cpu | 0.000098 | 18.5 | 2 | |
| cpu | 0.000040 | 7.5 | 2 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0.000098 | 0.000163 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 2 | 0.000181 | 0.000300 | 0 | 0 | 0 | 2 | 0 |
| CLOSE | 2 | 0.000040 | 0.000068 | 0 | 0 | 0 | 0 | 0 |
#146 · SELECT
sql_id 2np7ccgsn83hphv 4047769109Text
SELECT TAB_000712.COL_0032 , TAB_000712.COL_0033 , TAB_000712.COL_0034 FROM TAB_000712 WHERE ( TAB_000712.COL_0032 ='***' )
- 1 TAB_0007, table of index IDX_0003: plan operation 2
- 2 TAB_0007: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.000202 | 40.5 | 10 | |
| cpu | 0.000129 | 25.9 | 2 | |
| cpu | 0.000077 | 15.4 | 2 | |
| cpu | 0.000063 | 12.6 | 4 | |
| cpu | 0.000028 | 5.6 | 2 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0.000129 | 0.000216 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 2 | 0.000077 | 0.000130 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 4 | 0.000063 | 0.000105 | 0 | 4 | 0 | 2 | 0 |
| CLOSE | 2 | 0.000028 | 0.000048 | 0 | 0 | 0 | 0 | 0 |
Execution plan 904532920
From the STAT lines in the trace; plan written 2 times, showing the last one.
Where the plan spends time by each operation's own value, without that of the operations below it
- 1 Id 2 · INDEX UNIQUE SCAN IDX_0003 64.6% of time · 50.0% of logical reads
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0007 35.4% of time · 50.0% of logical reads
Visits the table row by row from the index: unselective index or missing the columns the filter uses.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0.000017 | 35.4 | 1 | 50.0 | 0 | 0 | 0.000048 | 2 | 1 | 192144 | ||
| 2 | 1 | 1 | 1 | 0.000031 | 64.6 | 1 | 50.0 | 0 | 0 | 0.000031 | 1 | 0 | 198971 |
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.
#148 · SELECT
sql_id 284hap0bawbhmhv 380513811Text
SELECT COL_0022 , COL_0023 , COL_0024 , COL_0025 FROM TAB_00041
- 1 TAB_0004: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.000161 | 41.5 | 5 | |
| cpu | 0.000089 | 22.9 | 1 | |
| cpu | 0.000087 | 22.4 | 2 | |
| cpu | 0.000039 | 10.1 | 1 | |
| cpu | 0.000012 | 3.1 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000089 | 0.000153 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0.000039 | 0.000066 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0.000087 | 0.000148 | 0 | 2 | 0 | 1 | 0 |
| CLOSE | 1 | 0.000012 | 0.000021 | 0 | 0 | 0 | 0 | 0 |
Execution plan 2713300837
From the STAT lines in the trace.
| 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.000108 | 100.0 | 2 | 100.0 | 0 | 0 | 0.000108 | 2 | 2 | 191789 |
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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.
#149 · SELECT
sql_id 0121r2r059gdhhv 3226779056Text
SELECT TAB_000312.COL_0019 FROM TAB_000312 WHERE TAB_000312.COL_0020 =( SELECT max ( TAB_000312.COL_0020 ) FROM TAB_000312 )
- 1 TAB_0003: plan operation 1
- 2 TAB_0003: plan operation 3
- 3 operation 2 (SORT AGGREGATE) has no object of its own in the text
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.000160 | 42.0 | 5 | |
| cpu | 0.000100 | 26.2 | 2 | |
| cpu | 0.000073 | 19.2 | 1 | |
| cpu | 0.000035 | 9.2 | 1 | |
| cpu | 0.000013 | 3.4 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000073 | 0.000133 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0.000035 | 0.000059 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0.000100 | 0.000167 | 0 | 4 | 0 | 1 | 0 |
| CLOSE | 1 | 0.000013 | 0.000022 | 0 | 0 | 0 | 0 | 0 |
Execution plan 3233408604
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 FULL TAB_0003 73.4% of time · 50.0% of logical reads
Reads the whole object: check whether the filter is selective and has an index. - 2 Id 3 · TABLE ACCESS FULL TAB_0003 10.1% of time · 50.0% of logical reads
Reads the whole object: check whether the filter is selective and has an index. - 3 Id 2 · SORT AGGREGATE 16.5% of time · 0.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.000102 | 73.4 | 2 | 50.0 | 0 | 0 | 0.000139 | 4 | 2 | 190396 | ||
| 2 | 3 | 1 | 0.000023 | 16.5 | 0 | 0.0 | 0 | 0 | 0.000037 | 2 | |||||
| 3 | 2 | 2 | 2 | 0.000014 | 10.1 | 2 | 50.0 | 0 | 0 | 0.000014 | 2 | 2 | 190396 |
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
Aggregation (COUNT, SUM, MAX...)
SORT AGGREGATE
Computes the aggregate functions and returns one row.
- Good when
- Cheap in itself: the cost is in the operations below.
- Bad when
- Almost never.
- In the plan, check
- The operations below it.
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.
#150 · SELECT
sql_id 045fnpnbhh6qghv 386407119Text
select o.owner#,o.name,o.namespace,o.remoteowner,o.linkname,o.subname from obj$1 o where o.obj#=:1
- 1 OBJ$, table of index I_OBJ1: plan operation 2
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| cpu | 0.000157 | 44.9 | 4 | |
| unaccounted-for | 0.000141 | 40.3 | 14 | |
| cpu | 0.000027 | 7.7 | 2 | |
| cpu | 0.000023 | 6.6 | 4 | |
| cpu | 0.000002 | 0.6 | 4 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0.000027 | 0.000044 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 4 | 0.000157 | 0.000267 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 4 | 0.000023 | 0.000037 | 0 | 8 | 0 | 0 | 0 |
| CLOSE | 4 | 0.000002 | 0.000002 | 0 | 0 | 0 | 0 | 0 |
Execution plan 2863542513
From the STAT lines in the trace; plan written 2 times, showing the last one.
Where the plan spends time by each operation's own value, without that of the operations below it
- 1 Id 2 · INDEX RANGE SCAN I_OBJ1 91.7% of time · 100.0% of logical reads
Scans a wide range of the index: check the selectivity and the column order.
| Id | Operation | Exec. | Rows | Rows/exec | Estimated | Self time (s) | % time | Self LIO | % LIO | PR | PW | Time (s) | CR | Cost | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 1 | 0.000001 | 8.3 | 0 | 0.0 | 0 | 0 | 0.000012 | 2 | 3 | 18 | |||
| 2 | 1 | 0 | 1 | 0.000011 | 91.7 | 2 | 100.0 | 0 | 0 | 0.000011 | 2 | 2 | 36 |
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.
Index range scan
INDEX RANGE SCAN
Goes down to the first leaf block of the range and walks, in order, the leaf blocks within the range set by the access predicate.
- Good when
- Narrow range: the access predicate uses the leading index columns with equality and few keys remain.
- Bad when
- Wide range (many leaf blocks), a predicate that does not use the leading index column (it becomes a filter predicate inside the index), or many executions as the inner of a NESTED LOOPS. If the TABLE ACCESS above discards almost everything, the index is missing the filter's column.
- In the plan, check
- Rows returned and self LIO, compared with those of the table operation right above.
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.
#151 · SELECT
sql_id asauc96whczkshv 3104210520Text
SELECT COL_0026 , COL_0025 FROM TAB_00041
- 1 TAB_0004: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.000137 | 41.6 | 5 | |
| cpu | 0.000077 | 23.4 | 1 | |
| cpu | 0.000060 | 18.2 | 2 | |
| cpu | 0.000033 | 10.0 | 1 | |
| cpu | 0.000022 | 6.7 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000077 | 0.000129 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0.000033 | 0.000056 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0.000060 | 0.000108 | 0 | 2 | 0 | 1 | 0 |
| CLOSE | 1 | 0.000022 | 0.000036 | 0 | 0 | 0 | 0 | 0 |
Execution plan 2713300837
From the STAT lines in the trace.
| 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.000085 | 100.0 | 2 | 100.0 | 0 | 0 | 0.000085 | 2 | 2 | 191789 |
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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.
#152 · SELECT
sql_id a7az3bk606ddrhv 2349020599Text
SELECT COL_0018 , COL_0021 FROM TAB_00021
- 1 TAB_0002: plan operation 1
Statement profile
| Component | Duration (s) | % | Occurrences | |
|---|---|---|---|---|
| unaccounted-for | 0.000130 | 40.8 | 5 | |
| cpu | 0.000075 | 23.5 | 1 | |
| cpu | 0.000072 | 22.6 | 2 | |
| cpu | 0.000033 | 10.3 | 1 | |
| cpu | 0.000009 | 2.8 | 1 |
Calls
| Call | Count | CPU (s) | Duration (s) | Disk (PIO) | Consistent (CR) | Current (CU) | Rows | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0.000075 | 0.000126 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0.000033 | 0.000055 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0.000072 | 0.000122 | 0 | 2 | 0 | 1 | 0 |
| CLOSE | 1 | 0.000009 | 0.000016 | 0 | 0 | 0 | 0 | 0 |
Execution plan 1566035411
From the STAT lines in the trace.
| 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.000084 | 100.0 | 2 | 100.0 | 0 | 0 | 0.000084 | 2 | 2 | 191790 |
Full table scan
TABLE ACCESS FULL
Reads every block of the segment up to the high water mark (HWM), with multiblock reads (db file scattered read, or direct path read for direct reads).
- Good when
- The query needs a large share of the rows, the table is small, or the read is a batch one. On Exadata (STORAGE FULL) the filter runs in the storage cells (smart scan).
- Bad when
- The predicate is selective and few rows remain: the cost grows with the segment size, not with the result. Worse as the inner of a NESTED LOOPS: the full scan repeats for every outer row.
- In the plan, check
- High self LIO with few Rows returned: selective predicate without a useful index. Exec above 1: repeated full scan.
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.
Object 192892
- Wait (s)
- 404.790
- Occurrences
- 290,860
- Top events
- db file sequential read · direct path read · direct path read temp
The ready-to-run database queries are on the object page, in the console.
Object 202849
- Wait (s)
- 66.670
- Occurrences
- 33,428
- Top events
- db file sequential read
The ready-to-run database queries are on the object page, in the console.
Object 192893
- Wait (s)
- 15.837
- Occurrences
- 9,559
- Top events
- db file sequential read · direct path read · direct path write temp
The ready-to-run database queries are on the object page, in the console.
Object 202854
- Wait (s)
- 3.822
- Occurrences
- 873
- Top events
- db file sequential read
The ready-to-run database queries are on the object page, in the console.
Object 201999
- Wait (s)
- 0.696
- Occurrences
- 419
- Top events
- direct path read temp · db file sequential read · Disk file operations I/O
The ready-to-run database queries are on the object page, in the console.
Object 201287
- Wait (s)
- 0.628
- Occurrences
- 475
- Top events
- direct path read temp · db file sequential read · Disk file operations I/O
The ready-to-run database queries are on the object page, in the console.
Object 192746
- Wait (s)
- 0.533
- Occurrences
- 192
- Top events
- db file sequential read · direct path read temp · Disk file operations I/O
The ready-to-run database queries are on the object page, in the console.
Object 201286
- Wait (s)
- 0.328
- Occurrences
- 322
- Top events
- direct path read temp · db file sequential read
The ready-to-run database queries are on the object page, in the console.
Object 202867
- Wait (s)
- 0.305
- Occurrences
- 47
- Top events
- db file sequential read · Disk file operations I/O
The ready-to-run database queries are on the object page, in the console.
Object 202865
- Wait (s)
- 0.143
- Occurrences
- 36
- Top events
- db file sequential read · Disk file operations I/O
The ready-to-run database queries are on the object page, in the console.
Object 201288 · IDX_0034
index- Wait (s)
- 0.064
- Occurrences
- 13
- Top events
- db file sequential read
Where it appears in the trace
- Statement #7, operation 2 INDEX RANGE SCAN IDX_0034
- Statement #71, operation 6 (no details in this file) INDEX RANGE SCAN IDX_0034
The ready-to-run database queries are on the object page, in the console.
Object 192133 · TAB_0065
table- Wait (s)
- 0.037
- Occurrences
- 6
- Top events
- direct path read temp · db file sequential read
Where it appears in the trace
- Statement #17, operation 51 TABLE ACCESS BY INDEX ROWID TAB_0065
- Statement #18, operation 1 TABLE ACCESS BY INDEX ROWID TAB_0065
The ready-to-run database queries are on the object page, in the console.
Object 201349 · IDX_0035
index- Wait (s)
- 0.025
- Occurrences
- 4
- Top events
- db file sequential read
Where it appears in the trace
- Statement #13, operation 3 INDEX RANGE SCAN IDX_0035
The ready-to-run database queries are on the object page, in the console.
Object 191473
- Wait (s)
- 0.012
- Occurrences
- 5
- Top events
- db file sequential read · Disk file operations I/O
The ready-to-run database queries are on the object page, in the console.
Object 190484 · TAB_0035
table- Wait (s)
- 0.009
- Occurrences
- 2
- Top events
- db file sequential read
Where it appears in the trace
- Statement #32, operation 1 TABLE ACCESS FULL TAB_0035
- Statement #37, operation 1 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0035
- Statement #59, operation 6 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0035
- Statement #71, operation 3 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0035
- Statement #71, operation 5 (no details in this file) TABLE ACCESS FULL TAB_0035
- Statement #77, operation 5 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0035
- Statement #89, operation 5 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0035
- Statement #91, operation 5 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0035
- Statement #94, operation 5 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0035
- Statement #99, operation 5 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0035
- Statement #105, operation 4 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0035
- Statement #112, operation 4 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0035
The ready-to-run database queries are on the object page, in the console.
Object 190757 · TAB_0063
table- Wait (s)
- 0.009
- Occurrences
- 1
- Top events
- db file sequential read
Where it appears in the trace
- Statement #17, operation 10 TABLE ACCESS BY INDEX ROWID TAB_0063
- Statement #17, operation 23 TABLE ACCESS BY INDEX ROWID TAB_0063
- Statement #17, operation 33 TABLE ACCESS BY INDEX ROWID TAB_0063
- Statement #17, operation 45 TABLE ACCESS BY INDEX ROWID TAB_0063
- Statement #17, operation 53 TABLE ACCESS BY INDEX ROWID TAB_0063
- Statement #17, operation 58 TABLE ACCESS BY INDEX ROWID TAB_0063
- Statement #17, operation 63 TABLE ACCESS BY INDEX ROWID TAB_0063
- Statement #17, operation 68 TABLE ACCESS BY INDEX ROWID TAB_0063
- Statement #24, operation 1 TABLE ACCESS BY INDEX ROWID TAB_0063
The ready-to-run database queries are on the object page, in the console.
Object 199392 · IDX_0060
index- Wait (s)
- 0.008
- Occurrences
- 1
- Top events
- db file sequential read
Where it appears in the trace
- Statement #21, operation 2 INDEX UNIQUE SCAN IDX_0060
The ready-to-run database queries are on the object page, in the console.
Object 202853
- Wait (s)
- 0.006
- Occurrences
- 1
- Top events
- db file sequential read
The ready-to-run database queries are on the object page, in the console.
Object 190981 · TAB_0095
table- Wait (s)
- 0.006
- Occurrences
- 1
- Top events
- db file sequential read
Where it appears in the trace
- Statement #21, operation 1 TABLE ACCESS BY INDEX ROWID TAB_0095
The ready-to-run database queries are on the object page, in the console.
Object 191816
- Wait (s)
- 0.006
- Occurrences
- 3
- Top events
- db file sequential read · Disk file operations I/O
The ready-to-run database queries are on the object page, in the console.
Object 202751 · IDX_0036
index- Wait (s)
- 0.005
- Occurrences
- 1
- Top events
- db file sequential read
Where it appears in the trace
- Statement #40, operation 2 (no details in this file) INDEX RANGE SCAN IDX_0036
The ready-to-run database queries are on the object page, in the console.
Object 201296
- Wait (s)
- 0.005
- Occurrences
- 1
- Top events
- db file sequential read
The ready-to-run database queries are on the object page, in the console.
Object 201299
- Wait (s)
- 0.004
- Occurrences
- 1
- Top events
- db file sequential read
The ready-to-run database queries are on the object page, in the console.
Object 201293
- Wait (s)
- 0.004
- Occurrences
- 1
- Top events
- db file sequential read
The ready-to-run database queries are on the object page, in the console.
Object 198940 · IDX_0045
index- Wait (s)
- 0.004
- Occurrences
- 1
- Top events
- db file sequential read
Where it appears in the trace
- Statement #17, operation 15 INDEX UNIQUE SCAN IDX_0045
- Statement #17, operation 16 INDEX UNIQUE SCAN IDX_0045
- Statement #17, operation 36 INDEX UNIQUE SCAN IDX_0045
- Statement #17, operation 37 INDEX UNIQUE SCAN IDX_0045
The ready-to-run database queries are on the object page, in the console.
Object 191815
- Wait (s)
- 0.003
- Occurrences
- 2
- Top events
- db file sequential read · Disk file operations I/O
The ready-to-run database queries are on the object page, in the console.
Object 201315
- Wait (s)
- 0.002
- Occurrences
- 1
- Top events
- db file sequential read
The ready-to-run database queries are on the object page, in the console.
Object 201226 · IDX_0062
indexWhere it appears in the trace
- Statement #1, operation 2 INDEX UNIQUE SCAN IDX_0062
The ready-to-run database queries are on the object page, in the console.
Object 201225 · IDX_0063
indexWhere it appears in the trace
- Statement #2, operation 2 INDEX RANGE SCAN IDX_0063
The ready-to-run database queries are on the object page, in the console.
Object 192404 · TAB_0093
tableWhere it appears in the trace
- Statement #3, operation 6 TABLE ACCESS BY INDEX ROWID TAB_0093
The ready-to-run database queries are on the object page, in the console.
Object 201077 · IDX_0057
indexWhere it appears in the trace
- Statement #3, operation 7 INDEX RANGE SCAN IDX_0057
The ready-to-run database queries are on the object page, in the console.
Object 193177 · TAB_0026
tableWhere it appears in the trace
- Statement #3, operation 8 TABLE ACCESS BY INDEX ROWID TAB_0026
- Statement #36, operation 6 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0026
The ready-to-run database queries are on the object page, in the console.
Object 202263 · IDX_0018
indexWhere it appears in the trace
- Statement #3, operation 9 INDEX UNIQUE SCAN IDX_0018
- Statement #36, operation 7 (no details in this file) INDEX UNIQUE SCAN IDX_0018
The ready-to-run database queries are on the object page, in the console.
Object 198982 · IDX_0058
indexWhere it appears in the trace
- Statement #3, operation 10 INDEX UNIQUE SCAN IDX_0058
The ready-to-run database queries are on the object page, in the console.
Object 190770 · TAB_0088
tableWhere it appears in the trace
- Statement #3, operation 11 TABLE ACCESS BY INDEX ROWID TAB_0088
The ready-to-run database queries are on the object page, in the console.
Object 190050
sequenceWhere it appears in the trace
- Statement #4, operation 2 SEQUENCE SEQ_007
The ready-to-run database queries are on the object page, in the console.
Object 79 · I_SEQ1
indexWhere it appears in the trace
- Statement #8, operation 2 INDEX UNIQUE SCAN I_SEQ1
- Statement #74, operation 2 (no details in this file) INDEX UNIQUE SCAN I_SEQ1
The ready-to-run database queries are on the object page, in the console.
Object 192622 · TAB_0092
tableWhere it appears in the trace
- Statement #10, operation 1 TABLE ACCESS BY INDEX ROWID TAB_0092
The ready-to-run database queries are on the object page, in the console.
Object 200566 · IDX_0056
indexWhere it appears in the trace
- Statement #10, operation 2 INDEX UNIQUE SCAN IDX_0056
The ready-to-run database queries are on the object page, in the console.
Object 201278 · IDX_0024
indexWhere it appears in the trace
- Statement #11, operation 2 INDEX UNIQUE SCAN IDX_0024
- Statement #59, operation 7 (no details in this file) INDEX UNIQUE SCAN IDX_0024
- Statement #71, operation 4 (no details in this file) INDEX UNIQUE SCAN IDX_0024
- Statement #77, operation 6 (no details in this file) INDEX UNIQUE SCAN IDX_0024
- Statement #89, operation 6 (no details in this file) INDEX UNIQUE SCAN IDX_0024
- Statement #91, operation 6 (no details in this file) INDEX UNIQUE SCAN IDX_0024
- Statement #94, operation 6 (no details in this file) INDEX UNIQUE SCAN IDX_0024
- Statement #99, operation 6 (no details in this file) INDEX UNIQUE SCAN IDX_0024
- Statement #105, operation 5 (no details in this file) INDEX UNIQUE SCAN IDX_0024
- Statement #112, operation 5 (no details in this file) INDEX UNIQUE SCAN IDX_0024
The ready-to-run database queries are on the object page, in the console.
Object 190035
sequenceWhere it appears in the trace
- Statement #12, operation 2 SEQUENCE SEQ_003
The ready-to-run database queries are on the object page, in the console.
Object 190916 · TAB_0032
tableWhere it appears in the trace
- Statement #14, operation 5 TABLE ACCESS BY INDEX ROWID TAB_0032
- Statement #15, operation 1 TABLE ACCESS BY INDEX ROWID TAB_0032
The ready-to-run database queries are on the object page, in the console.
Object 199273 · IDX_0019
indexWhere it appears in the trace
- Statement #14, operation 6 INDEX UNIQUE SCAN IDX_0019
- Statement #15, operation 2 INDEX UNIQUE SCAN IDX_0019
The ready-to-run database queries are on the object page, in the console.
Object 190918 · TAB_0033
tableWhere it appears in the trace
- Statement #14, operation 7 TABLE ACCESS BY INDEX ROWID TAB_0033
The ready-to-run database queries are on the object page, in the console.
Object 199275 · IDX_0020
indexWhere it appears in the trace
- Statement #14, operation 8 INDEX RANGE SCAN IDX_0020
The ready-to-run database queries are on the object page, in the console.
Object 199274 · IDX_0021
indexWhere it appears in the trace
- Statement #14, operation 9 INDEX UNIQUE SCAN IDX_0021
The ready-to-run database queries are on the object page, in the console.
Object 190917 · TAB_0034
tableWhere it appears in the trace
- Statement #14, operation 10 TABLE ACCESS BY INDEX ROWID TAB_0034
The ready-to-run database queries are on the object page, in the console.
Object 204006 · TAB_0013
viewWhere it appears in the trace
- Statement #16, operation 4 VIEW TAB_0013
The ready-to-run database queries are on the object page, in the console.
Object 203872 · TAB_0015
viewWhere it appears in the trace
- Statement #16, operation 7 VIEW TAB_0015
The ready-to-run database queries are on the object page, in the console.
Object 190772 · TAB_0016
tableWhere it appears in the trace
- Statement #16, operation 11 TABLE ACCESS FULL TAB_0016
- Statement #16, operation 14 TABLE ACCESS FULL TAB_0016
- Statement #16, operation 23 TABLE ACCESS BY INDEX ROWID TAB_0016
- Statement #16, operation 33 TABLE ACCESS BY INDEX ROWID TAB_0016
- Statement #33, operation 4 TABLE ACCESS FULL TAB_0016
- Statement #33, operation 6 TABLE ACCESS BY INDEX ROWID TAB_0016
- Statement #68, operation 2 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0016
- Statement #80, operation 1 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0016
- Statement #114, operation 1 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0016
The ready-to-run database queries are on the object page, in the console.
Object 200905 · IDX_0008
indexWhere it appears in the trace
- Statement #16, operation 12 INDEX UNIQUE SCAN IDX_0008
The ready-to-run database queries are on the object page, in the console.
Object 200904 · IDX_0009
indexWhere it appears in the trace
- Statement #16, operation 15 INDEX UNIQUE SCAN IDX_0009
The ready-to-run database queries are on the object page, in the console.
Object 4254951128 · SYS_TEMP_0FD9D66D8_1257732A
tableWhere it appears in the trace
- Statement #16, operation 22 TABLE ACCESS FULL SYS_TEMP_0FD9D66D8_1257732A
- Statement #16, operation 30 TABLE ACCESS FULL SYS_TEMP_0FD9D66D8_1257732A
- Statement #16, operation 39 TABLE ACCESS FULL SYS_TEMP_0FD9D66D8_1257732A
The ready-to-run database queries are on the object page, in the console.
Object 198973 · IDX_0010
indexWhere it appears in the trace
- Statement #16, operation 24 INDEX UNIQUE SCAN IDX_0010
- Statement #16, operation 31 INDEX UNIQUE SCAN IDX_0010
- Statement #33, operation 7 INDEX UNIQUE SCAN IDX_0010
- Statement #68, operation 3 (no details in this file) INDEX UNIQUE SCAN IDX_0010
- Statement #80, operation 2 (no details in this file) INDEX UNIQUE SCAN IDX_0010
- Statement #114, operation 2 (no details in this file) INDEX UNIQUE SCAN IDX_0010
The ready-to-run database queries are on the object page, in the console.
Object 199137 · IDX_0011
indexWhere it appears in the trace
- Statement #16, operation 25 INDEX UNIQUE SCAN IDX_0011
- Statement #16, operation 32 INDEX UNIQUE SCAN IDX_0011
The ready-to-run database queries are on the object page, in the console.
Object 190850 · TAB_0017
tableWhere it appears in the trace
- Statement #16, operation 26 TABLE ACCESS BY INDEX ROWID TAB_0017
The ready-to-run database queries are on the object page, in the console.
Object 192144 · TAB_0007
tableWhere it appears in the trace
- Statement #16, operation 35 TABLE ACCESS BY INDEX ROWID TAB_0007
- Statement #133, operation 1 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0007
- Statement #137, operation 4 TABLE ACCESS FULL TAB_0007
- Statement #138, operation 1 TABLE ACCESS BY INDEX ROWID TAB_0007
- Statement #146, operation 1 TABLE ACCESS BY INDEX ROWID TAB_0007
The ready-to-run database queries are on the object page, in the console.
Object 198971 · IDX_0003
indexWhere it appears in the trace
- Statement #16, operation 36 INDEX UNIQUE SCAN IDX_0003
- Statement #133, operation 2 (no details in this file) INDEX UNIQUE SCAN IDX_0003
- Statement #138, operation 2 INDEX UNIQUE SCAN IDX_0003
- Statement #146, operation 2 INDEX UNIQUE SCAN IDX_0003
The ready-to-run database queries are on the object page, in the console.
Object 202288 · IDX_0012
indexWhere it appears in the trace
- Statement #16, operation 40 INDEX RANGE SCAN IDX_0012
- Statement #42, operation 2 (no details in this file) INDEX RANGE SCAN IDX_0012
The ready-to-run database queries are on the object page, in the console.
Object 192229 · TAB_0060
tableWhere it appears in the trace
- Statement #17, operation 8 TABLE ACCESS BY INDEX ROWID TAB_0060
- Statement #17, operation 21 TABLE ACCESS BY INDEX ROWID TAB_0060
- Statement #17, operation 31 TABLE ACCESS BY INDEX ROWID TAB_0060
- Statement #17, operation 41 TABLE ACCESS BY INDEX ROWID TAB_0060
- Statement #17, operation 49 TABLE ACCESS BY INDEX ROWID TAB_0060
- Statement #17, operation 56 TABLE ACCESS BY INDEX ROWID TAB_0060
- Statement #17, operation 61 TABLE ACCESS BY INDEX ROWID TAB_0060
- Statement #17, operation 66 TABLE ACCESS BY INDEX ROWID TAB_0060
The ready-to-run database queries are on the object page, in the console.
Object 202722 · IDX_0042
indexWhere it appears in the trace
- Statement #17, operation 9 INDEX RANGE SCAN IDX_0042
- Statement #17, operation 22 INDEX RANGE SCAN IDX_0042
- Statement #17, operation 32 INDEX RANGE SCAN IDX_0042
- Statement #17, operation 42 INDEX RANGE SCAN IDX_0042
- Statement #17, operation 50 INDEX RANGE SCAN IDX_0042
- Statement #17, operation 57 INDEX RANGE SCAN IDX_0042
- Statement #17, operation 62 INDEX RANGE SCAN IDX_0042
- Statement #17, operation 67 INDEX RANGE SCAN IDX_0042
The ready-to-run database queries are on the object page, in the console.
Object 202796 · IDX_0043
indexWhere it appears in the trace
- Statement #17, operation 11 INDEX UNIQUE SCAN IDX_0043
- Statement #17, operation 24 INDEX UNIQUE SCAN IDX_0043
- Statement #17, operation 34 INDEX UNIQUE SCAN IDX_0043
- Statement #17, operation 46 INDEX UNIQUE SCAN IDX_0043
- Statement #17, operation 54 INDEX UNIQUE SCAN IDX_0043
- Statement #17, operation 59 INDEX UNIQUE SCAN IDX_0043
- Statement #17, operation 64 INDEX UNIQUE SCAN IDX_0043
- Statement #17, operation 69 INDEX UNIQUE SCAN IDX_0043
- Statement #24, operation 2 INDEX UNIQUE SCAN IDX_0043
The ready-to-run database queries are on the object page, in the console.
Object 190751 · TAB_0061
tableWhere it appears in the trace
- Statement #17, operation 12 TABLE ACCESS BY INDEX ROWID TAB_0061
- Statement #17, operation 26 TABLE ACCESS BY INDEX ROWID TAB_0061
The ready-to-run database queries are on the object page, in the console.
Object 198961 · IDX_0044
indexWhere it appears in the trace
- Statement #17, operation 13 INDEX UNIQUE SCAN IDX_0044
- Statement #17, operation 25 INDEX UNIQUE SCAN IDX_0044
The ready-to-run database queries are on the object page, in the console.
Object 192152 · TAB_0062
tableWhere it appears in the trace
- Statement #17, operation 14 TABLE ACCESS BY INDEX ROWID TAB_0062
- Statement #17, operation 17 TABLE ACCESS BY INDEX ROWID TAB_0062
- Statement #17, operation 35 TABLE ACCESS BY INDEX ROWID TAB_0062
- Statement #17, operation 38 TABLE ACCESS BY INDEX ROWID TAB_0062
The ready-to-run database queries are on the object page, in the console.
Object 191482 · TAB_0064
tableWhere it appears in the trace
- Statement #17, operation 43 TABLE ACCESS BY INDEX ROWID TAB_0064
The ready-to-run database queries are on the object page, in the console.
Object 200422 · IDX_0046
indexWhere it appears in the trace
- Statement #17, operation 44 INDEX UNIQUE SCAN IDX_0046
The ready-to-run database queries are on the object page, in the console.
Object 198991 · IDX_0047
indexWhere it appears in the trace
- Statement #17, operation 52 INDEX UNIQUE SCAN IDX_0047
- Statement #18, operation 2 INDEX UNIQUE SCAN IDX_0047
The ready-to-run database queries are on the object page, in the console.
Object 190865 · TAB_0019
tableWhere it appears in the trace
- Statement #19, operation 1 TABLE ACCESS BY INDEX ROWID TAB_0019
- Statement #107, operation 1 TABLE ACCESS BY INDEX ROWID TAB_0019
The ready-to-run database queries are on the object page, in the console.
Object 199165 · IDX_0014
indexWhere it appears in the trace
- Statement #19, operation 2 INDEX UNIQUE SCAN IDX_0014
- Statement #107, operation 2 INDEX RANGE SCAN IDX_0014
The ready-to-run database queries are on the object page, in the console.
Object 190798 · TAB_0030
tableWhere it appears in the trace
- Statement #19, operation 7 TABLE ACCESS FULL TAB_0030
The ready-to-run database queries are on the object page, in the console.
Object 192099 · TAB_0028
tableWhere it appears in the trace
- Statement #19, operation 8 TABLE ACCESS FULL TAB_0028
The ready-to-run database queries are on the object page, in the console.
Object 192036 · TAB_0029
tableWhere it appears in the trace
- Statement #19, operation 9 TABLE ACCESS FULL TAB_0029
The ready-to-run database queries are on the object page, in the console.
Object 199166 · IDX_0022
indexWhere it appears in the trace
- Statement #19, operation 10 INDEX UNIQUE SCAN IDX_0022
The ready-to-run database queries are on the object page, in the console.
Object 190485 · TAB_0036
tableWhere it appears in the trace
- Statement #23, operation 2 TABLE ACCESS FULL TAB_0036
- Statement #77, operation 11 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0036
- Statement #105, operation 8 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0036
- Statement #123, operation 6 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0036
The ready-to-run database queries are on the object page, in the console.
Object 192745 · TAB_0023
tableWhere it appears in the trace
- Statement #27, operation 2 TABLE ACCESS FULL TAB_0023
- Statement #41, operation 4 TABLE ACCESS FULL TAB_0023
- Statement #41, operation 7 TABLE ACCESS FULL TAB_0023
The ready-to-run database queries are on the object page, in the console.
Object 440 · ASSOCIATION$
tableWhere it appears in the trace
- Statement #29, operation 3 TABLE ACCESS FULL ASSOCIATION$
- Statement #39, operation 1 TABLE ACCESS FULL ASSOCIATION$
- Statement #121, operation 1 TABLE ACCESS FULL ASSOCIATION$
The ready-to-run database queries are on the object page, in the console.
Object 18 · OBJ$
tableWhere it appears in the trace
- Statement #29, operation 4 TABLE ACCESS BY INDEX ROWID OBJ$
- Statement #110, operation 1 TABLE ACCESS BY INDEX ROWID OBJ$
- Statement #150, operation 1 TABLE ACCESS BY INDEX ROWID OBJ$
The ready-to-run database queries are on the object page, in the console.
Object 36 · I_OBJ1
indexWhere it appears in the trace
- Statement #29, operation 5 INDEX RANGE SCAN I_OBJ1
- Statement #150, operation 2 INDEX RANGE SCAN I_OBJ1
The ready-to-run database queries are on the object page, in the console.
Object 22 · USER$
tableWhere it appears in the trace
- Statement #29, operation 6 TABLE ACCESS CLUSTER USER$
- Statement #30, operation 7 (no details in this file) TABLE ACCESS BY INDEX ROWID USER$
The ready-to-run database queries are on the object page, in the console.
Object 11 · I_USER#
indexWhere it appears in the trace
- Statement #29, operation 7 INDEX UNIQUE SCAN I_USER#
The ready-to-run database queries are on the object page, in the console.
Object 199136 · IDX_0052
indexWhere it appears in the trace
- Statement #33, operation 5 INDEX RANGE SCAN IDX_0052
- Statement #82, operation 2 (no details in this file) INDEX RANGE SCAN IDX_0052
- Statement #82, operation 5 (no details in this file) INDEX RANGE SCAN IDX_0052
The ready-to-run database queries are on the object page, in the console.
Object 192742 · TAB_0040
tableWhere it appears in the trace
- Statement #35, operation 2 TABLE ACCESS FULL TAB_0040
- Statement #59, operation 14 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0040
- Statement #88, operation 9 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0040
- Statement #89, operation 11 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0040
- Statement #91, operation 11 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0040
- Statement #94, operation 11 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0040
- Statement #99, operation 11 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0040
- Statement #102, operation 9 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0040
- Statement #103, operation 9 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0040
- Statement #112, operation 8 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0040
The ready-to-run database queries are on the object page, in the console.
Object 192743 · TAB_0041
tableWhere it appears in the trace
- Statement #46, operation 2 TABLE ACCESS FULL TAB_0041
- Statement #59, operation 11 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0041
- Statement #88, operation 6 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0041
- Statement #89, operation 8 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0041
- Statement #91, operation 8 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0041
- Statement #94, operation 8 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0041
- Statement #99, operation 8 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0041
- Statement #102, operation 6 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0041
- Statement #103, operation 6 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0041
The ready-to-run database queries are on the object page, in the console.
Object 202345 · IDX_0016
indexWhere it appears in the trace
- Statement #47, operation 4 INDEX RANGE SCAN IDX_0016
- Statement #47, operation 6 INDEX RANGE SCAN IDX_0016
- Statement #47, operation 8 INDEX RANGE SCAN IDX_0016
- Statement #84, operation 2 (no details in this file) INDEX RANGE SCAN IDX_0016
The ready-to-run database queries are on the object page, in the console.
Object 192750 · TAB_0024
tableWhere it appears in the trace
- Statement #25, operation 2 (no details in this file) TABLE ACCESS FULL TAB_0024
- Statement #51, operation 4 TABLE ACCESS FULL TAB_0024
- Statement #51, operation 6 TABLE ACCESS FULL TAB_0024
- Statement #51, operation 8 TABLE ACCESS FULL TAB_0024
- Statement #58, operation 2 (no details in this file) TABLE ACCESS FULL TAB_0024
- Statement #70, operation 4 (no details in this file) TABLE ACCESS FULL TAB_0024
- Statement #70, operation 7 (no details in this file) TABLE ACCESS FULL TAB_0024
The ready-to-run database queries are on the object page, in the console.
Object 1271 · SYS_FBA_TRACKEDTABLES
tableWhere it appears in the trace
- Statement #52, operation 2 TABLE ACCESS BY INDEX ROWID SYS_FBA_TRACKEDTABLES
The ready-to-run database queries are on the object page, in the console.
Object 1272 · SYS_C001489
indexWhere it appears in the trace
- Statement #52, operation 3 INDEX UNIQUE SCAN SYS_C001489
The ready-to-run database queries are on the object page, in the console.
Object 190036
sequenceWhere it appears in the trace
- Statement #55, operation 2 SEQUENCE SEQ_002
- Statement #57, operation 2 SEQUENCE SEQ_002
The ready-to-run database queries are on the object page, in the console.
Object 191790 · TAB_0002
tableWhere it appears in the trace
- Statement #60, operation 1 TABLE ACCESS BY INDEX ROWID TAB_0002
- Statement #147, operation 1 (no details in this file) TABLE ACCESS FULL TAB_0002
- Statement #152, operation 1 TABLE ACCESS FULL TAB_0002
The ready-to-run database queries are on the object page, in the console.
Object 200547 · IDX_0001
indexWhere it appears in the trace
- Statement #60, operation 2 INDEX UNIQUE SCAN IDX_0001
The ready-to-run database queries are on the object page, in the console.
Object 192740 · TAB_0054
tableWhere it appears in the trace
- Statement #63, operation 2 TABLE ACCESS FULL TAB_0054
The ready-to-run database queries are on the object page, in the console.
Object 190688 · TAB_0052
tableWhere it appears in the trace
- Statement #64, operation 2 TABLE ACCESS FULL TAB_0052
The ready-to-run database queries are on the object page, in the console.
Object 57884 · TAB_0011
tableWhere it appears in the trace
- Statement #67, operation 1 TABLE ACCESS FULL TAB_0011
The ready-to-run database queries are on the object page, in the console.
Object 194163 · TAB_0074
tableWhere it appears in the trace
- Statement #73, operation 2 TABLE ACCESS FULL TAB_0074
The ready-to-run database queries are on the object page, in the console.
Object 190385 · TAB_0006
tableWhere it appears in the trace
- Statement #90, operation 1 TABLE ACCESS FULL TAB_0006
- Statement #98, operation 1 TABLE ACCESS FULL TAB_0006
The ready-to-run database queries are on the object page, in the console.
Object 191511 · TAB_0005
tableWhere it appears in the trace
- Statement #95, operation 1 TABLE ACCESS BY INDEX ROWID TAB_0005
The ready-to-run database queries are on the object page, in the console.
Object 200480 · IDX_0002
indexWhere it appears in the trace
- Statement #95, operation 2 INDEX UNIQUE SCAN IDX_0002
The ready-to-run database queries are on the object page, in the console.
Object 69 · VIEW$
tableWhere it appears in the trace
- Statement #101, operation 1 TABLE ACCESS BY USER ROWID VIEW$
The ready-to-run database queries are on the object page, in the console.
Object 190797 · TAB_0018
tableWhere it appears in the trace
- Statement #106, operation 1 TABLE ACCESS BY INDEX ROWID TAB_0018
- Statement #135, operation 1 (no details in this file) TABLE ACCESS BY INDEX ROWID TAB_0018
The ready-to-run database queries are on the object page, in the console.
Object 202894 · IDX_0013
indexWhere it appears in the trace
- Statement #106, operation 2 INDEX UNIQUE SCAN IDX_0013
- Statement #135, operation 2 (no details in this file) INDEX UNIQUE SCAN IDX_0013
The ready-to-run database queries are on the object page, in the console.
Object 31 · CDEF$
tableWhere it appears in the trace
- Statement #108, operation 1 TABLE ACCESS BY USER ROWID CDEF$
The ready-to-run database queries are on the object page, in the console.
Object 192741 · TAB_0037
tableWhere it appears in the trace
- Statement #77, operation 7 (no details in this file) TABLE ACCESS FULL TAB_0037
- Statement #105, operation 6 (no details in this file) TABLE ACCESS FULL TAB_0037
- Statement #109, operation 2 TABLE ACCESS FULL TAB_0037
- Statement #123, operation 4 (no details in this file) TABLE ACCESS FULL TAB_0037
The ready-to-run database queries are on the object page, in the console.
Object 37 · I_OBJ2
indexWhere it appears in the trace
- Statement #110, operation 2 INDEX RANGE SCAN I_OBJ2
The ready-to-run database queries are on the object page, in the console.
Object 191798 · TAB_0010
tableWhere it appears in the trace
- Statement #111, operation 1 TABLE ACCESS BY INDEX ROWID TAB_0010
- Statement #127, operation 1 TABLE ACCESS BY INDEX ROWID TAB_0010
The ready-to-run database queries are on the object page, in the console.
Object 200497 · IDX_0006
indexWhere it appears in the trace
- Statement #111, operation 2 INDEX UNIQUE SCAN IDX_0006
- Statement #127, operation 2 INDEX UNIQUE SCAN IDX_0006
The ready-to-run database queries are on the object page, in the console.
Object 21 · COL$
tableWhere it appears in the trace
- Statement #113, operation 1 TABLE ACCESS BY USER ROWID COL$
The ready-to-run database queries are on the object page, in the console.
Object 190689 · TAB_0053
tableWhere it appears in the trace
- Statement #115, operation 2 TABLE ACCESS FULL TAB_0053
The ready-to-run database queries are on the object page, in the console.
Object 192744 · TAB_0043
tableWhere it appears in the trace
- Statement #59, operation 8 (no details in this file) TABLE ACCESS FULL TAB_0043
- Statement #88, operation 5 (no details in this file) TABLE ACCESS FULL TAB_0043
- Statement #99, operation 7 (no details in this file) TABLE ACCESS FULL TAB_0043
- Statement #116, operation 2 TABLE ACCESS FULL TAB_0043
The ready-to-run database queries are on the object page, in the console.
Object 190038
sequenceWhere it appears in the trace
- Statement #117, operation 1 SEQUENCE SEQ_001
The ready-to-run database queries are on the object page, in the console.
Object 57920 · IDX_0007
indexWhere it appears in the trace
- Statement #132, operation 3 INDEX FULL SCAN (MIN/MAX) IDX_0007
The ready-to-run database queries are on the object page, in the console.
Object 193211 · TAB_0039
tableWhere it appears in the trace
- Statement #112, operation 6 (no details in this file) TABLE ACCESS FULL TAB_0039
- Statement #136, operation 2 TABLE ACCESS FULL TAB_0039
The ready-to-run database queries are on the object page, in the console.
Object 191468 · TAB_0008
tableWhere it appears in the trace
- Statement #137, operation 5 TABLE ACCESS BY INDEX ROWID TAB_0008
The ready-to-run database queries are on the object page, in the console.
Object 200401 · IDX_0004
indexWhere it appears in the trace
- Statement #137, operation 6 INDEX RANGE SCAN IDX_0004
- Statement #165, operation 2 (no details in this file) INDEX UNIQUE SCAN IDX_0004
The ready-to-run database queries are on the object page, in the console.
Object 192370 · TAB_0009
tableWhere it appears in the trace
- Statement #137, operation 7 TABLE ACCESS BY INDEX ROWID TAB_0009
The ready-to-run database queries are on the object page, in the console.
Object 201139 · IDX_0005
indexWhere it appears in the trace
- Statement #137, operation 8 INDEX RANGE SCAN IDX_0005
The ready-to-run database queries are on the object page, in the console.
Object 191789 · TAB_0004
tableWhere it appears in the trace
- Statement #148, operation 1 TABLE ACCESS FULL TAB_0004
- Statement #151, operation 1 TABLE ACCESS FULL TAB_0004
The ready-to-run database queries are on the object page, in the console.
Object 190396 · TAB_0003
tableWhere it appears in the trace
- Statement #149, operation 1 TABLE ACCESS FULL TAB_0003
- Statement #149, operation 3 TABLE ACCESS FULL TAB_0003
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:57