I was given an Oracle AWR report where the client complained about intolerably slow performance.

Top 10 Foreground Events by Total Wait Time

EventWaitsTotal Wait Time (sec)Wait Avg(ms)% DB timeWait Class
gc buffer busy release776,713267.3K34431.9Cluster
enq: TX – index contention307,233261.5K85131.2Concurrency
log file sync476,290188.5K39622.5Commit
gc buffer busy acquire426,428116K27213.9Cluster
buffer busy waits463,65711.8K251.4Concurrency
db file sequential read122,63710.1K831.2User I/O
db file scattered read60,9748048.41321.0User I/O
reliable message1,045,5274079.74.5Other
gc current block busy13,6063866.1284.5Cluster
DB CPU3593.6.4

At first glance, I notice that the typical block transfer events (e.g. gc current/cr block 2-way/3-way) are absent. Instead, the dominant waits are contention-oriented:

  • gc buffer busy release
  • gc buffer busy acquire
  • gc current block busy
  • gc cr block busy

This pattern indicates that blocks were not being transferred smoothly across RAC nodes.

The problem is not the volume of block transfers, but the delays during the block shipping process.

To pinpoint which phase of the block transfer was problematic, I examined the“RAC Statistics” section in the AWR report. The data revealed the following metrics:

Global Cache and Enqueue Services – Workload Characteristics

Avg global enqueue get time (ms):50.2
Avg global cache cr block receive time (ms):3.8
Avg global cache current block receive time (ms):13.1
Avg global cache cr block build time (ms):0.0
Avg global cache cr block send time (ms):0.0
Global cache log flushes for cr blocks served %:9.5
Avg global cache cr block flush time (ms):266.7
Avg global cache current block pin time (ms):3.0
Avg global cache current block send time (ms):0.0
Global cache log flushes for current blocks served %:16.4
Avg global cache current block flush time (ms):398.1

The “Global Cache and Enqueue Services – Workload Characteristics” section confirms transfer inefficiencies. Both CR (consistent read) and current block receive times are elevated, exceeding healthy thresholds (of less than 1 millisecond.

In RAC, blocks are transferred between nodes through cache fusion, which involves three phases on the serving node: build/pin, flush, and send. In this case, the build/pin and send times are negligible (0 ms), but the flush times are extremely high—266.7 ms for consistent read (CR) blocks and 398.1 ms for current blocks.

The Top Event “log file sync” shows an average wait of 396 ms per commit, which is abnormally high and further confirms severe redo I/O latency.

Further investigation with the Storage and System Administrators revealed that the disk group holding redo logs was malfunctioning, causing excessive write latency.

Leave a comment

I’m Yuan

Welcome to the blog of a performance maven in Oracle & MySQL. Feel free to contact me to share and discuss database knowledge.

My 20 Oracle Certifications

A screenshot from certview.oracle.com

My Book

MySQL 8.0 Operations and Optimization

Let’s connect