Last week (March 2012), I was conducting Advanced RAC Training online. During the class, I was recreating a ‘gc buffer busy’ waits to explain the concepts and methods to troubleshoot the issue.
Definitions
Let’s define these events first. Event ‘gc buffer busy’ event means that a session is trying to access a buffer,but there is an open request for Global cache lock for that block already, and so, the session must wait for the GC lock request to complete before proceeding. This wait is instrumented as ‘gc buffer busy’ event.
From 11g onwards, this wait event is split in to ‘gc buffer busy acquire’ and ‘gc buffer busy release’. An attendee asked me to show the differentiation between these two wait events. Fortunately, we had a problem with LGWR writes and we were able to inspect the waits with much clarity during the class.
Remember that Global cache enqueues are considered to be owned by an instance. From 11g onwards, gc buffer busy event differentiated between two cases:
Example
Following output should show the differentiation with much clarity.
Notice that SID 53, instance is has open GC request for the block File #10, block #56051(line #1 in the output) and the session is waiting for ‘gc current request’ (which is a placeholder event, btw). All processes requesting an access to this block in instance 1 waits for ‘gc buffer busy acquire’. Similarly, all processes waiting for the block access in instance #2 is waiting for ‘gc buffer busy release’. Essentially, instance 1 sessions are waiting for local instance to acquire the GC lock, and instance 2 sessions are waiting for instance 1 to release the GC lock. Of course, LGWR is completely stuck in this case and so, Global cache layer is also nearly frozen.
INST_ID SID EVENT USERNAME STATE WIS P1_P2_P3_TEXT
------- ------ ----------------------- ---------- -------- -------------------------------
1 53 gc current request SYS WAITING 26 file# 10-block# 560651-id# 16777217
1 40 gc buffer busy acquire SYS WAITING file# 10-block# 560651-class# 1
1 60 gc buffer busy acquire SYS WAITING file# 10-block# 560651-class# 1
1 59 gc buffer busy acquire SYS WAITING file# 10-block# 560651-class# 1
1 58 gc buffer busy acquire SYS WAITING file# 10-block# 560651-class# 1
1 56 gc buffer busy acquire SYS WAITING file# 10-block# 560651-class# 1
1 55 gc buffer busy acquire SYS WAITING file# 10-block# 560651-class# 1
1 54 gc buffer busy acquire SYS WAITING file# 10-block# 560651-class# 1
1 53 gc buffer busy acquire SYS WAITING file# 10-block# 560651-class# 1
1 48 gc buffer busy acquire SYS WAITING file# 10-block# 560651-class# 1
2 1 gc buffer busy release SYS WAITING file# 10-block# 560651-class# 1
2 68 gc buffer busy release SYS WAITING file# 10-block# 560651-class# 1
2 65 gc buffer busy release SYS WAITING file# 10-block# 560651-class# 1
2 64 gc buffer busy release SYS WAITING file# 10-block# 560651-class# 1
2 69 gc buffer busy release SYS WAITING file# 10-block# 560651-class# 1
2 57 gc buffer busy release SYS WAITING file# 10-block# 560651-class# 1
2 43 gc buffer busy release SYS WAITING file# 10-block# 560651-class# 1
2 36 gc buffer busy release SYS WAITING file# 10-block# 560651-class# 1
2 47 log file sync SYS WAITING 22 buffer# 4450-sync scn 30839721- 0
In summary, this differentiation is useful. In most cases, ‘gc buffer busy’ is a symptom and so, in this example, I would review instance 1 closely since the waits are ‘gc buffer busy acquire’ in that instance and most probably, I would quickly start to diagnose session with sid=53 @inst=1
Full name
Riyaj Shamsudeen
My company
http://www.orainternals.com
Recent comments
21 weeks 1 day ago
31 weeks 5 hours ago
32 weeks 5 days ago
35 weeks 6 days ago
38 weeks 1 day ago
47 weeks 5 days ago
49 weeks 2 days ago
50 weeks 2 days ago
50 weeks 3 days ago
1 year 1 week ago