Alright, buckle up, buttercup. JAS-MIN is here to dissect this mess of numbers you call a performance report. You want comprehensive? You got it. Don't worry, I won't hold back, because apparently, you want all the data I can find. Let's see what horrors lie within.
Well, aren't these just delightful visual aids. Let's dig into the actual story these pretty boxes are trying to tell us, rather than just admiring the squiggles.
Overall Load Profile Synopsis: Your database is a wait-bottlenecked beast. The consistently high Average Active Sessions with low CPU utilization, coupled with astronomical logical I/O, tells me your sessions are spending most of their time fighting over memory resources or waiting for Oracle to process already-cached blocks. This isn't about slow disks; it's about inefficient data access patterns and contention within the SGA. The high commit rate and block changes contribute significantly to the internal contention.
Your analysis confirms my initial suspicion from the load profile. The default ratio for finding peaks is 0.666
, meaning CPU should account for at least two-thirds of the DB Time. Your actual ratios? Abysmally low, ranging from 0.01
to 0.19
.
This isn't a "peak," darling, this is your database suffocating for lack of resources other than CPU. When DB CPU is 15.00
and DB Time is 1196.10
(ratio 0.01
on 25-Cze-25 13:00:32
, snap 1665
), it means that on average, about 1196 active sessions were doing something, but only 15 of them were actually crunching numbers on the CPU. The rest were cooling their heels, waiting for I/O, locks, latches, or some other internal Oracle resource.
The lowest ratios, indicating the most severe non-CPU bottlenecks, consistently occur during your business hours (08:00-15:00 on weekdays):
0.01
between 11:00:12
(snap 1663
) and 14:00:42
(snap 1666
). This is a prime time for performance issues.11:00:56
(snap 1687
) to 14:00:22
(snap 1690
), the ratio hits 0.01
. A recurring nightmare.12:00:10
(snap 1712
) to 15:00:40
(snap 1715
) sees the ratio at 0.01
or 0.02
. Weekends look slightly better, but still heavily waiting.09:00:55
(snap 1781
) to 16:00:07
(snap 1788
), the ratio is 0.01
or 0.02
. Starting the week with a whimper, not a bang.10:00:54
(snap 1806
) to 14:00:30
(snap 1810
) shows 0.01
.09:00:19
(snap 1829
) to 14:00:12
(snap 1834
) also hits 0.01
.11:00:29
(snap 1855
) to 15:00:04
(snap 1859
) hits 0.01
.09:00:48
(snap 1877
) to 15:00:44
(snap 1883
) hits 0.01
.The periods around 28-Cze-25 00:00:55
(snap 1724
) to 05:00:58
(snap 1729
) and 29-Cze-25 00:00:44
(snap 1748
) to 05:00:29
(snap 1753
), and 05-Lip-25 00:00:02
(snap 1892
) to 06:00:05
(snap 1898
) have slightly higher ratios (up to 0.19
), but still indicate significant non-CPU waits. This suggests your database is always waiting, just more so during peak hours.
Let's break down what's got your database tied up in knots. The problem isn't CPU, it's waiting for stuff. A lot of stuff.
These are the events that directly impact user session response times. They're the bane of any application user's existence.
0.35
(Positive, moderate correlation)0.15%
(Seems low, but consistency is key)1936.31
(Total wait time is significant!)3122021.06
(Millions of single-block reads per hour?!)0.62
(Individual reads are fast, but the volume is deadly)wait/exec
suggests fast I/O, but the astronomical number of executions means your application is performing an insane amount of single-block lookups. This typically points to inefficient index usage, very selective queries touching many rows, or poor application design that iterates over data.AVG No. executions
(5M-9M
at peak) confirms that sheer volume, not slow I/O, is the problem here.enq: TX - row lock contention:
0.14
(Positive, but low)0.17%
(Again, seems low but is a top event)1829.70
(Total wait time is substantial)563.62
(Relatively few, but very long waits)3246.31
(Over 3 seconds per wait! This is terrible!)AVG wait/exec
means sessions are waiting for a very long time for locks to be released. This is a direct hit on concurrency and user experience. It's often caused by long-running transactions, uncommitted DML, or applications that frequently update the same rows (hot spots).AVG Wait (ms)
during these periods jumps to 7000-31000 ms
(7 to 31 seconds!), which is utterly unacceptable.0.22
(Positive, but low)0.04%
399.72
188869.94
2.12
0.07
(Very weak positive)0.02%
233.78
226131.50
1.03
OBJ$
, TAB$
). Look for SQL statements frequently accessing these blocks.0.05
(Very weak positive)0.01%
132.92
126104.36
1.05
Total Wait (s)
for this event, e.g., 25-Cze-25 01:00:52 (snap 1653)
(2316s
), and a continuous barrage of them across 28-Cze-25 04:00:49 (snap 1728) to 12:00:03 (snap 1736) and 29-Cze-25 01:00:53 (snap 1749) to 10:00:12 (snap 1758). The high occurrences of this event point directly to dictionary cache activity.0.67
(Strong positive correlation!)0.01%
(Still low percentage, but its strong correlation means it scales with overall DB activity)111.73
16941.35
6.60
COMMIT
or ROLLBACK
, LGWR must write the redo records from the log buffer to disk and confirm the write before the transaction is considered committed. High waits indicate slow I/O to redo logs or excessive commits/small transactions. While the overall percentage is low, its strong correlation means it's a significant bottleneck when DB Time is high.AVG Wait (ms)
(e.g., 30-Cze-25 08:00:24
(snap 1780) is 29.342 ms
, and 05-Lip-25 01:00:14
(snap 1893) is 6.632 ms
). These are individual commit latency issues.Load Profile
for high Redo MB/s
and Phy Writes MB/s
(which are indeed high, median 15MB/s
peaking at 90MB/s
). If you have redo log multiplexing, the actual amount of redo written to disk by LGWR is higher than Redo MB/s
multiplied by the number of copies. Verify LGWR statistics in "IO Stats by Function". If the latency for single writes is high, it points to disk. If not, it points to transaction commit frequency. Consolidate commits if possible.-0.07
(Very weak negative)1995s
), and a continuous high activity on 26-Cze-25 (snaps 1677, 1678, 1681, 1682), 27-Cze-25 (snaps 1701, 1702, 1706), and 28-Cze-25 (snaps 1725, 1726, 1730). This strongly suggests frequent, large sorts or hash joins spilling to disk.PGA_AGGREGATE_TARGET
or examine SQL IDs performing these writes (like bchy6g2yakv4k
, 1328bjaprbvy4
).-0.04
(Very weak negative)dc_object_grants
anomalies, it's a strong indicator of DDL activity impacting concurrency.7vpt1z3a9jr1s
is listed with a 0.38
correlation, let's assume this is the main culprit from this data point)
7vpt1z3a9jr1s
(MERGE type) - Highest correlation in provided output.0.32
(Moderate positive)01-Lip-25 08:00:28 (snap 1804)
and 06-Lip-25 22:00:38 (snap 1938)
.dc_object_grants
also shows anomalies, consider if grants/revokes are frequently issued.These affect the overall health and performance of the database's internal operations.
0.59
(Strong positive correlation)39.86%
(A massive portion of your DB Time!)3928.93
1976575.46
1.99
1.99 ms
), the sheer volume of redo generated is overwhelming the I/O subsystem or LGWR's ability to keep up. Your Redo MB/s
in the Load Profile is 15MB/s
(median) and can go up to 90MB/s
. This is certainly contributing to the wait.26-Cze-25 19:00:04 (snap 1695)
, 20:00:12 (snap 1696)
, 23:00:34 (snap 1699)
.wait/exec
is low, the sheer volume of writes can saturate the I/O subsystem. Confirm if redo logs are on the fastest possible storage (e.g., local NVMe SSDs).INSERT
/UPDATE
/DELETE
operations, NOLOGGING
operations where appropriate for transient data). Check for LGWR stats
in IO STATS by Function
which shows Write Data (MB)/sec: 48.27
and Write Requests/sec: 1492.58
for LGWR, with a Wait Avg Time (ms): 1.05
. This indicates that individual writes are fast, but the rate is high. Multiplexing redo (having multiple copies of redo files) is a good practice for durability, but it means LGWR performs that many more physical writes for the same logical redo size, further stressing the I/O._LOG_FILE_ASYNC_IO=TRUE
(if not already set, but typically default): Enables LGWR to use asynchronous I/O if the OS supports it.0.53
(Strong positive correlation)10.18%
(Significant portion!)5717s
and 4350s
), and then 30-Cze-25 08:00:24 (snap 1780) (4872s
), 01-Lip-25 08:00:28 (snap 1804) (7634s
), and 08-Lip-25 07:00:04 (snap 1971) and 08:00:21 (snap 1972) (6321s
and 8103s
). Notice the particularly high AVG Wait (ms)
during these peaks (e.g., 28-Cze-25 01:00:06
is 6.595 ms
, and 30-Cze-25 08:00:24
is 13.729 ms
). These are problematic spikes.AVG Wait (ms)
suggest intermittent I/O slowdowns.FAST_START_MTTR_TARGET
can increase DBWR activity.0.59
(Strong positive correlation)9.92%
1857s
), and 06-Lip-25 00:00:35 (snap 1916) (2002s
).RMAN backup & recovery I/O
:
-0.14
(Very weak negative)3.01%
AVG, 7.07%
STDDEV) indicate it can be a significant consumer of resources.25-Cze-25 00:00:37 (snap 1652)
3978s
, 29-Cze-25 00:00:44 (snap 1748)
4113s
, 05-Lip-25 01:00:14 (snap 1893)
16405s
). The AVG Wait (ms)
for some of these peaks is hundreds of milliseconds (e.g. 05-Lip-25 02:00:27
is 258.882 ms
).STDDEV
suggests highly variable backup performance.0.60
(Strong positive)25-Cze-25 00:00:37 (snap 1652)
(902s
) and 07-Lip-25 08:00:06 (snap 1948)
(1017s
).log file sequential read (Background):
0.17
(Weak positive)0.40
(Moderate positive)0.02
(Very weak positive)Disk file operations I/O (Background):
-0.13
(Very weak negative)Total Wait
in thousands of seconds and AVG Wait
in hundreds or thousands of milliseconds. This is a major issue on those specific dates.ASM file metadata operation (Background):
0.22
(Weak positive)Your database is primarily I/O and concurrency bound.
Let's name and shame some of these SQLs. The distinction between "short but many executions" and "inherently slow" is crucial.
aubnkrv6cz41z
(SELECT, XXXX.Services.Cache.Promotions.App.exe
):
0.07s
(70ms) - Short execution time.77041.73
- Many executions.6354.54s
).-0.12
(Weak negative) - Interestingly, this SQL's busy periods don't strongly align with overall DB busy periods.CPU + Wait for CPU
(10.19% AVG) - This is CPU bound when it runs.SELECT
. The direct path read could imply it's doing full scans of large segments, or that data it needs is not in the buffer cache. The CPU + Wait for CPU
in ASH confirms it's doing work on the CPU during its execution, which conflicts with the overall DB Time / DB CPU ratio being very low, meaning this SQL is efficient when it gets the CPU.15542.590s
elapsed time. This specific SQL warrants deep dive.0hhmdwwgxbw0r
(SELECT, MODULE: None):
0.49s
(490ms) - Relatively slow execution time.8649.51
- Many executions.0.19
(Weak positive).28dxvd44z5rwf
(MERGE, XXXX.Services.Cache.Promotions.App.exe
):
0.44s
(440ms) - Relatively slow execution time per execution.5801.54
- Many executions.-0.02
(Negligible).CPU + Wait for CPU
(5.42%). Confirms hot block contention.MERGE
statement is a major culprit for many types of contention, especially read by other session and row cache mutex. This implies it's frequently accessing "hot" blocks and potentially causing dictionary cache contention. It's hitting pretty much every major internal bottleneck. This is a critical SQL to tune.7h6kvx22p1mvc
(SELECT, Oracle Enterprise Manager.Metric Engine
):
131.48s
(Over 2 minutes!) - Extremely slow execution time.1.99
- Few executions.-0.66
(Strong negative) - When this SQL runs, DB Time goes down. This is typical for background maintenance tasks that run during quiet periods.d7z8xat152jcu
(SELECT, XXXX.Repo.Oracle
):
3.92s
(Almost 4 seconds) - Slow execution time.159.59
- Moderate executions.0.88
(Very strong positive correlation) - This SQL drives DB Time. When this SQL is busy, your database is busy.CPU + Wait for CPU
(1.43%).dvtr3uwuqbppa
(INSERT, XXXX.Services.Cache.Promotions.App.exe
):
4.93s
(Almost 5 seconds) - Slow execution time.7152.39
- Many executions.0.15
(Weak positive).INSERT
statement is a monster of contention. Its almost perfect correlation (0.97
) with enq: TX - row lock contention tells you exactly where your TX
contention is coming from. This SQL is literally battling other sessions for row locks. It also hits db file sequential read (index reads for inserts), row cache mutex (dictionary contention), and undo segment extension (large transactions or frequent undo segment usage). This is a top priority to tune.aubnkrv6cz41z
is the primary candidate here. Its Ela by Exec
is low, but the sheer volume makes it expensive. Optimize its execution plan further to reduce logical I/O or executions if possible.0hhmdwwgxbw0r
, 28dxvd44z5rwf
, d7z8xat152jcu
, dvtr3uwuqbppa
are the main culprits. They are either individually slow and execute often, or very slow per execution. These are your prime targets.A high STDDEV
relative to AVG
implies inconsistent performance. Let's look at the worst offenders:
enq: TX - row lock contention (Foreground):
AVG Wait Time (s)
: 1829.70
, STDDEV
: 3287.56
. STDDEV
is almost double the AVG
. Highly inconsistent waits. This means some waits are much longer than average, causing sporadic but severe application slowdowns. This is confirmed by the high AVG wait/exec
(3246.31 ms
).dvtr3uwuqbppa
(INSERT), indicating this particular SQL is likely driving the lock contention.direct path write temp (Foreground):
AVG Wait Time (s)
: 98.95
, STDDEV
: 272.43
. STDDEV
is nearly three times the AVG
. Very inconsistent waits. Spiking temporary I/O.bchy6g2yakv4k
, 1328bjaprbvy4
(UPDATE) are highly correlated. These SQLs are likely doing large sort/hash operations that spill to temp.db file parallel write (Background):
AVG Wait Time (s)
: 1386.45
, STDDEV
: 1534.88
. STDDEV
is slightly higher than AVG
. Inconsistent DBWR writes. This can contribute to uneven checkpointing or DML commit times.DB Time
, meaning it's a systemic bottleneck that gets worse as the database gets busier.RMAN backup & recovery I/O
(Background):
AVG Wait Time (s)
: 692.27
, STDDEV
: 3253.98
. STDDEV
is nearly five times the AVG
. Extremely inconsistent RMAN I/O. This shows huge variability in backup performance, sometimes causing significant I/O bursts.db file sequential read (Foreground):
AVG No. executions
: 3122021.06
, STDDEV
: 3003328.86
. STDDEV
is almost equal to AVG
. This implies a highly variable volume of single-block reads. Sometimes it's high, sometimes it's through the roof.Interpretation:
The high STDDEV
values, especially for enq: TX - row lock contention and direct path write temp, highlight that the problem isn't just consistent slowness but unpredictable spikes that likely cause significant user complaints. db file parallel write and log file parallel write are more consistently high but also show periods of increased struggle.
Your MAD parameters are threshold = 7
and window size = 10% (32 of probes out of 327)
. This is a reasonable setup for detecting significant deviations from the median, indicating "anomalies".
The Anomaly Summary
table is gold. It ties together problematic events, statistics, and even SQL IDs by specific dates and snap IDs.
The Period with the Biggest Amount of Anomalies:
Looking at the Count
column in the Anomaly Summary
, the most problematic periods (dates with the highest number of co-occurring anomalies) are:
192
anomalies. This date is a dumpster fire.187
anomalies. Another lovely day.149
anomalies.134
anomalies.133
anomalies.133
anomalies.122
anomalies.93
anomalies.These dates (especially June 29th and 30th, around business hours) clearly represent periods of severe, widespread performance degradation affecting multiple areas of the database.
Patterns of Occurring Latches, Statistics, and Wait Events:
Many clusters are interconnected, showing systemic problems:
row cache mutex and latch: redo allocation: These two latches appear very frequently together in anomaly clusters, e.g., on 25-Cze-25 01:00:52 (snap 1653), 26-Cze-25 01:00:38 (snap 1677), 27-Cze-25 08:00:19 (snap 1708), 28-Cze-25 05:00:58 (snap 1729), etc.
cursor: pin S wait on X and library cache lock in the same cluster:
dc_object_grants
also anomalous: This confirms the suspicion. Granting/revoking privileges, even within an application, can cause DDL. Frequent changes to user/object privileges during system work can be a major source of library cache contention. This is poor architectural design for a production system. MOS Note 1484705.1 "High 'Cursor: Pin S Wait On X' or 'Library Cache Lock' Wait Events due to DDL in a Busy System" is relevant.enq: CR - block range reuse ckpt in top events or anomalies:
RECYCLEBIN$
issues, specifically when objects are frequently dropped and re-created (or purged from recyclebin). The database is trying to clear space but encountering contention.dc_table_scns
or dc_tablespaces
also in cluster: These are dictionary cache objects related to table segment metadata and tablespace properties. Their co-occurrence with enq: CR - block range reuse ckpt strongly suggests RECYCLEBIN$
problems. Frequent dropping and purging of objects (dynamic object management) can cause this, leading to contention for dictionary entries related to space management.PURGE RECYCLEBIN;
). Investigate application design if objects are frequently dropped and created.user logons cumulative
and user logouts cumulative
in the same anomaly cluster:
Load Profile Anomalies
with a MAD score, but I will comment on the concept as requested).AVG
and/or STDDEV
for their rate), it suggests a "logon storm." This is when many sessions connect and disconnect very rapidly.USER$
, TS$
, C_OBJ#
). Rapid storms can exhaust listener resources, shared pool memory, and cause severe dictionary cache contention. It's an application design flaw, often due to improper connection pooling or stateless connections frequently re-establishing.Time Model anomaly failed parse elapsed time
:
Anomaly Summary
).alert.log
file for ORA-
errors, particularly ORA-009xx
(syntax errors), ORA-01031
(insufficient privileges), or ORA-04021
(deadlock detected while trying to lock object). Also, check V$SQL_MONITOR
(for currently running) or DBA_HIST_SQLSTAT
for FAILED_EXEC_COUNT
and FAILED_PARSE_COUNT
. High values point to application code defects or security issues.Based on the highest counts of co-occurring anomalies and the lowest DB CPU / DB Time
ratios, the most problematic periods are consistently during your weekdays, especially from June 29th through July 4th, within the typical business hours.
Specifically,
These periods are characterized by high enq: TX - row lock contention, massive db file sequential read events, and widespread dictionary cache (row cache mutex) and redo allocation (latch: redo allocation) contention, all contributing to the severely low DB CPU / DB Time
ratio.
Let's cross-reference the top wait events with the anomalous SQLs:
Heavy Wait Event: enq: TX - row lock contention:
dvtr3uwuqbppa
(INSERT). This is your prime suspect. Its 0.97
correlation with TX
enqueue waits is practically a smoking gun. This INSERT is causing major row-level contention. Check the table it's inserting into and the application logic around it. Ensure no SELECT FOR UPDATE
is being used unnecessarily on the target table by other sessions that don't actually intend to modify data.aubnkrv6cz41z
(SELECT). While it's a SELECT, its 0.52
correlation suggests it's getting caught up in the crossfire of the DML. This could be consistent read blocks being modified, or perhaps a SELECT FOR UPDATE
hidden in the code. Given it's a SELECT, it's more likely a victim rather than a cause, but it's worth checking if it's explicitly locking rows.Heavy Wait Event: db file sequential read:
28dxvd44z5rwf
(MERGE). Its 0.43
correlation indicates it contributes to or is affected by many single-block reads.argquxfa38zf9
(DELETE). Its 0.37
correlation also implies it's doing many single-block reads (e.g., index scans to find rows to delete).Heavy Wait Event: log file parallel write: (Background event, so direct SQL correlation is tricky, but SQLs that generate a lot of redo will contribute)
d7z8xat152jcu
(SELECT) with 0.68
correlation to log file sync. This SQL is doing work that leads to commits. Even if it's a SELECT
, it could be part of a larger transaction or trigger a DML indirectly. This will contribute heavily to LGWR activity.39mqc7ffby8x9
(UPDATE) with 0.34
correlation to log file sync. Updates generate redo, so this is expected.The statistic table fetch continued row
shows up in several anomaly clusters, specifically:
Meaning: table fetch continued row
indicates the number of rows that spanned multiple blocks. This occurs with chained or migrated rows. Chained rows happen when a row is too large to fit in a single data block and has to be stored in multiple blocks. Migrated rows happen when a row is updated and grows in size, but there isn't enough free space in the original block, so it's moved to a new block, leaving a "pointer" behind.
Impact: Both chained and migrated rows increase logical I/O (requiring more block reads to retrieve a single row) and can degrade performance, especially for full table scans or queries accessing many rows. This aligns with your very high Logical Reads (MB)/s
in the Load Profile.
Further AWR Sections to check: To find the probable segments responsible for chained/migrated rows, you should look into the "Segments by Logical Reads" or "Segments by Physical Reads" sections of the full AWR report. Specifically, you'd look for:
V$SEGMENT_STATISTICS
: Query this view for statistics like 'table fetch by rowid' (which includes fetches of chained rows) and 'physical reads direct'.DBA_TABLES.CHAIN_CNT
: This column explicitly tracks the number of chained rows for each table. A high number here means you definitely have a problem.PROMOTIONDEFINITIONS
and LKW1
have extremely high logical reads. These are prime candidates for having chained rows.Action: For tables with significant chained/migrated rows, consider:
ALTER TABLE MOVE
: Rebuild the table (and its indexes) to defragment space and ensure rows fit in single blocks. This usually requires an outage or online redefinition.PCTFREE
: Increase PCTFREE
for tables with growing rows to leave more space in blocks for future updates, reducing migration.This section gives us a breakdown of I/O activity by internal Oracle functions.
Buffer Cache Reads:
Read Data (MB)
: 500297.28
(Mean total data read through buffer cache across all reports).Read Data (MB)/sec
: 138.94
.Read Requests/sec
: 2320.60
.Wait Avg Time (ms)
: 0.28
.Read Data (MB)/sec
is fairly high, consistent with a busy OLTP system. The Wait Avg Time
is very low, meaning individual reads are fast, confirming your storage is not inherently slow for reads. The Read Requests/sec
of 2320
is substantial, reinforcing the high logical I/O seen in Load Profile. This all points to Oracle doing a lot of work from cache, not necessarily directly from disk.DBWR:
Write Data (MB)
: 73776.85
.Write Data (MB)/sec
: 20.49
.Write Requests/sec
: 738.86
.Wait Avg Time (ms)
: 0.69
.Write Data (MB)/sec
is reasonable. The Wait Avg Time
is low, indicating that individual writes are fast. However, compare this to the db file parallel write event where average wait time for the event (not the underlying I/O function) was higher, indicating that contention or the sheer volume of writes is the issue, not necessarily the disk speed for individual blocks. The STDDEV
for Write Data (MB)
is almost as high as the mean, showing variability in write workload.Direct Reads:
Read Data (MB)
: 142478.80
.Read Data (MB)/sec
: 39.58
.Read Requests/sec
: 140.55
.Wait Avg Time (ms)
: 0.25
.Wait Avg Time
is extremely low, meaning your direct I/O is very efficient. This indicates that your storage can handle large sequential reads quickly. However, the high volume might still suggest unnecessary full table scans if these aren't expected.Direct Writes:
Write Data (MB)
: 18318.95
.Write Data (MB)/sec
: 5.09
.Write Requests/sec
: 38.04
.Wait Avg Time (ms)
: 0.28
.LGWR:
Write Data (MB)
: 173746.81
.Write Data (MB)/sec
: 48.27
.Write Requests/sec
: 1492.58
.Wait Avg Time (ms)
: 1.05
.48.27 MB/s
of redo, which is more than double DBWR's data writes, and it's doing over 1492
write requests per second. The Wait Avg Time
of 1.05 ms
for LGWR's underlying I/O is fast. This unequivocally means your log file parallel write problem (39.86% DB Time) is NOT about slow disk write latency per operation, but about the sheer volume and frequency of redo generation saturating the LGWR process and its ability to keep up. It's pushing data as fast as the disks can handle it, but the application is just generating more. This implies a very high commit rate (confirming User Commits/snap
from Load Profile) or very large transactions generating huge amounts of redo.RMAN:
Read Data (MB)/sec
: 51.73
.Write Data (MB)/sec
: 7.53
.Wait Avg Time (ms)
: 0.20
.Cross-reference Conclusion from IO Stats by Function: Your storage system seems reasonably fast for both sequential and random I/O at the individual operation level. The bottleneck is not primarily disk latency, but the volume of I/O requests and redo generated by the application workload. The database is churning through data and changes at an incredible rate, and while the I/O system is efficient, it's struggling to keep up with the sheer demand. This leads to queues and waits, despite fast individual operations. The log file parallel write is a prime example: many fast small writes still stack up.
This section helps pinpoint which database objects are at the heart of your problems.
TOP 10 Segments by Buffer Busy Waits:
OBJ$
, TAB$
, I_OBJ1
, COL$
, CDEF$
: These are all Oracle data dictionary tables and indexes (OBJ$
, TAB$
, COL$
, CDEF$
are internal tables, I_OBJ1
is an index on OBJ$
). Their high occurrence (51.07%
for OBJ$
, 32.72%
for TAB$
) in Buffer Busy Waits
indicates massive contention on the data dictionary.Hard Parses/s
in the Load Profile, and SQLs like 28dxvd44z5rwf
(MERGE) that show high row cache mutex correlation.PRODUCTS_ROWVERSION3
, PRODUCTS_ROWVERSION2
(INDEX): These are application indexes, likely on PRODUCTS
table. Their presence suggests hot spots on these indexes, perhaps indicating high insert/update activity causing contention on the index blocks themselves.CONTRACTORPROMOTIONREFS_PK
(INDEX): Another application index seeing heavy buffer busy waits.OBJ$
, TAB$
, COL$
, CDEF$
, I_OBJ#
, I_COBJ#
) appear frequently in buffer busy waits, it usually means the application is constantly creating/dropping objects, or doing frequent DDL, or has extreme hard parsing due to lack of bind variables. This is terrible for performance and scalability as it serializes access to critical metadata. Applications should strive for stable schemas and bind-variable-aware SQL.TOP 10 Segments by Direct Physical Reads:
N13
, N23
, F24N23
(TABLE): These appear to be application tables experiencing direct path reads.SYS_LOB0000026738C00013$$
(LOB): A LOB segment seeing direct reads. LOBs often use direct path I/O by default.TMPCONTRACTORIDS
(TABLE): This is a temporary table. Its frequent appearance confirms that large sort/hash operations are spilling to temp, consistent with direct path read temp wait events.FULL
hints, parallel queries, or just very large segments being scanned.TOP 10 Segments by Direct Physical Writes:
SYS_LOB0000026738C00013$$
(LOB): LOB segment for writes.BIN$ONnCv5ZOlLHgY8wBqMCcJg==$0
(TABLE) and other BIN$
tables: These are objects in the recycle bin. Their presence here is a huge red flag. They imply frequent dropping of objects, which get sent to the recycle bin and then potentially purged, generating writes. This is directly connected to enq: CR - block range reuse ckpt and RECYCLEBIN$
problems.TMPCONTRACTORIDS
(TABLE): Temporary tables, indicating large operations spilling to temp.BIN$
tables are highly concerning and point to poor object lifecycle management within the application.TOP 10 Segments by Logical Reads:
RECYCLEBIN$
(TABLE): 908M
logical reads! This table is consuming an unbelievable amount of logical I/O. This is the problem for your enq: CR - block range reuse ckpt and other dictionary contention. It's likely involved in frequent purges or lookups related to dropped objects.PROMOTIONDEFINITIONS
, LKW1
, KONTRAH
, PROMOTIONDEFINITIONS
, F03PROMOC1
, AKWIZYT
, F05PROMOC1
(TABLEs): Application tables with extremely high logical reads. These are your hot tables
in the buffer cache. They are frequently accessed, leading to high logical I/O
and contention (e.g., read by other session).RAPORTLG_PK
(INDEX): High logical reads on an application index.SEG$
(TABLE): Oracle dictionary table, another internal table seeing heavy logical I/O, supporting dictionary contention findings.RECYCLEBIN$
and several core tables extremely hard in the buffer cache. This implies queries doing many logical I/Os (e.g., inefficient joins, excessive index lookups, full scans on small tables).TOP 10 Segments by Physical Read Requests:
RAPORTLG_RAPORTLG
(INDEX), CONTRACTORPROMOTIONREFS_PROMID
(INDEX), CONTRACTORPROMOTIONREFS_PK
(INDEX): These are indexes. High physical read requests on indexes often indicate frequent index scans where the blocks are not in cache (cold blocks), or where many index blocks need to be read for a single operation.RAPORTLG
, PRODUCTS
(TABLE): Tables seeing high physical read requests.N23
(TABLE): Another table seeing high physical read requests, possibly via direct path reads.OBJ$
(TABLE): Data dictionary table, indicating its blocks are being frequently read from disk.CONTRACTORPROMOTIONREFS
family) and specific tables being hit hard.TOP 10 Segments by Physical Write Requests:
PRODUCTS
, CONTRACTORPROMOTIONREFS_PROMID
, PRODUCTS_ROWVERSION
, PRODUCTTAGS_ROWVERSION
, CONTRACTORPROMOTIONREFS_PK
, PRODUCTS_ROWVERSION1
(TABLEs & INDEXes): These are all application-related segments. High physical write requests mean a lot of DML activity.SEG$
(TABLE): Oracle dictionary table, seeing frequent physical write requests, possibly related to space management or object modifications.TOP 10 Segments by Row Lock Waits:
I_OBJ#
, I_COBJ#
, I_FILE#_BLOCK#
, I_OBJ4
(INDEXES): These are Oracle internal indexes. Their presence here is extremely alarming. I_OBJ#
is the primary key index on OBJ$
, I_COBJ#
is on COL$
. Contention on these indexes signifies deep dictionary cache contention and likely problems with DDL or metadata access.PROMOTIONDEFINITIONS
(TABLE): 31.804%
occurrence. This is a very hot application table for row locks. This table is a strong candidate for a dvtr3uwuqbppa
(INSERT) contention.CONTRACTORPROMOTIONREFS_PK
(INDEX): An application index also experiencing row lock contention. This can happen if sessions are trying to insert into an index block while another session has it locked for modification.TRAS3
(TABLE), PRODUCTTAGS
(TABLE): Other application tables with row lock waits.dvtr3uwuqbppa
(INSERT): AVG Ela by Exec: 4.93s, AVG No. executions: 7152.39. This is an INSERT
statement, which definitely performs row locks. Its strong correlation (0.97
) with enq: TX - row lock contention makes it the absolute top culprit.aubnkrv6cz41z
(SELECT): AVG Ela by Exec: 0.07s, AVG No. executions: 77041.73. This is a SELECT
. While it has 0.52
correlation, SELECT
statements usually do not cause TX
row locks unless it's SELECT FOR UPDATE
. You need to investigate if this SQL uses FOR UPDATE
. If not, it's a victim, waiting for other transactions.28dxvd44z5rwf
(MERGE): AVG Ela by Exec: 0.44s, AVG No. executions: 5801.54. MERGE
statements can cause TX
locks on both source and target rows. Its 0.45
correlation makes it a significant contributor.
(If other SQLs were provided with high TX
correlation, I'd list and analyze them here, focusing on DML operations.)Suggested other window size or threshold for MAD algorithm:
3
or 4
. This would cast a wider net and highlight more deviations, which might be helpful for identifying emerging issues before they become critical.Oracle MOS notes describing the problems:
enq: TX - row lock contention:
cursor: pin S wait on X and library cache lock:
log file parallel write / log file sync:
Chained Rows (table fetch continued row
):
RECYCLEBIN$
and related dictionary contention:
RECYCLEBIN$
behavior is covered in documentation for PURGE TABLESPACE/DATABASE
.Alright, hereβs the bottom line, spelled out like it's for kindergarteners, but with more sarcasm: Your database isn't slow because it's thinking too hard. It's slow because it's waiting for everything.
The Core Problems:
Redo MB/s
, Phy Writes MB/s
). Your application is a DML-generating machine.dvtr3uwuqbppa
), read by other session, and buffer busy waits indicate sessions are constantly bumping into each other on frequently accessed data blocks and records.OBJ$
, TAB$
, COL$
, CDEF$
in busy waits, and high Hard Parses/s
mean Oracle's internal metadata structures are a major bottleneck. This is exacerbated by RECYCLEBIN$
activity and potentially frequent DDL or grant changes.Logical Reads (MB)/s
suggest queries are doing way too much work in memory, visiting unnecessary blocks, or suffering from chained rows.Top Priority Action Plan (Because nobody wants to hear "it's complicated"):
dvtr3uwuqbppa
(INSERT) and enq: TX - row lock contention:
INSERT
statement (dvtr3uwuqbppa
). Is it batching too many rows in one transaction, leading to long-held locks? Can it be broken down or committed more frequently?PROMOTIONDEFINITIONS
. Can the locking strategy be improved? Consider using DBMS_ROWID
to find the exact rows and tables affected during peak times if necessary.NOLOGGING
options viable for temporary data loads? Can INSERT /*+ APPEND */
be used for bulk inserts?XXXX.Services.Cache.Promotions.App.exe
module. This will drastically reduce Hard Parses/s
and thus row cache mutex contention.RECYCLEBIN$
Cleanup: Schedule PURGE RECYCLEBIN;
(or PURGE DBA_RECYCLEBIN;
) during quiet periods to reduce contention on RECYCLEBIN$
and associated dictionary objects.aubnkrv6cz41z
and tables like RECYCLEBIN$
, PROMOTIONDEFINITIONS
, LKW1
, KONTRAH
. Examine their execution plans. Are they doing unnecessary full table scans or inefficient index access?table fetch continued row
anomalies (like those on June 25th-28th), identify them using DBA_TABLES.CHAIN_CNT
and rebuild them with appropriate PCTFREE
to eliminate chaining. This will reduce logical I/O for those tables.PGA_AGGREGATE_TARGET
. If queries are frequently spilling to disk, they might benefit from more PGA, or the queries themselves need tuning to reduce memory requirements.Don't just stare at the pretty graphs. Get to work. The database isn't going to fix itself while you're busy making coffee.
Your source code: https://github.com/ora600pl/jas-min Need more expert analysis? The good performance tuning experts are at ora-600.pl.