Guenadi N Jilevski's Oracle BLOG


Overview of the global cache wait event overview

Overview of the global cache wait event overview

When a server process makes a request for a block image it has no way to know if it going to be satisfied  by 1 or 2 or 3 nodes. All it does is contact local LMS process and requests a particular block image. This can be current or cr request and can be either ordinary or multiblock request so to summarize the possibilities are as follows:

Gc current request

Gc current multiblock request

Gc cr request

Gc cr multiblock request

The placeholder holds those events above whilst the process is waiting to get this block image. Once the wait is over we will know what has happened and the wait_time will be non zero value and we will have the actual event the process have been waiting in the event column of the v$session_wait instead of the placeholder event and the wait time for the actual event in the wait_time column in the v$session_wait.  Let’s look at some of the events that are relevant.

Gc [current/cr] [2/3]-way – If  we have 2 node cluster  we cannot get 3-way as only two RAC instances are available and therefore only 2-way   is possible as we can have at most two hops. If we have three or more RAC instances then 2-way or 3-way is possible. Event are received after 2 or 3 network hops immediately. The event is not a subject to any tuning except increasing private interconnects bandwidth and decreasing the private interconnects latency.

Gc [current/cr] grant 2-way – Event when grant is received immediately. Grant is always local or 2-way. Grant occurs when a request is made for a block image current or cr and no instance have the image in its local buffer cache. The requesting instance is required to do an I/O from data file to get the blocks. The grant simply is a permission from the LMS this to happen that is, the process to read the block from the data file. Grant can be either cr or current. Gc current grant is go read the block from the database files, while gc cr grant is read the block from disk and build a read consistent block once is read.

Gc [current/cr][block/grant] congested – means that it has been received eventually but with a delay because of  intensive CPU consumption, memory lack, LMS overload due to much work in the queues, paging, swapping. This is worth investigating as it provides a room for improvement. We will look at it later.

Gc [current/cr] block busy – Received but not sent immediately due to high concurrency or contention. This means that the block is busy for example somebody issue block recover command from RMAN. Variety of reasons for being busy just means cannot be sent immediately but not because of memory, LMS or system oriented reasons but Oracle oriented reasons. It is also worth investigating and we will look at it later.

Gc current grant busy – Grant is received but there is a delay due to many shared block images or load. For example we are extending the high water mark and we are formatting the block images or blocks with block headers.

Gc [current/cr][failure/retry] –  Not received because of failure, checksum error usually in the protocol of the  private interconnect  due to network errors or hardware problems. This is something worth investigating. Failure means that cannot receive the block image while retry means that  the problems recovers and ultimately the block image can be received but it needs to retry.

Gc buffer busy – time between block accesses less than buffer pin time. Pin buffers can be in exclusive or shared mode depending if buffers can be modified or read only. Obviously if there is a lot of contention for the same block by different processes this event can manifest itself in grater magnitude. Buffer busy are global cache events as  a request is made from one instance and the block is available in another instance and the block is busy due to contention.

The key to remember is that there are separate wait events for the placeholder and when the event is over this event is replaced in v$session_wait with different event depending on how many hops there were, what kind of request was, what happened, was there a congestion, busy, failure or  retry.  Looking at v$ views or AWR reports we need to see if we observe congestion, busy, failure, retry and further investigate.

December 13, 2009 - Posted by | oracle


  1. Hi How to resolve ‘gc current grant busy’ if it shows up in Top 5 events in awr report.

    Comment by Sidhhart | July 3, 2011 | Reply

    • Hi,

      By design Oracle RAC utilizes the SGA caches of all instances to implement a global logical buffer cache using cache fusion and maintaing cache coherency.
      If a session in an instance requests a buffer that is not in the global cache than the mastering instance sends a grant to the requsting instance.
      It is only after the grant is received that the requsting instance performs an I/O.

      Grants can be

      gc [current/cr] grant 2-way’ or ‘gc current grant busy’ as in your case.

      Former receive the grant immediately whereus the latter receive the grant after a delay.

      You receive a ‘gc current grant busy’ because either the request is blocked or the requst can not be sent immediately.

      Look at the overal picture and see if there are

      1. Contention for blocks ‘gc buffer busy’
      2. CPU, Memory, Interconnect … ( without I/O) that can delay sending the grant

      Look at the RAC specifics for tuning ( depends upon which one will apply to your case)

      1. Indexes splits ( update from many instances concurrently) : reverse or hash partitionied
      2. High Watermark – if you fave a lot of data loading : uniform extends with large size and ASSM segemnts
      3. Undo shipment accross instances
      4. If use Oracle sequences – caching
      5. Avoid connention for block buffers ( small transactions/instance affinity… etc…)


      Comment by gjilevski | July 3, 2011 | Reply

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: