gc buffer busy acquire vs release

3
O racle database internals by Riyaj Discussions about Oracle performance tuning, RAC, Oracle internal & E-business suite. gc buffer busy acquire vs release Posted by Riyaj Shamsudeen on April 19, 2012 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 aĴendee 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: If existing GC open request originated from the local instance, then current session will wait for ‘gc buffer busy acquire’. Essentially, current process is waiting for another process in the local instance to acquire GC lock, on behalf of the local instance. Once GC lock is acquired, current process can access that buffer without additional GC processing (if the lock is acquired in a compatible mode). 1. If existing GC open request originated from a remote instance, then current session will wait for ‘gc buffer busy release’ event. In this case session is waiting for another remote session (hence another instance) to release the GC lock, so that local instance can acquire buffer. 2. 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. gc buffer busy acquire vs release « Oracle database internals by Riyaj http://orainternals.wordpress.com/2012/04/19/gc-buffer-busy-acquire-vs-... 1 of 3 3/25/2013 6:58 PM Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

Upload: alokmishra4533

Post on 31-Dec-2015

60 views

Category:

Documents


1 download

DESCRIPTION

GC buffer busy in Oracle tuining

TRANSCRIPT

Page 1: Gc Buffer Busy Acquire vs Release

Oracle database internals by Riyaj

Discussions about Oracle performance tuning, RAC, Oracle internal& E-business suite.

gc buffer busy acquire vs release

Posted by Riyaj Shamsudeen on April 19, 2012

Last week (March 2012), I was conducting Advanced RAC Training online. During the class, I was recreating a ‘gcbuffer 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 anopen request for Global cache lock for that block already, and so, the session must wait for the GC lock request tocomplete 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 a endee askedme to show the differentiation between these two wait events. Fortunately, we had a problem with LGWR writes andwe 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 busyevent differentiated between two cases:

If existing GC open request originated from the local instance, then current session will wait for ‘gc buffer busyacquire’. Essentially, current process is waiting for another process in the local instance to acquire GC lock, on behalfof the local instance. Once GC lock is acquired, current process can access that buffer without additional GCprocessing (if the lock is acquired in a compatible mode).

1.

If existing GC open request originated from a remote instance, then current session will wait for ‘gc buffer busyrelease’ event. In this case session is waiting for another remote session (hence another instance) to release the GClock, so that local instance can acquire buffer.

2.

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 thesession is waiting for ‘gc current request’ (which is a placeholder event, btw). All processes requesting an access to thisblock in instance 1 waits for ‘gc buffer busy acquire’. Similarly, all processes waiting for the block access in instance #2 iswaiting 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 thiscase and so, Global cache layer is also nearly frozen.

gc buffer busy acquire vs release « Oracle database internals by Riyaj http://orainternals.wordpress.com/2012/04/19/gc-buffer-busy-acquire-vs-...

1 of 3 3/25/2013 6:58 PMPrint to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

Page 2: Gc Buffer Busy Acquire vs Release

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 wouldreview instance 1 closely since the waits are ‘gc buffer busy acquire’ in that instance and most probably, I would quicklystart to diagnose session with sid=53 @inst=1

This entry was posted on April 19, 2012 at 8:03 pm and is filed under 11g, Oracle database internals, Performancetuning, RAC. Tagged: gc buffer busy, gc buffer busy acquire, gc buffer busy release, oracle performance, RACperformance. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, ortrackback from your own site.

6 Responses to “gc buffer busy acquire vs release”

Sam said

July 26, 2012 at 5:20 amvery nice explanation … thanks

Reply

1.

Bhaskar said

October 8, 2012 at 10:20 amGood explanation — Thanks

Reply

2.

gc buffer busy acquire vs release « Oracle database internals by Riyaj http://orainternals.wordpress.com/2012/04/19/gc-buffer-busy-acquire-vs-...

2 of 3 3/25/2013 6:58 PMPrint to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

Page 3: Gc Buffer Busy Acquire vs Release

Prashant Nair said

December 6, 2012 at 6:20 pmGreat Explanation.. Thanks

Reply

3.

swapnil mhetre said

December 21, 2012 at 3:49 pmGood Explanation. Thanks

Reply

4.

sravya said

January 10, 2013 at 7:20 pmGood explanation sir!! Thanks

Reply

5.

Bhavani said

February 27, 2013 at 5:53 pmvery useful information and nice explanation

Reply

6.

« Next Advanced RAC Training class scheduled.My COLLABORATE 12-IOUG sessions »

Blog at WordPress.com. | Theme: Customized Andreas09 by Andreas Viklund.

Follow

Follow “Oracle database internals by Riyaj”

Powered by WordPress.com

gc buffer busy acquire vs release « Oracle database internals by Riyaj http://orainternals.wordpress.com/2012/04/19/gc-buffer-busy-acquire-vs-...

3 of 3 3/25/2013 6:58 PMPrint to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)