Every write transaction is slow. TPS is down, p99 commit latency is up, and the slowdown hits writes uniformly across transaction types. No single SQL_ID is the culprit. CPU is underutilized while sessions pile up on a wait event. This is the Oracle slow commit cascade: the storage behind your online redo logs can no longer service LGWR’s commit flushes fast enough, and every COMMIT in the database pays the price.
The mechanism is the redo write path. Every COMMIT triggers LGWR to flush the redo log buffer to the online redo logs, and the committing session blocks on log file sync until LGWR confirms the write is on disk. When redo storage degrades, LGWR’s own I/O wait (log file parallel write) climbs, and the foreground log file sync follows it upward. Because the bottleneck is on the universal commit path, the impact is global, not query-specific.
This article covers how to confirm the cascade, distinguish it from lookalikes (LGWR CPU starvation, plan regression, lock contention), and what to do under pressure when every minute of slow commits is a minute of user-visible latency.
What this means
In a healthy OLTP system on SSD or NVMe, average log file sync sits under 1 ms and log file parallel write is similar. When redo storage degrades, both climb together. The relationship between the two events is the diagnostic anchor:
log file syncis the foreground session’s view: time from issuing COMMIT until LGWR posts completion.log file parallel writeis LGWR’s view: the actual disk write latency for the redo flush.- If both are elevated, the bottleneck is physical I/O on the redo devices.
- If
log file syncis high butlog file parallel writeis low, LGWR is being starved of CPU or delayed by scheduling. That is a different problem with a different fix.
The cascade propagates as follows:
- Redo storage latency rises (failing SSD, SAN path contention, redo sharing a device with data files, I/O scheduler or filesystem regression).
- LGWR’s
log file parallel writeclimbs. - Foreground
log file syncwaits follow. - Every COMMIT takes longer, so every write transaction takes longer, regardless of which SQL it runs.
- Redo logs cycle faster relative to DBWn’s checkpoint progress, and
Checkpoint not completeappears in the alert log. - TPS declines uniformly while CPU stays comparatively idle, because sessions are blocked on I/O rather than computing.
flowchart TD
A[Redo storage degrades] --> B[log file parallel write climbs]
B --> C[log file sync climbs]
C --> D[Every COMMIT waits longer]
D --> E[TPS declines uniformly]
B --> F[DBWn checkpoint falls behind]
F --> G[Checkpoint not complete]
G --> H[log file switch waits]The defining feature is uniformity. Plan regression spikes specific SQL_IDs. Lock contention chains behind a single blocker. CPU saturation shows high run-queue with low I/O wait. The slow redo cascade shows all write transactions slower, both redo wait events elevated together, and physical read latency on data files often unaffected.
Common causes
| Cause | What it looks like | First thing to check |
|---|---|---|
| Redo logs sharing storage with data files | I/O contention spikes when DBWn and LGWR compete; both redo and data file latency rise together | V$LOGFILE member paths vs V$DATAFILE paths; are they on the same LUN? |
| Failing SSD or wear-out | Write latency climbs over days or weeks; SMART errors; redo writes worse than reads | iostat -x 1 5 on the redo device, vendor SMART / array diagnostics |
| SAN path degradation | Latency jumps during specific windows; multipathing flap; array-side contention | Array-side latency stats, multipath status, HBA errors |
| Filesystem mount regression | Latency increases after a remount or kernel upgrade; journaling mode wrong | /proc/mounts for the redo filesystem; ext4 data=journal is bad for redo |
| I/O scheduler change | Latency changes after a host reboot or udev rule change; cfq/bfq on redo device | cat /sys/block/<dev>/queue/scheduler |
| VMware snapshot or storage vMotion on redo LUN | Latency spike correlates with VM-level storage event | vCenter task history for the affected VM |
| Redo log multiplexing to a slow member | Every group write pays the slowest member’s latency | V$LOGFILE and per-member device performance |
Quick checks
Run these first. They are all read-only.
-- Compare the two redo wait events side by side
SELECT EVENT, TOTAL_WAITS, TIME_WAITED_MICRO,
ROUND(TIME_WAITED_MICRO / NULLIF(TOTAL_WAITS, 0) / 1000, 2) AS avg_ms
FROM V$SYSTEM_EVENT
WHERE EVENT IN ('log file sync', 'log file parallel write');
-- Dominant non-idle wait class right now
SELECT NVL(WAIT_CLASS, 'ON CPU') AS wait_class, COUNT(*) AS sessions
FROM V$SESSION
WHERE STATUS = 'ACTIVE' AND TYPE = 'USER' AND WAIT_CLASS != 'Idle'
GROUP BY NVL(WAIT_CLASS, 'ON CPU')
ORDER BY COUNT(*) DESC;
-- Redo generation rate (sample twice, divide delta by seconds)
SELECT VALUE FROM V$SYSSTAT WHERE NAME = 'redo size';
-- Transactions per second (sample twice)
SELECT VALUE FROM V$SYSSTAT WHERE NAME IN ('user commits', 'user rollbacks');
-- Log switch frequency in the last day
SELECT TO_CHAR(FIRST_TIME, 'YYYY-MM-DD HH24') AS hour, COUNT(*) AS switches
FROM V$LOG_HISTORY
WHERE FIRST_TIME > SYSDATE - 1
GROUP BY TO_CHAR(FIRST_TIME, 'YYYY-MM-DD HH24')
ORDER BY 1;
-- Checkpoint-related waits
SELECT EVENT, TOTAL_WAITS, TIME_WAITED_MICRO
FROM V$SYSTEM_EVENT
WHERE EVENT LIKE 'log file switch%';
# OS-level redo device latency; look at await and %util for the redo LUN
iostat -x 1 5
# Alert log for checkpoint pressure
adrci exec="show alert -tail 200"
# Or grep the alert log directly:
grep -i "checkpoint not complete\|cannot allocate new log" \
$ORACLE_BASE/diag/rdbms/*/*/trace/alert_*.log | tail -30
How to diagnose it
- Confirm the cascade pattern. Query
V$SYSTEM_EVENTfor bothlog file syncandlog file parallel write. Both should be elevated. If onlylog file syncis high andlog file parallel writeis low, stop. The problem is LGWR scheduling or CPU, not redo storage, and the fix is different. - Verify the impact is uniform. Check
V$SQLfor top SQL by elapsed time per execution. In a slow redo cascade, no single SQL_ID has a dramatically worsened plan. Per-execution buffer gets are stable. This rules out plan regression. - Check the dominant wait class. The fastest triage signal is the wait class breakdown from
V$SESSION. IfCommitdominates active sessions, you are in this pattern. IfConcurrencyorApplicationdominates, you have a lock problem. - Measure the redo device at the OS layer.
iostat -x 1 5on the redo device. Compareawaitagainst the storage class. For SSD it should be in the low single-digit milliseconds; for SAN, typically under 5 ms. Sustainedawaitwell above the storage’s expected latency confirms physical I/O as the bottleneck. - Map redo log file placement. Cross-reference
V$LOGFILEmember paths withV$DATAFILEpaths. If redo and data files share a LUN, volume, or array port, you have structural contention and the fix is relocation. - Check for filesystem and scheduler regressions. Inspect
/proc/mountsfor the redo filesystem. ext4 withdata=journalis known to add redo latency; redo performs best ondata=writebackor raw ASM. Confirm the I/O scheduler on the redo block device isnone,noop, ordeadline, notcfqorbfq. - Look for
Checkpoint not completein the alert log. Its presence alongside rising redo waits confirms DBWn is being starved behind the same degraded storage. It is a downstream symptom, not the root cause. - Inspect redo log group count and sizing. Pull switch frequency from
V$LOG_HISTORY. Frequent switches plus checkpoint pressure suggest the redo logs are undersized for the current write rate, which amplifies any storage latency problem.
Metrics and signals to monitor
| Signal | Why it matters | Warning sign |
|---|---|---|
log file sync average wait | Foreground commit latency, the user-visible cost | >3 ms on SSD/NVMe, >10 ms on SAN sustained |
log file parallel write average wait | LGWR’s actual I/O time, confirms storage vs scheduling | Climbs in lockstep with log file sync |
| Transactions per second | Primary throughput signal | Uniform decline with stable app load |
| Redo generation rate (bytes/sec) | Workload intensity, rules out a write-rate spike | Spikes suggest workload change, not storage |
Checkpoint not complete in alert log | DBWn falling behind, downstream of redo pressure | Any sustained occurrence |
| Log switch frequency | Redo sizing vs write rate | More than a few per hour with checkpoint pressure |
OS await on redo device | Ground truth on physical write latency | Persistent elevation above storage spec |
Active sessions in Commit wait class | Live confirmation of the cascade | Commit class dominates active sessions |
Fixes
Move redo logs to dedicated fast storage
This is the actual fix. Redo logs are the most latency-sensitive I/O path in Oracle. Putting them on a dedicated device removes contention with DBWn and direct-path reads, and lets you size the device to the redo workload rather than to the union of all database I/O. ASM on raw devices or a dedicated LUN is the cleanest target. A filesystem is supported but introduces journaling and allocation overhead that can hurt tail latency. If you must use a filesystem, mount with data=writeback on ext4 and verify direct I/O is in effect.
Moving redo logs is online in terms of database availability, but it involves log switches. Plan it for a maintenance window. Add the new redo log groups on the new storage, switch logs, and drop the old groups once they are no longer current or required for recovery.
Add redo log groups and resize them upward
This does not fix bad storage, but it buys time. More and larger groups give DBWn a longer window to checkpoint before LGWR needs to wrap, which suppresses Checkpoint not complete and reduces log switch frequency. It is a holding action while you arrange better storage, not a substitute.
Address filesystem and scheduler regressions
If the cascade started after a kernel upgrade, remount, or udev rule change, suspect the I/O stack. Verify the redo filesystem is not in data=journal mode. Verify the scheduler on the redo block device is appropriate. Verify multipathing is healthy and that the path you expect is the path being used.
Remove slow multiplexed members
If a redo log group has a member on slow storage (a spun-down disk, an overloaded SAN LUN, an NFS mount), every group write pays that latency, because LGWR must write all members before posting completion. Drop the slow member or move it to storage with latency comparable to the other members.
Reduce commit frequency where you can
If storage cannot be improved immediately and the workload permits, batching commits reduces the number of times the slow path is exercised per unit of work. This is a workaround with application-semantics implications, not a fix. The commit path is still slow; you are simply hitting it less often.
Prevention
- Keep redo on dedicated storage. Treat redo log placement as an architectural decision, not a default. Do not colocate redo with data files, temp, archive, or anything else that competes for I/O.
- Monitor both redo wait events, not just
log file sync. A slow commit cascade is only confirmable when you can seelog file parallel writeclimbing alongside it. Single-signal monitoring will mislead you toward LGWR tuning when the problem is underneath it. - Alert on uniform TPS decline. A drop in TPS with stable application load, combined with elevated commit-class waits, is the early signature. Catch it before
Checkpoint not completeappears. - Track OS-level redo device latency. Oracle wait events are necessary but not sufficient.
iostat -xon the redo device is ground truth. - Watch redo log sizing relative to switch frequency. If switch frequency creeps up and you start seeing checkpoint pressure, resize before storage latency turns a sizing problem into a cascade.
- Validate after kernel and storage changes. Most cascades start with an external change: a remount with different options, a scheduler change, a SAN firmware update, a VM snapshot. Re-baseline redo latency after any storage-touching change.
How Netdata helps
- Per-second
log file syncandlog file parallel writelatency, side by side, makes the cascade confirmable in seconds rather than after a delta computation against cumulative counters. - TPS and redo generation rate are collected at the same per-second resolution, so a uniform TPS decline correlates cleanly against a commit-class wait spike.
- OS-level disk latency (
await,%util, queue depth) is collected on the same host and the same timeline as the Oracle wait events, so a redo-device problem shows up in both layers simultaneously. - ML anomaly detection flags deviation from the per-instance baseline for each wait event, which catches slow-moving storage degradation before it crosses a static threshold.
- The alert log signal from the Oracle integration surfaces
Checkpoint not completeand related messages alongside the metrics, so the downstream symptom is visible in the same view as the upstream cause. - Container, VM, and host layers are correlated, which matters when the trigger is a VMware snapshot, a storage vMotion, or a noisy neighbor rather than the database itself.
Netdata’s Oracle Database monitoring brings these signals together with per-second metrics and ML anomaly detection.






