The Global Cache and Enqueue Services – Workload Characteristics section in the AWR report reflects how efficiently Oracle RAC nodes coordinate block access through the Global Cache Service (GCS) and Global Enqueue Service (GES). In other words, it tells us how fast blocks are transferred between nodes, and whether the interconnect and block management are healthy or suffering from contention.

Here’s a sample from a healthy AWR report:

Avg global enqueue get time (ms):0.0
Avg global cache cr block receive time (ms):0.6
Avg global cache current block receive time (ms):0.4
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 %:11.8
Avg global cache cr block flush time (ms):1.0
Avg global cache current block pin time (ms):0.0
Avg global cache current block send time (ms):0.0
Global cache log flushes for current blocks served %:1.3
Avg global cache current block flush time (ms):1.0

Understanding Receive Time

The “Avg global cache cr block receive time” and “Avg global cache current block receive time” metrics measure the average duration for a RAC node to acquire consistent read (CR) blocks (used for SELECT queries) and current blocks (used for DML operations like INSERT/UPDATE), respectively, from another node’s cache.

In a single-instance database, these blocks would instead be fetched directly from local disk or memory, without inter-node communication. Therefore, if the time to fetch blocks from remote nodes in RAC is slower than reading them from disk, it suggests that using RAC may not be the right architectural choice for that workload.

Healthy values are typically under 1 ms. In the example, 0.6 ms for CR blocks and 0.4 ms for current blocks reflect excellent performance.

Calculating Average Receive Time

These averages derive from statistics in the “Key Instance Activity Stats” section of the same AWR report:

StatisticTotalper Secondper Trans
gc cr block receive time10,0992.810.10
gc cr blocks received180,20950.081.77
gc current block receive time10,9233.040.11
gc current blocks received263,21673.142.58

Note: The units for “gc cr block receive time” and “gc current block receive time” are centiseconds (1/100th of a second).

Oracle computes the averages as follows:

Avg CR block receive time (ms) = (gc cr block receive time per second / gc cr blocks received per second) × 10
= (2.81 / 50.08) × 10 ≈ 0.56 ms

Avg Current block receive time (ms) = (gc current block receive time per second / gc current blocks received per second) × 10
= (3.04 / 73.14) × 10 ≈ 0.41 ms 

These values align with the AWR report.

Block Transfer Breakdown

Block transfers in RAC occur in three phases on the serving node. These phases differ slightly by block type:

CR Block:

  • gc cr block build time: Builds a read-consistent image of the block.
  • gc cr block flush time: Flushes changes to the redo log if necessary.
  • gc cr block send time: Sends the block over the interconnect.

Current block:

  • gc current block pin time: Pins (locks) the block for exclusive transfer.
  • gc current block flush time: Forces a redo log write for any dirty changes.
  • gc current block send time: Sends the block to the requesting node.

The flush phase is often the slowest, but not every transfer requires it. Thus, the report includes flush ratios:

  • Global cache log flushes for cr blocks served %
  • Global cache log flushes for current blocks served %

Higher modification rates in the workload typically increase these percentages.

These phases occur on the serving node, so their times cannot be summed directly to derive the receive time on the requesting node. However, similar timing patterns may appear across nodes.

Note these three phases are going through on the serving node, so you can not sum the three phase to get the receive time in the receiving node. Althought the timing patterns can be similiar on the receiving node and the serving node.

Unthealthy Case Study

For contrast, consider this unhealthy example, where excessive flush times degrade performance:

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

Here, intolerably high flush times (266.7 ms for CR, 398.1 ms for current) are the primary culprits, inflating receive times and enqueue waits. This suggests redo log contention or I/O bottlenecks—common in write-heavy workloads.

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