<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Oracle database internals by Riyaj</title>
	<atom:link href="http://orainternals.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://orainternals.wordpress.com</link>
	<description>Discussions about Oracle performance tuning, RAC, Oracle internal &#38; E-business suite.</description>
	<lastBuildDate>Thu, 26 Jan 2012 14:48:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='orainternals.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Oracle database internals by Riyaj</title>
		<link>http://orainternals.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://orainternals.wordpress.com/osd.xml" title="Oracle database internals by Riyaj" />
	<atom:link rel='hub' href='http://orainternals.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Nologging redo size</title>
		<link>http://orainternals.wordpress.com/2012/01/25/nologging-redo-size/</link>
		<comments>http://orainternals.wordpress.com/2012/01/25/nologging-redo-size/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 19:03:15 +0000</pubDate>
		<dc:creator>Riyaj Shamsudeen</dc:creator>
				<category><![CDATA[Oracle database internals]]></category>
		<category><![CDATA[Performance tuning]]></category>
		<category><![CDATA[RAC]]></category>
		<category><![CDATA[golden gate redo size]]></category>
		<category><![CDATA[oracle performance]]></category>
		<category><![CDATA[redo nologging size]]></category>
		<category><![CDATA[redo size script]]></category>
		<category><![CDATA[streams redo size]]></category>

		<guid isPermaLink="false">http://orainternals.wordpress.com/?p=1070</guid>
		<description><![CDATA[It is probably easy to calculate hourly redo rate or daily redo rate using AWR data. For example, my script awr_redo_size.sql can be used to calculate daily redo rate, and awr_redo_size_history.sql can be used to calculate hourly redo rate. Hourly redo rate is especially useful since you can export to an excel spreadsheet, graph it [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=orainternals.wordpress.com&amp;blog=670821&amp;post=1070&amp;subd=orainternals&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It is probably easy to calculate hourly redo rate or daily redo rate using AWR data. For example, my script <a href="http://www.orainternals.com/wp-content/uploads/2011/12/awr_redo_size_sql.txt">awr_redo_size.sql</a> can be used to calculate daily redo rate, and <a href="http://www.orainternals.com/wp-content/uploads/2011/12/awr_redo_size_history_sql1.txt">awr_redo_size_history.sql</a> can be used to calculate hourly redo rate. Hourly redo rate is especially useful since you can export to an excel spreadsheet, graph it to see redo rate trend.</p>
<p><strong>Introduction to Direct Mode Writes</strong></p>
<p>Direct mode operations write directly in to the database file skipping buffer cache.  Minimal redo(aka invalidation redo) is generated, if the database is <em>not</em> in force logging mode. Keeping the database in no force logging mode is peachy as long as you don&#8217;t use Data guard, Streams, or Golden Gate.</p>
<p>Suddenly, business decide to use one of these log mining based replication products. This means that you must turn on <a href="http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10726/configbp.htm#i1013555">Force logging</a> at the database level so that replication tools can capture (just replay in the case of Data guard) the redo information correctly and consistently.</p>
<p>But, what if your application performs high amount of direct mode operation, such as insert /*+ append */ operations? Now, you need to estimate the redo size to identify the effect of FORCE LOGGING mode  That estimation gets little tricky.<br />
<span id="more-1070"></span></p>
<p><strong>Direct writes</strong></p>
<p>During direct mode operation, blocks are pre-formatted and written directly to the disk bypassing buffer cache. If the database is altered to Force logging mode, then still direct mode operations will write to the block. In addition to direct mode writes, these operations will generate redo for the blocks written directly, almost similar to writing the whole block in to the redo log files. This will increase redo size.</p>
<p>There are few statistics capturing the direct mode writes. Using these statistics, we can estimate the redo size for direct mode operations.</p>
<p><strong>Statistics</strong></p>
<p>Statistics &#8216;physical writes direct&#8217; includes mostly three component statistics as given below.</p>
<pre>Physical writes direct = &lt; writes to data file due to direct mode operations&gt; +
                              physical writes direct to temporary tablespace +
                              physical writes direct (LOB)</pre>
<p>To identify the size of direct writes to data file, excluding temp files, then the formula becomes trivial as :</p>
<pre>Physical writes to datafile = block_size * ( physical writes direct -
                                                physical writes direct to temporary tablespace )</pre>
<p>Script <a href="http://www.orainternals.com/wp-content/uploads/2011/12/awr_redo_nologging_size_sql.txt">awr_redo_nologging_size.sql</a> uses this formula to estimate the amount of redo size if the database is altered to FORCE Logging mode. One caution with this script is that, this script assumes an uniform block size( of what you specify , 8192 is default). If you use multiple block sizes in your database, then specify the biggest block size in use (or average!).  Script will overestimate it, but it is better than underestimation.</p>
<pre>awr_redo_nologging_size.sql v1.00 by Riyaj Shamsudeen @orainternals.com

To generate Report about Redo rate from AWR tables

Enter the block size(Null=8192):
Enter past number of days to search for (Null=30):21

DB_NAME   REDO_DATE                redo_size (MB) phy_writes_dir (MB) phy_writes_dir_temp(MB)
--------- ------------------- ------------------- ------------------- -----------------------
...
TEST1      01/09/2012 00:00:00          554,967.92        4,337,470.54            4,048,463.09
TEST1      01/10/2012 00:00:00          725,161.69        7,631,308.52            7,311,254.35
TEST1      01/11/2012 00:00:00        1,417,910.43       11,022,558.04           10,424,339.66
TEST1      01/12/2012 00:00:00          162,109.27        2,756,108.79            2,658,140.35
TEST1      01/13/2012 00:00:00          736,137.74        5,449,356.39            5,107,896.82
TEST1      01/14/2012 00:00:00          880,102.10        3,494,355.88            3,119,470.18
...</pre>
<p>In the code output above, notice the line for 1/11/2012. <em>Estimated total</em> redo size is ~1,417GB if we alter the database to FORCE LOGGING mode at database level. Out of that 1417 GB redo size, ~600 GB of redo will be generated due to direct mode operations from the calculation: 11,022GB will be generated due to direct mode operations minus adjustment for direct writes to temporary tablespace of size 10,424GB (over 10TB writes to temporary tablespace).</p>
<p><strong>Example #2</strong><br />
In this example, notice 28-DEC-11. 62GB of redo estimated if alter the database to force logging mode. Out of that just 600MB of redo will be generated due to direct mode operation.</p>
<pre>DB_NAME   REDO_DATE            redo_size (MB) phy_writes_dir (MB) phy_writes_dir_temp(MB)
--------- --------------- ------------------- ------------------- -----------------------
...
TEST2     24-DEC-11                 19,149.11            2,796.57                2,361.68
TEST2     25-DEC-11                 18,362.74            1,630.83                1,379.95
TEST2     26-DEC-11                 60,097.50            3,867.92                3,303.37
TEST2     27-DEC-11                 55,696.98            3,266.89                2,756.84
TEST2     28-DEC-11                 62,971.37            4,650.37                4,096.75
TEST2     29-DEC-11                 62,167.32            3,839.07                3,255.70
TEST2     30-DEC-11                 64,072.57            4,462.38                3,788.39
...</pre>
<p><strong>Summary</strong><br />
In summary, we can estimate the amount of redo size if we alter the database to FORCELOGGING mode. This is a very useful estimation while implementing these replication tools.</p>
<p>Thanks to Kirti Deshpande and Kalyan Maddali for testing out my script. Of course, any mistake in the script is mine, only mine.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/orainternals.wordpress.com/1070/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/orainternals.wordpress.com/1070/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/orainternals.wordpress.com/1070/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/orainternals.wordpress.com/1070/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/orainternals.wordpress.com/1070/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/orainternals.wordpress.com/1070/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/orainternals.wordpress.com/1070/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/orainternals.wordpress.com/1070/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/orainternals.wordpress.com/1070/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/orainternals.wordpress.com/1070/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/orainternals.wordpress.com/1070/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/orainternals.wordpress.com/1070/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/orainternals.wordpress.com/1070/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/orainternals.wordpress.com/1070/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=orainternals.wordpress.com&amp;blog=670821&amp;post=1070&amp;subd=orainternals&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://orainternals.wordpress.com/2012/01/25/nologging-redo-size/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de30d27adb6aee87e455780e8cb19e7b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">orainternals</media:title>
		</media:content>
	</item>
		<item>
		<title>Video: deep review of LMS</title>
		<link>http://orainternals.wordpress.com/2012/01/20/video-deep-review-of-lms/</link>
		<comments>http://orainternals.wordpress.com/2012/01/20/video-deep-review-of-lms/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 15:21:08 +0000</pubDate>
		<dc:creator>Riyaj Shamsudeen</dc:creator>
				<category><![CDATA[Oracle database internals]]></category>
		<category><![CDATA[Performance tuning]]></category>
		<category><![CDATA[Presentations]]></category>
		<category><![CDATA[RAC]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[LMS tuning]]></category>
		<category><![CDATA[oracle performance]]></category>
		<category><![CDATA[RAC performance]]></category>
		<category><![CDATA[RAC training]]></category>
		<category><![CDATA[video RAC training]]></category>

		<guid isPermaLink="false">http://orainternals.wordpress.com/?p=1057</guid>
		<description><![CDATA[This video was created circa July 2011. Click the Read More link to review the video. Version Oracle Database 11.2.0.2 Synopsis: Essentially, we probe the importance of LMS processes using DTrace. Explain why LMS should run in elevated priority. How to review deep statistics about LMS processes and much more.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=orainternals.wordpress.com&amp;blog=670821&amp;post=1057&amp;subd=orainternals&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This video was created circa July 2011. Click the Read More link to review the video. Version Oracle Database 11.2.0.2</p>
<p>Synopsis: Essentially, we probe the importance of LMS processes using DTrace. Explain why LMS should run in elevated priority. How to review deep statistics about LMS processes and much more.</p>
<div id="v-mabMGh2o-1" class="video-player" style="width:400px;height:250px">
<embed id="v-mabMGh2o-1-video" src="http://s0.videopress.com/player.swf?v=1.03&amp;guid=mabMGh2o&amp;isDynamicSeeking=true" type="application/x-shockwave-flash" width="400" height="250" title="deep_review_lms_video" wmode="direct" seamlesstabbing="true" allowfullscreen="true" allowscriptaccess="always" overstretch="true"></embed></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/orainternals.wordpress.com/1057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/orainternals.wordpress.com/1057/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/orainternals.wordpress.com/1057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/orainternals.wordpress.com/1057/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/orainternals.wordpress.com/1057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/orainternals.wordpress.com/1057/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/orainternals.wordpress.com/1057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/orainternals.wordpress.com/1057/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/orainternals.wordpress.com/1057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/orainternals.wordpress.com/1057/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/orainternals.wordpress.com/1057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/orainternals.wordpress.com/1057/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/orainternals.wordpress.com/1057/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/orainternals.wordpress.com/1057/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=orainternals.wordpress.com&amp;blog=670821&amp;post=1057&amp;subd=orainternals&amp;ref=&amp;feed=1" width="1" height="1" /><div><a href="http://orainternals.wordpress.com/2012/01/20/video-deep-review-of-lms/"><img alt="deep_review_lms_video" src="http://videos.videopress.com/mabMGh2o/deep_review_lms_video_std.original.jpg" width="160" height="120" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://orainternals.wordpress.com/2012/01/20/video-deep-review-of-lms/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	<enclosure url="http://videos.videopress.com/mabMGh2o/deep_review_lms_video_dvd.mp4" length="544505856" type="video/mp4" />

		<media:content url="http://1.gravatar.com/avatar/de30d27adb6aee87e455780e8cb19e7b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">orainternals</media:title>
		</media:content>

		<media:group>
			<media:content url="http://videos.videopress.com/mabMGh2o/deep_review_lms_video_dvd.mp4" fileSize="544505856" type="video/mp4" medium="video" bitrate="1528" isDefault="true" duration="2784" width="640" height="400" />

			<media:content url="http://videos.videopress.com/mabMGh2o/deep_review_lms_video_std.mp4" fileSize="283656192" type="video/mp4" medium="video" bitrate="796" isDefault="false" duration="2784" width="400" height="250" />

			<media:content url="http://videos.videopress.com/mabMGh2o/deep_review_lms_video_fmt1.ogv" fileSize="283656192" type="video/ogg" medium="video" bitrate="796" isDefault="false" duration="2784" width="400" height="250" />

			<media:rating scheme="urn:mpaa">g</media:rating>
			<media:title type="plain">deep_review_lms_video</media:title>
			<media:thumbnail url="http://videos.videopress.com/mabMGh2o/deep_review_lms_video_std.original.jpg" width="256" height="160" />
			<media:player url="http://s0.videopress.com/player.swf?v=1.03&#38;guid=mabMGh2o&#38;isDynamicSeeking=true" width="400" height="250" />
		</media:group>
	</item>
		<item>
		<title>SCN &#8211; What, why, and how?</title>
		<link>http://orainternals.wordpress.com/2012/01/19/scn-what-why-and-how/</link>
		<comments>http://orainternals.wordpress.com/2012/01/19/scn-what-why-and-how/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 20:48:45 +0000</pubDate>
		<dc:creator>Riyaj Shamsudeen</dc:creator>
				<category><![CDATA[11g]]></category>
		<category><![CDATA[corruption]]></category>
		<category><![CDATA[Oracle database internals]]></category>
		<category><![CDATA[Performance tuning]]></category>
		<category><![CDATA[RAC]]></category>
		<category><![CDATA[recovery]]></category>
		<category><![CDATA[get_system_change_number]]></category>
		<category><![CDATA[hot backup scn growth]]></category>
		<category><![CDATA[kcmgas calls]]></category>
		<category><![CDATA[ORA-600 [2252]]]></category>
		<category><![CDATA[oracle performance]]></category>
		<category><![CDATA[SCN bug]]></category>

		<guid isPermaLink="false">http://orainternals.wordpress.com/?p=1033</guid>
		<description><![CDATA[In this blog entry, we will explore the wonderful world of SCNs and how Oracle database uses SCN internally. We will also explore few new bugs and clarify few misconceptions about SCN itself. What is SCN? SCN (System Change Number) is a primary mechanism to maintain data consistency in Oracle database. SCN is used primarily [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=orainternals.wordpress.com&amp;blog=670821&amp;post=1033&amp;subd=orainternals&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In this blog entry, we will explore the wonderful world of SCNs and how Oracle database uses SCN internally. We will also explore few new bugs and clarify few misconceptions about SCN itself.</p>
<p><strong>What is SCN?</strong></p>
<p>SCN (System Change Number) is a primary mechanism to maintain data consistency in Oracle database. SCN is used primarily in the following areas, of course, this is not a complete list:</p>
<ol>
<li>Every redo record has an SCN version of the redo record in the redo header (and redo records can have non-unique SCN). Given redo records from two threads (as in the case of RAC), Recovery will order them in SCN order, essentially maintaining a strict sequential order. As explained in my<a href="http://www.orainternals.com/wp-content/uploads/2011/12/Riyaj_redo_internals_and_tuning_by_redo_reduction_doc1.pdf"> paper</a>, every redo record has multiple change vectors too.</li>
<li>Every data block also has block SCN (aka block version). In addition to that, a change vector in a redo record also has expected block SCN. This means that a change vector can be applied to one and only version of the block. Code checks if the target SCN in a change vector is matching with the block SCN before applying the redo record. If there is a mismatch, corruption errors are thrown.</li>
<li>Read consistency also uses SCN. Every query has query environment which includes an SCN at the start of the query. A session can see the transactional changes only if that transaction commit SCN is lower then the query environment SCN.</li>
<li>Commit. Every commit will generate SCN, aka commit SCN, that marks a transaction boundary. Group commits are possible too.</li>
</ol>
<p><strong>SCN format</strong></p>
<p>SCN is a huge number with two components to it: Base and wrap. Wrap is a 16 bit number and base is a 32 bit number. It is of the format wrap.base. When the base exceeds 4 billion, then the wrap is incremented by 1. Essentially, wrap counts the number of  times base wrapped around 4 billion. Few simple SQL script will enumerate this better:<br />
<span id="more-1033"></span></p>
<p>In the SQL statement below, we use dbms_flashback package call to get the current system change number, we also convert that number to hex format to breakdown the SCN.</p>
<p>col curscn format 99999999999999999999999</p>
<pre>select to_char(dbms_flashback.get_system_change_number,'xxxxxxxxxxxxxxxxxxxxxx'),
dbms_flashback.get_system_change_number curscn from dual;</pre>
<p>TO_CHAR(DBMS_FLASHBACK. CURSCN<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
280000371 10737419121</p>
<p>Here, hex value of the SCN is 0&#215;280000371 and  decimal format is 10737419121. Let&#8217;s review the hex value 0&#215;280000371, this value can be split in to two components, better written as 0&#215;2.80000371, where 0&#215;2 is the wrap and 0&#215;80000371 is the hex representation of base. To verify the base and wrap, we can put them back together to get the SCN value. Essentially, multiply base by 4 billion and add wrap to get the SCN in number format. Script shows the output and see that these two numbers are matching.</p>
<p>col n2 format  99999999999999999999999</p>
<pre>select to_number(2,'xxxxxxx') * 4 * power(2,30) + to_number(80000371,'xxxxxxxxxxxxxxxxxxxxxx') n2 from dual
N2
 -------------------
 10737419121</pre>
<p>If you continue the discussion logically, then maximum value of the wrap defines the maximum value of SCN i.e. maximum value of wrap*4 billion = 65536* 4* power(2,30) = 281,474,976,710,656 = 281 trillion values.</p>
<p><strong>Does each change increment SCN?</strong></p>
<p>Not necessarily. The SCN increment is  not for every change. For example, in the script below, we will change the table 1000 times, but the generated SCN will be very few.</p>
<pre>create table  rs.dropme (n1 number , n2 number);
test_case_scn.sql:
--------------cut --------------
col curscn format 99999999999999999999999
select dbms_flashback.get_system_change_number curscn from dual;
begin
 for i in 1 .. 1000
 loop
 insert into rs.dropme values(i, i);
 end loop;
end;
/
select dbms_flashback.get_system_change_number curscn from dual;
------------cut -----------------
alter system switch log file;
SQL&gt; @test_case_scn
  CURSCN
------------------------
10737428262
PL/SQL procedure successfully completed.

CURSCN
------------------------
10737428271
SQL&gt; alter system switch logfile;
System altered.</pre>
<div>Even though there were 1000 changes to the table, just 9 SCNs increased. If we dump the redo record using the script dump_last_log.sql (script is inline at the end of this post) then we can see redo records have both SCN and SUBSCN below too. Many REDO records are having same SCN and SUBSCN combo.</div>
<pre>REDO RECORD - Thread:1 RBA: 0x000010.0000001c.018c LEN: 0x00fc VLD: 0x01
SCN: 0x0002.8000fb87 SUBSCN:  1 01/19/2012 09:14:27
REDO RECORD - Thread:1 RBA: 0x000010.0000001d.0098 LEN: 0x00fc VLD: 0x01
SCN: 0x0002.8000fb87 SUBSCN:  1 01/19/2012 09:14:27
REDO RECORD - Thread:1 RBA: 0x000010.0000001d.0194 LEN: 0x00fc VLD: 0x01
SCN: 0x0002.8000fb87 SUBSCN:  1 01/19/2012 09:14:27
REDO RECORD - Thread:1 RBA: 0x000010.0000001e.00a0 LEN: 0x00fc VLD: 0x01
SCN: 0x0002.8000fb87 SUBSCN:  1 01/19/2012 09:14:27</pre>
<pre>...</pre>
<p><strong>Database link and SCNS</strong></p>
<div>Database link based transactions can cause SCN increases too. For example, let&#8217;s say that, three databases db1, db2, and db3 participate in a distributed transaction and let&#8217;s say that their current SCN is 1000, 2000, 5000 respectively in these databases. At commit time, a co-ordinated SCN is needed for the distributed transaction and maximum SCN value from all participating databases is chosen; SCN value of these three databases will be increased to 5000.</div>
<p><strong>Can you run out of SCN?</strong></p>
<p>As you saw earlier, maximum SCN hard limit is 281 trillion. In addition to that, there is also a soft limit imposed by Oracle code as a protection mechanism. If the next SCN is more than the soft limit, ORA-600[2252] is emitted and the operation cancelled. For example, in the case of database link based distributed transaction, if the co-ordinated SCN is greater than the soft limit ORA-600 emitted.</p>
<div></div>
<p>This soft limit is calculated using the formula (number of seconds from 1/1/1988) * 16384. As the number of seconds from 1/1/1988 is continuously increasing, soft limit is increasing at the rate of 16K per second continuously. Unless, your database is running full steam generating over 16K SCNs, you won&#8217;t run in to that soft limit that easily. [ But, you could create ORA-600[2252] by resetting your server clock to 1/1/1988].</p>
<p>Problem comes if many interconnected databases each generating at higher rate in kind of round-robin fashion.DB1 generates 20K SCNs per second in the first 5 minutes, DB2 generates 20K SCNs per second in the next 5 minutes, DB3 generates 20K SCNs per second in the next 5 minutes etc. In this case, all three Databases will have a sustained 20K SCNs per second rate. Database is slowly catching up to soft limit (1 second per every 4 second exactly) and again, it will take many years for them to catch up to the soft limit assuming the databases are active, continuously. But, there is that  infamous, hated by my client,  hot backup bug.</p>
<p>(BTW, To reach hard limit,  it will take 544 years to run out of SCN at 16K rate normally (65536*4*1024*1024*1024 / 16384 / 60/60/24/365)).</p>
<div></div>
<p>Here is an example of ORA-600 [2252] error. In this example lines printed below, 2838 is the SCN wrap and 395527372 is the SCN base. If we convert this to decimal SCN it is in the 12 Trillion range. Database link based connection was trying to increase the SCN over 12 Trillion value, but it was rejected by the database as the SCN was exceeding the soft limit.</p>
<pre> ORA-00600: internal error code, arguments: [2252], [2838], [395527372], [], [], [], [], [], [], [], [], []</pre>
<div>BTW, in 10g, this 16K per second was hard coded. But, 11gR2, this limit is controlled by an underscore parameter _max_reasonable_scn_rate defaulting to 32K.</div>
<p><strong>Hot backup bug</strong></p>
<p>Most DBAs use RMAN to do backup. But, still, there are few databases that use hot backup mode, primarily because of disk mirror based backups. It is a common behavior to see higher SCN rate if the database is altered to hot backup mode. A SGA variable array keeps track of the backup mode at file level. When you alter the database out of backup mode, SGA variables are reset and the higher SCN rate goes back to normal. Due to a bug (12371955), that SGA variable is not reset leaving the database to think that it is still in hot backup mode. Database generates SCN at higher rate. (if you recycle the database later, of course, the variable is reset to normal rate). There is way to dump the SGA variable to check if the database currently thinks if it is in hot backup mode or not.</p>
<div></div>
<p>Due to this bug, an highly active database can create increased SCN rate over 16K. Over a long period of time (in fact, it probably will take many years) the SCN catches up to the soft limit. Once soft limit is reached, next SCN update will throw ORA-660[2252] errors. Of course, this SCN growth is propagated to other databases over database link. As the soft limit calculation is time based, time zone of the server is also important. For example, if the values are close enough to soft limit, then the databases running in US Eastern time zone will have an higher soft limit by (4*60*60*16384 =235 million ) then the databases running in Pacific Time Zone.</p>
<div>Salient points of the bug are:</div>
<div>
<ol>
<li>There is <span style="text-decoration:underline;">no corruption</span> danger, sessions might die or the databases might throw ORA-600 errors. In rare cases, databases have to be kept down for few hours or distributed transaction removed from the database so that the head room between the soft limit and the current SCN is widen.</li>
<li>This bug affects only if you use &#8216;ALTER DATABASE&#8217; command. If you use, &#8216;ALTER TABLESPACE&#8217; command for backup, you are not affected by this bug.</li>
<li>SCN rate is also directly relevant to activity. If the database has lower activity, SCN rate is also lower, even when the database is altered to backup mode with this bug.</li>
</ol>
<div>There is a script released by Oracle that can tell you how close your database is to the soft limit,aka SCN headroom. So, first check if your database is having any SCN issue or not, that script is available as bug 13498243 and tells you how many days of SCN headroom you have.</div>
<p><strong>How to check SCN rate?</strong></p>
<div>There are multiple ways to check SCN rate in your database.</div>
<div><span style="text-decoration:underline;">Method 1:</span> smon_scn_time keeps track of the mapping between time and SCN at approximately 5 minutes granularity. That can be used to measure SCN rate, see code below. Although, this is easier to check, remember that there is no easy way to identify if the SCN increase is due to intrinsic activity in the database or is it due to an external database increasing the SCN by a distributed transaction activity. We will discuss this differentiation later.<strong><br />
</strong></div>
<pre>with t1 as(
select time_dp , 24*60*60*(time_dp - lag(time_dp) over (order by time_dp)) timediff,
  scn - lag(scn) over(order by time_dp) scndiff
from smon_scn_time
)
select time_dp , timediff, scndiff,
       trunc(scndiff/timediff) rate_per_sec
from t1
order by 1
/
TIME_DP                TIMEDIFF    SCNDIFF RATE_PER_SEC
-------------------- ---------- ---------- ------------
19-JAN-2012 15:23:21        315       2931            9
19-JAN-2012 15:25:46        145        708            4
19-JAN-2012 15:28:00        134       1268            9
19-JAN-2012 15:30:48        168        597            3
19-JAN-2012 15:35:51        303       4148           13
19-JAN-2012 15:36:47         56        103            1
19-JAN-2012 15:42:14        327        671            2</pre>
<div><span style="text-decoration:underline;"><em>Method 2:</em></span><strong><br />
</strong></div>
<div>v$log_history also can be used to check the SCN rate of the database. In this code below, you can see the SCN rate per second queried from v$log_history. Even if you are running in RAC, query against v$log_history is sufficient as it holds the archive logs from all threads. If there is a SCN spike, say from a remote database, then you will see a SCN spike in the output of this query below.</div>
<pre>alter session set nls_date_format='DD-MON-YYYY HH24:MI:SS';
col first_change# format 99999999999999999999
col next_change# format 99999999999999999999
select  thread#,  first_time, next_time, first_change# ,next_change#, sequence#,
   next_change#-first_change# diff, round ((next_change#-first_change#)/(next_time-first_time)/24/60/60) rt
from (
select thread#, first_time, first_change#,next_time,  next_change#, sequence#,dest_id from v$archived_log
where next_time &gt; sysdate-30 and dest_id=1
order by next_time
)
order by  first_time, thread#
/

   THREAD# FIRST_TIME                   FIRST_CHANGE#          NEXT_CHANGE#  SEQUENCE#       DIFF         RT
---------- -------------------- --------------------- --------------------- ---------- ---------- ----------
         2 12-JAN-2012 16:10:30              25995867              26026647        308      30780          0
         1 17-JAN-2012 14:05:00              26026649              26028427        555       1778          1
         1 17-JAN-2012 14:05:00              26026649              26028427        555       1778          1
         2 17-JAN-2012 14:05:00              26026647              26028432        309       1785          1
         2 17-JAN-2012 14:05:00              26026647              26028432        309       1785          1
         1 17-JAN-2012 14:27:21              26028427            1073743815        556 1047715388     814076
         2 17-JAN-2012 14:48:48              26028157              26028230          1         73          3
         2 18-JAN-2012 14:22:23              26076103           10737418303          3 1.0711E+10    7448778
         1 18-JAN-2012 14:22:24              26076106           10737427850          5 1.0711E+10    1458319
         1 18-JAN-2012 16:24:49           10737427850           10737427884          6         34          2
         1 18-JAN-2012 16:25:03           10737427884           10737428252          7        368          1</pre>
<p>In the output above,  there was a SCN jump by 10 Billion between 14:27 and 14:05. You can&#8217;t differentiate if that increase came from external systems or is it due to intrinsic activity easily. In this specific case, because this is an extreme SCN increase, and I would guess that it came from external systems. ( But usually this level of SCN increase will not happen in your production site and my example is to just explain the concept).</p>
<p><strong>What happens in RAC?</strong></p>
<div>In RAC, instance that receive the update from external system will increase the SCN of the database SCN to the new higher SCN. When other instances query for next SCN, immediately that SCN increase will be propagated to other instances too.</div>
<p><strong>Can two threads get same SCN?</strong></p>
<div>Obvious answer is No. Correct answer is yes. For example, redo records from two threads shows that they have exact same SCN and subSCN. This is not a problem or concern, as the buffer changes are protected by GCS layer code, and the row changes are protected by locking mechanism.</div>
<pre><span style="text-decoration:underline;">node 1</span>:

REDO RECORD - Thread:1 RBA: 0x000010.0000007f.0114 LEN: 0x0138 VLD: 0x01
SCN: 0x0002.8000fb91 SUBSCN:  1 01/19/2012 09:14:27

<span style="text-decoration:underline;">node 2:</span>
REDO RECORD - Thread:2 RBA: 0x000007.00000003.0010 LEN: 0x0068 VLD: 0x05
SCN: 0x0002.8000fb91 SUBSCN:  1 01/19/2012 09:14:27</pre>
<p><strong>Intrinsic vs Extrinsic SCN growth</strong></p>
<div>There is a statistic that can also guide us to determine if the SCN increase is intrinsic or extrinsic or not. Statistics &#8216;calls to kcmgas&#8217; gives an approximate number of calls to allocate SCNs. This statistics is an estimate only, not an absolute count of generated SCNs. We will understand this stats with a script and an helper function.</div>
<p><code> create or replace function get_my_statistics (l_stat_name varchar2)<br />
return number as<br />
l_value number;<br />
begin<br />
select ses.value into l_value<br />
from v$sesstat ses , v$statname stat<br />
where stat.statistic#=ses.statistic# and<br />
ses.sid=(select sid from v$mystat where rownum and stat.name = l_stat_name;<br />
return l_value;<br />
end;<br />
/<br />
alter system switch logfile;<br />
host sleep 5<br />
create table rs.dropme (n1 number , n2 number);<br />
col curscn format 99999999999999999999999<br />
select dbms_flashback.get_system_change_number curscn , get_my_statistics('calls to kcmgas') kcmgas from dual;<br />
begin<br />
for i in 1 .. 100000<br />
loop<br />
insert into rs.dropme values(i, i);<br />
end loop;<br />
end;<br />
/<br />
select dbms_flashback.get_system_change_number curscn , get_my_statistics('calls to kcmgas') kcmgas from dual;<br />
alter system switch logfile;<br />
</code></p>
<div>Output of the above script is:</div>
<pre>                  CURSCN     KCMGAS
------------------------ ----------
             10737522265          0
 PL/SQL procedure successfully completed.
                  CURSCN     KCMGAS
------------------------ ----------
             10737523122        826</pre>
<div>From the output, we can see that 857 SCN differences vs 826 kcmgas calls form this session. There could be other background processes generating SCN which would explain this difference. Even at instance level, it doesn&#8217;t match exactly, but multiplying &#8216;kcmgas calls&#8217; statistics by 1.1 gives you better estimate. This method can be used to identify if the SCN growth is intrinsic or extrinsic in a database. It can be also  used to identify the instance generating more SCNs in a RAC cluster or the database generating more SCNs in a complex interconnected environment.</div>
<div></div>
<p><strong>SCN Vulnerability issue</strong></p>
<div>I am not going to discuss details about this vulnerability issue at all. But, this vulnerability require access to production database. DBAs with security in mind, don&#8217;t allow production access that easily anyway. So, In my opinion, it is a problem that must be addressed, but you would need a malicious DBA with expert level knowledge to misuse this vulnerability. Follow Oracle support direction on this one as I usually stay away from talking about security vulnerability issues. Check here for <a href="http://www.oracle.com/technetwork/topics/security/cpujan2012-366304.html">details</a></div>
<div></div>
<p><strong>Summary</strong></p>
<div>I have been holding on publishing this blog entry for many months now. Since this issue is in the public knowledge domain, I can share the knowledge without any repercussions. In a nutshell, understanding SCN generation and intrinsic details about it is important. Armed with scripts, you can review your environment.</div>
<div></div>
<div></div>
<p> Dump_last_log script is not printing properly in html format. </p>
<p> printing in line&gt;</p>
<pre>
-------------------------------------------------------------------------------------------------
--  Script : dump_last_log.sql
-------------------------------------------------------------------------------------------------
-- This script will dump the last log file.
--   If the log file is big with enormous activity, this might take much resource.
--
--
--  Author : Riyaj Shamsudeen
--  No implied or explicit warranty !
-------------------------------------------------------------------------------------------------
set serveroutput on size 1000000
declare
  v_sqltext varchar2(255);
begin
 select 'alter system dump logfile '||chr(39)||member||chr(39)
 into v_sqltext
 from
v$log  lg, v$logfile lgfile
where lg.group# = lgfile.group# and
lg.sequence# = (select sequence#-1 from v$log where status='CURRENT' and
                  thread#=(select thread# from v$instance )
and lg.thread#=(select thread# from v$instance)
and rownum &lt;2
;
  dbms_output.put_line (&#039;Executing :&#039;||v_sqltext);
  execute immediate v_sqltext;
end;
/
</pre>
<p> update 1: Fixed formatting and typo.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/orainternals.wordpress.com/1033/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/orainternals.wordpress.com/1033/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/orainternals.wordpress.com/1033/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/orainternals.wordpress.com/1033/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/orainternals.wordpress.com/1033/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/orainternals.wordpress.com/1033/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/orainternals.wordpress.com/1033/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/orainternals.wordpress.com/1033/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/orainternals.wordpress.com/1033/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/orainternals.wordpress.com/1033/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/orainternals.wordpress.com/1033/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/orainternals.wordpress.com/1033/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/orainternals.wordpress.com/1033/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/orainternals.wordpress.com/1033/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=orainternals.wordpress.com&amp;blog=670821&amp;post=1033&amp;subd=orainternals&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://orainternals.wordpress.com/2012/01/19/scn-what-why-and-how/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de30d27adb6aee87e455780e8cb19e7b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">orainternals</media:title>
		</media:content>
	</item>
		<item>
		<title>gc cr disk read</title>
		<link>http://orainternals.wordpress.com/2012/01/13/gc-cr-disk-read/</link>
		<comments>http://orainternals.wordpress.com/2012/01/13/gc-cr-disk-read/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 01:04:46 +0000</pubDate>
		<dc:creator>Riyaj Shamsudeen</dc:creator>
				<category><![CDATA[11g]]></category>
		<category><![CDATA[Oracle database internals]]></category>
		<category><![CDATA[Performance tuning]]></category>
		<category><![CDATA[Presentations]]></category>
		<category><![CDATA[RAC]]></category>
		<category><![CDATA[gc cr disk read]]></category>
		<category><![CDATA[RAC performance]]></category>

		<guid isPermaLink="false">http://orainternals.wordpress.com/?p=1010</guid>
		<description><![CDATA[You might encounter RAC wait event &#8216;gc cr disk read&#8217; in 11.2 while tuning your applications in RAC environment. Let&#8217;s probe this wait event to understand why a session would wait for this wait event. Understanding the wait event Let&#8217;s say that a foreground process running in node 1, is trying to access a block [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=orainternals.wordpress.com&amp;blog=670821&amp;post=1010&amp;subd=orainternals&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>
You might encounter RAC wait event &#8216;gc cr disk read&#8217; in 11.2 while tuning your applications in RAC environment. Let&#8217;s probe this wait event to understand why a session would wait for this wait event.
</p>
<p><strong>Understanding the wait event</strong></p>
<p>
Let&#8217;s say that a foreground process running in node 1, is trying to access a block using a SELECT statement and that block is not in the local cache. To maintain the read consistency, foreground process will require the block consistent with the query SCN. Then the sequence of operation is(simplified):
</p>
<ol>
<li>Foreground session calculates the master node of the block; Requests a LMS process running in the master node to access the block.</li>
<li>Let&#8217;s assume that block is resident in the master node&#8217;s buffer cache. If the block is in a consistent state (meaning block version SCN is lower (or equal?) to query SCN), then LMS process can send the block to the foreground process immediately. Life is not that simple, so, let&#8217;s assume that requested block has an uncommitted transaction.</li>
<li>Since the block has uncommitted changes, LMS process can not send the block immediately. LMS process must create a CR (Consistent Read) version of the block: clones the buffer, applies undo records to the cloned buffer rolling back the block to the SCN consistent with the requested query SCN.</li>
<li>Then the CR block is sent to the foreground process.</li>
</ol>
<p><strong>LMS is a light weight process</strong></p>
<p>
Global cache operations must complete quickly, in the order of milli-seconds, to maintain the overall performance of RAC database. LMS is a critical process and does not do heavy lifting tasks such as disk I/O etc. If LMS process has to initiate I/O, instead of initiating I/O, LMS will downgrade the block mode and send the block to the requesting foreground process (this is known as Light Works rule). Foreground process will apply undo records to the block to construct CR version of the block.
</p>
<p><span id="more-1010"></span></p>
<p>
Now, the Foreground process might not find the undo blocks in the local cache as the transactions happened in the remote cache. A request is sent to remote LMS process to access undo block. If the undo block is not in the remote cache either, remote LMS process will send a grant to the foreground process to read the undo block from the disk. Foreground process accounts this wait time for the undo segment block grants to the &#8216;gc cr disk read&#8217; wait event.
</p>
<p>
There are other reasons as to why FG process might have to read undo block. One of them is that Fairness downconvert triggered by LMS process. Essentially, if a block is requested too many times leading to many CR block fabrication, then instead of LMS doing more work, LMS process will simply down convert the block,  send the block and grant to the requester an access to the block. FG process will apply undo to construct CR block itself.
</p>
<p>
 gv$cr_block_server can be used to review the number of down converts, Light works etc. But, it is probably not possible to identify the reason for a block down convert after the event.
</p>
<p><strong>Why do we need this new event?</strong></p>
<p>
There is a very good reason why this event was introduced. Prior to 11g, waits for single block CR grants are accounted to wait event such as &#8216;gc cr block 2-way&#8217;, &#8216;gc cr block 3-way&#8217; etc. Waits for grants on remote-instance-undo-blocks for CR fabrication is special, in the sense that, this is an additional unnecessary work from the application point of view. We need to be able to differentiate the amount of time spent waiting for undo block grants for CR fabrication vs other types of grants (such as data blocks etc). So, it looks like, Oracle has introduced this new event and I do think that this will be very useful for debugging performance issues.
</p>
<p>
Prior to 11g, you could still differentiate waits for single block grants for undo using ASH data or trace files. But, you will have to use the obj# field for this differentiation and obj# is set to 0 or -1 in the case of undo blocks/undo header blocks.
</p>
<p><strong>Test case</strong></p>
<p>
Of course, a test case would be nice, Just any regular table will do and my table structure have just two columns number, varchar2(255) with 1000 rows or so.
</p>
<div><code> create table rs.t_1000 (n1 number, v1 varchar2(255));<br />
insert into rs.t_1000 select n1, lpad(n1, 255, 'DEADBEAF') from (select level n1 from dual connect by level &lt;=1000;<br />
commit;<br />
</code></p>
<ol>
<li>  node 1: update rs.t_1000 set v1=v1 where n1=100</li>
<li>   node 2; select * from rs.t_1000 where n1=100 &#8211; just to get parsing details away.</li>
<li>  node 1: alter system flush buffer cache; &#8211;flushed buffer cache.</li>
<li>   node 2: select * from rs.t_1000 where n1=100 &#8212; This SELECT statement suffers from gc cr disk read.</li>
</ol>
<p>
At step 3 in our test case, I flushed the buffer cache in node 2. When I reread the block again in node 1, here is an approximate sequence of operations that occurred:
</p>
<ol>
<li>For SELECT statement in step 4, foreground sent a block request to LMS process in node2; LMS process in node 2 did not find the block in the buffer cache (since we flushed the buffer cache).</li>
<li>So, LMS process in node2 sent a grant to the foreground process to read the data block from disk.</li>
<li>Foreground process read the block from the disk, found that block version is higher than the query environment SCN and that there is a pending transaction in an ITL entry of the block.</li>
<li>Foreground process clones the buffer and  tries to apply undo records in order to reconstruct CR version of the block to match the query environment SCN.</li>
<li>But, that pending transaction was initiated in node 2 and that undo segment is mastered by node 2. So, FG process sends a request for the block to node 2 LMS process. LMS process does not find the undo segment block in the node 2 cache and sends back a grant to read the block from the disk to the FG process. Meanwhile, the FG process is still waiting and the amount of time that FG process was waiting to receive the grant is accounted towards &#8216;gc cr disk read&#8217;.</li>
</ol>
<p>
(I formatted trace lines to improve readability and my comments are inline)
</p>
<p>.
</p></div>
<div></div>
<p><code> PARSING IN CURSOR #18446741324873694136 len=162 dep=0 uid=0 oct=3 lid=0 tim=1103269602 hv=361365006 ad='73fba918' sqlid='7cmy6msasmzhf'<br />
select dbms_rowid.rowid_relative_fno (rowid) fno,<br />
dbms_rowid.rowid_block_number(rowid) block,<br />
dbms_rowid.rowid_object(rowid) obj, v1 from rs.t_1000 where n1=100<br />
END OF STMT<br />
c=0,e=17012,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=479790187,tim=1103269601<br />
c=0,e=12393,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=479790187,tim=1103282129<br />
nam='SQL*Net message to client' ela= 4 driver id=1650815232 #bytes=1 p3=0 obj#=603 tim=1103288000<br />
nam='Disk file operations I/O' ela= 7 FileOperation=2 fileno=4 filetype=2 obj#=603 tim=1103288120<br />
nam='db file sequential read' ela= 786 file#=4 block#=2891 blocks=1 obj#=85844 tim=1103289701<br />
nam='db file sequential read' ela= 560 file#=4 block#=2892 blocks=1 obj#=85844 tim=1103290450<br />
nam='Disk file operations I/O' ela= 4 FileOperation=2 fileno=7 filetype=2 obj#=85844 tim=1103290546<br />
nam='db file sequential read' ela= 542 file#=7 block#=2758 blocks=1 obj#=75154 tim=1103291149<br />
-- RS: Following is for <b>undo header block</b> to find the transaction.<br />
nam='gc cr disk read' ela= 633 p1=6 p2=176 p3=43 obj#=0 tim=1103292048<br />
nam='db file sequential read' ela= 662 file#=6 block#=176 blocks=1 obj#=0 tim=1103292843<br />
-- RS: Following read is for <b>undo block </b>itself to rollback the transaction changes.<br />
nam='gc cr disk read' ela= 483 p1=6 p2=955 p3=44 obj#=0 tim=1103293699<br />
nam='db file sequential read' ela= 569 file#=6 block#=955 blocks=1 obj#=0 tim=1103294355<br />
nam='library cache pin' ela= 1045 handle address=2043988208 pin address=1969440144 100*mode+namespace=48820893384706 obj#=0 tim=1103295827<br />
FETCH :c=0,e=8033,p=5,cr=6,cu=0,mis=0,r=1,dep=0,og=1,plh=479790187,tim=1103296065<br />
WAIT : nam='SQL*Net message from client' ela= 323 driver id=1650815232 #bytes=1 p3=0 obj#=0 tim=1103296522<br />
FETCH :c=0,e=24,p=0,cr=1,cu=0,mis=0,r=0,dep=0,og=1,plh=479790187,tim=1103296586<br />
STAT id=1 cnt=1 pid=0 pos=1 obj=75154 op='TABLE ACCESS BY INDEX ROWID T_1000 (cr=7 pr=5 pw=0 time=6505 us cost=2 size=261 card=1)'<br />
STAT id=2 cnt=1 pid=1 pos=1 obj=85844 op='INDEX RANGE SCAN T_1000_N1 (cr=3 pr=2 pw=0 time=2494 us cost=1 size=0 card=1)'<br />
WAIT : nam='SQL*Net message to client' ela= 1 driver id=1650815232 #bytes=1 p3=0 obj#=0 tim=1103296728<br />
</code></p>
<div></div>
<div><strong>Trace file analysis</strong></div>
<div></div>
<p>Let&#8217;s review few lines from the trace file. Block 2758 holds the row physically. After reading that block, a &#8216;gc cr disk read&#8217; wait event is encountered. Essentially, the FG identified that there is a pending transaction, so sent a request to LMS accounting the wait time to &#8216;gc cr disk read&#8217; event. For this &#8216;gc cr disk read&#8217; event, p1 is file_id, p2 is block_id, p3 seems to be a counter increasing by 1 for each of these waits. For example, for the next gc cr disk read, p3 is set to 44. obj#=0 indicates that this is an undo block or undo header block.
</p>
<div></div>
<div>Notice that next line indicates a physical read for that undo header block occurred and the obj# is set to 0.I verified the undo header block by dumping the block too </div>
<p><code><br />
nam='db file sequential read' ela= 542 file#=7 block#=2758 blocks=1 obj#=75154 tim=1103291149<br />
nam='gc cr disk read' ela= 633 p1=6 p2=176 p3=43 obj#=0 tim=1103292048<br />
nam='db file sequential read' ela= 662 file#=6 block#=176 blocks=1 obj#=0 tim=1103292843</code></p>
<div>
<strong>Commit Cleanout </strong></p>
<p>
Commit cleanouts is another reason why you would encounter this wait event. When a session commits, that session will revisit the modified blocks to clean out the ITL entries in the modified blocks. But, this cleanout does not happen in all scenarios. For example, if the number of block changes exceeds list of blocks that session maintains in SGA then the session will mark the transaction table as committed, without cleaning out ITL entries in the actual blocks. Commit cleanout doesn&#8217;t happen if the modified block is not in buffer cache anymore (We will use this idea to trigger commit cleanout in the other node).
</p>
<p>
Next session reading that block will close out the ITL entry in the block with an upper bound SCN. Let&#8217;s tweak our test case little bit to simulate commit cleanouts.
</p>
<p>
One notable difference in the test case below is that after flushing the buffer cache, we switch back to the session updating the block,commit the transaction and flush the buffer cache again. With these two flush we guarantee that session will not commit cleanout and undo block is flushed from the cache. SELECT statement is executed after the commit. When we read the same block from a different node then the reader session will cleanout the ITL entry. Cleanout operation require to identify the transaction state and max query SCN. To identify whether the transaction is committed or not, session in node2 must read the undo header block. Waits to receive the grants for the undo|undo header block are accounted towards gc cr disk read wait event.
</p>
<ol>
<li>  node 1: update rs.t_1000 set v1=v1 where n1=100</li>
<li>   node 2; select * from rs.t_1000 where n1=100 &#8211; just to get parsing details away.</li>
<li>  node 1: alter system flush buffer cache; &#8211;flushed buffer cache.</li>
<li>   commit in node 1 from the other session. </li>
<li>    node 1: alter system flush buffer cache; &#8211;flushed buffer cache to remove undo blocks from cache.</li>
<li>   node 2: select * from rs.t_1000 where n1=100 .</li>
</ol>
<p><strong>Trace file </strong></p>
<p> My comments are inline </p>
<p><code><br />
...<br />
-- block with the row is read below<br />
WAIT : nam='db file sequential read' ela= 417 file#=7 block#=2758 blocks=1 obj#=75154 tim=783492616<br />
WAIT : nam='Disk file operations I/O' ela= 2 FileOperation=2 fileno=6 filetype=2 obj#=75154 tim=783492751<br />
-- Undo header block is read with time accounted towards gc cr disk read. Note that, there are no other reads after this.<br />
-- In the prior test case that we saw earlier, there was an additional read to read undo block;<br />
--  In this test case, no additional read for undo block as only commits need to be cleaned out.<br />
WAIT : nam='gc cr disk read' ela= 12779 p1=6 p2=160 p3=41 obj#=0 tim=783507346<br />
WAIT : nam='db file sequential read' ela= 778 file#=6 block#=160 blocks=1 obj#=0 tim=783508447<br />
</code><br />
<strong>So, what can we do?</strong></div>
<div>Is there any thing you can do to improve the performance of the application and reduce &#8216;gc cr disk read&#8217; wait events? There are few options that you can consider, some are long-term options though.</div>
<div>
<ol>
<li>Consider Application affinity. If the application is running in the same node that transactions are aggressively modifying the objects, you can reduce/eliminate the grants. Application affinity is important even though cache fusion is in play.</li>
<li>Of course, tune the statement such a way that number of block visits are reduced.</li>
<li>Reduce commit cleanouts. For example, if a program is excessively modifying the block in node 1. Subsequent program is reading the same blocks in node 2, then you may have to cleanout the block manually from node 1 by reading the blocks. BTW, parallel queries do not perform commit cleanouts, only serial queries will perform commit cleanouts. Another operation that can get stuck is index creation. If the table has numerous blocks without commit cleanouts, then index build might be slower and can suffer from gc cr disk read events. This is magnified by the fact that these reads are single block reads and much slower for bulk operations such as index rebuild. Reading through all blocks of the table through SELECT statements might be good enough to complete commit cleanouts.  </li>
<li> Don&#8217;t keep long pending transactions on highly active tables in RAC environment. This typically happens for applications that uses tables as queue to pick up jobs i.e. fnd_concurrent_requests table in EBusiness suite. Proper configuration of concurrent manager, optimal values for sleep and cache might help here.
          </li>
<li> For read only tablespace, you might want to make sure that there are no unnecessary commit cleanout operation, since the block will be never cleaned and so every session will try to clean out the block.
        </li>
</ol>
<p><strong>Summary</strong></p>
<p>In summary, this is an useful event to differentiate CR fabrication performance issues and other performance issues. Using few techniques mentioned here, you can reduce the impact of this event.</p>
<p>&nbsp;</p>
</div>
<div></div>
<div></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/orainternals.wordpress.com/1010/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/orainternals.wordpress.com/1010/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/orainternals.wordpress.com/1010/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/orainternals.wordpress.com/1010/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/orainternals.wordpress.com/1010/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/orainternals.wordpress.com/1010/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/orainternals.wordpress.com/1010/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/orainternals.wordpress.com/1010/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/orainternals.wordpress.com/1010/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/orainternals.wordpress.com/1010/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/orainternals.wordpress.com/1010/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/orainternals.wordpress.com/1010/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/orainternals.wordpress.com/1010/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/orainternals.wordpress.com/1010/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=orainternals.wordpress.com&amp;blog=670821&amp;post=1010&amp;subd=orainternals&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://orainternals.wordpress.com/2012/01/13/gc-cr-disk-read/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de30d27adb6aee87e455780e8cb19e7b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">orainternals</media:title>
		</media:content>
	</item>
		<item>
		<title>RMOUG 2012 &#8211; Hello Denver!</title>
		<link>http://orainternals.wordpress.com/2012/01/10/rmoug-2012-hello-denver/</link>
		<comments>http://orainternals.wordpress.com/2012/01/10/rmoug-2012-hello-denver/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 22:11:23 +0000</pubDate>
		<dc:creator>Riyaj Shamsudeen</dc:creator>
				<category><![CDATA[Oracle database internals]]></category>
		<category><![CDATA[Performance tuning]]></category>
		<category><![CDATA[Presentations]]></category>
		<category><![CDATA[RAC]]></category>
		<category><![CDATA[oracle performance]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[RAC performance]]></category>

		<guid isPermaLink="false">http://orainternals.wordpress.com/?p=1005</guid>
		<description><![CDATA[On February 14-16, I’ll be at the Colorado Convention Center in Denver, Colorado for RMOUG’s Training Days Conference. This is the largest regional Oracle User Conference in North America and attracts presenters from all around the country and the globe. I’ll be presenting: Presentation Name: Troubleshooting RAC Background Process Abstract: RAC background process performance is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=orainternals.wordpress.com&amp;blog=670821&amp;post=1005&amp;subd=orainternals&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>On February 14-16, I’ll be at the Colorado Convention Center in Denver, Colorado for RMOUG’s Training Days Conference. This is the largest regional Oracle User Conference in North America and attracts presenters from all around the country and the globe. I’ll be presenting:</p>
<p><strong> Presentation Name: Troubleshooting RAC Background Process </strong></p>
<p> Abstract: RAC background process performance is critical to keep the application performance. This session will demo techniques to review the performance of RAC background processes such as LMS, LMD, LMON, etc. using various statistics and UNIX tools. The presentation will also discuss why certain background processes must run in higher priority to maintain the application performance in RAC.</p>
<p><strong>Presentation Name: A Kind and Gentle Introduction to RAC</strong></p>
<p> Abstract: This session will introduce basic concepts such as cache fusion, conversion to RAC, protocols for interconnect, general architectural overview, GES layer locks, clusterware, etc. The session will also discuss the srvctl command and demo a few of these commands to improve the understanding.</p>
<p><strong>Presentation Name: Parallel Execution in RAC</strong></p>
<p> Abstract: This presentation will start to discuss and demo parallel server allocation, intra, and inter node parallelism aspects. The session will discuss the new parallelism features such as parallel statement queuing, parallel auto dop, and discuss the interaction of those features with RAC. The session will probe a few critical parameters to improve PQ performance in RAC.</p>
<p><a href="http://www.teamycc.com/RMOUG_2012_Conference/index.html" target="_blank"><em>Click here</em></a> for more information or to register for RMOUG’s Training Days.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/orainternals.wordpress.com/1005/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/orainternals.wordpress.com/1005/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/orainternals.wordpress.com/1005/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/orainternals.wordpress.com/1005/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/orainternals.wordpress.com/1005/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/orainternals.wordpress.com/1005/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/orainternals.wordpress.com/1005/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/orainternals.wordpress.com/1005/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/orainternals.wordpress.com/1005/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/orainternals.wordpress.com/1005/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/orainternals.wordpress.com/1005/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/orainternals.wordpress.com/1005/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/orainternals.wordpress.com/1005/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/orainternals.wordpress.com/1005/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=orainternals.wordpress.com&amp;blog=670821&amp;post=1005&amp;subd=orainternals&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://orainternals.wordpress.com/2012/01/10/rmoug-2012-hello-denver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de30d27adb6aee87e455780e8cb19e7b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">orainternals</media:title>
		</media:content>
	</item>
		<item>
		<title>Troubleshooting &#8216;DFS lock handle&#8217; waits</title>
		<link>http://orainternals.wordpress.com/2011/11/08/troubleshooting-dfs-lock-handle-waits/</link>
		<comments>http://orainternals.wordpress.com/2011/11/08/troubleshooting-dfs-lock-handle-waits/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 16:21:41 +0000</pubDate>
		<dc:creator>Riyaj Shamsudeen</dc:creator>
				<category><![CDATA[11g]]></category>
		<category><![CDATA[Oracle database internals]]></category>
		<category><![CDATA[Performance tuning]]></category>
		<category><![CDATA[RAC]]></category>
		<category><![CDATA[AST]]></category>
		<category><![CDATA[BAST]]></category>
		<category><![CDATA[BB enqueue]]></category>
		<category><![CDATA[CI enqueue]]></category>
		<category><![CDATA[DFS lock handle]]></category>
		<category><![CDATA[GES]]></category>
		<category><![CDATA[gv$ges_resource]]></category>
		<category><![CDATA[oracle performance]]></category>
		<category><![CDATA[RAC performance]]></category>
		<category><![CDATA[SV enqueue]]></category>
		<category><![CDATA[v$lock_type]]></category>

		<guid isPermaLink="false">http://orainternals.wordpress.com/?p=961</guid>
		<description><![CDATA[Waits for &#8216;DFS lock handle&#8217; can cause massive performance issues in a busy RAC cluster. In this blog entry, we will explore the DFS lock handle wait event, and understand how to troubleshoot the root cause of these waits. I am also going to use locks and resources interchangeably in this blog, but internally, they [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=orainternals.wordpress.com&amp;blog=670821&amp;post=961&amp;subd=orainternals&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>
  Waits for &#8216;DFS lock handle&#8217; can cause massive performance issues in a busy RAC cluster. In this blog entry, we will explore the DFS lock handle wait event, and understand how to troubleshoot the root cause of these waits. I am also going to use locks and resources interchangeably in this blog, but internally, they are two different types of structures.
</p>
<p><b> A little background </b></p>
<p>
DFS (stands for Distributed File System) is an ancient name, associated with cluster file system operations, in a Lock manager supplied by vendors in Oracle Parallel Server Environment (prior name for RAC). But, this wait event has morphed and is now associated with waits irrelevant to database files also. Hence, it is imperative to understand the underlying details to debug the &#8216;DFS lock handle&#8217; waits.
</p>
<p><b> How does it work? </b></p>
<p>
I have no access to the code, so read this paragraph with caution, as I may have misunderstood my test results: A process trying to acquire a lock on a global GES resource sends a AST(Asynchronous Trap) or BAST (Blocking Asynchronous Trap) message to LCK process, constructing the message with (lock pointer, resource pointer, and resource name) information. If the resource is not available, then the LCK process sends a message to the lock holder for a lock downgrade.
</p>
<p><span id="more-961"></span></p>
<p>
 Now, let’s imagine that we need to ask remote background process to do some operations, say, DBWR to do an object checkpoint in a remote instance. Further, the requestor must wait for the background process to complete the task. What better way is there to implement these waits, than using a lock? It seems that acquiring a lock on a specific resource in a specific mode, triggers a predefined action in that background process. For example, acquiring locks on a specific CI resource triggers the DBWR to object level checkpoint (details later).
</p>
<p>
 While the background process is working, the requesting process is instrumented to wait on the wait event ‘DFS lock handle’, in essence, the requesting process is waiting for one or more background process to perform a specific action. BTW, in some cases, background processes also can wait for &#8216;DFS lock handle&#8217;. Excessive waits by the foreground or background process for the DFS lock handle wait event can lead to instance freeze or application freeze.
</p>
<p>
Every resource has a value block and can be used to send more information about the resource, such as object_id for a sequence, object_id for a table partition etc.
</p>
<p><b> Type of Lock </b></p>
<p>
 First, we need to identify the type of lock associated with this event. Fortunately, type|event in the trace file (or p1 column in v$session when the event waited is DFS lock handle) has this information coded and can be retrieved using the following SQL statement.
</p>
<p><code><br />
From a trace file:<br />
nam='DFS lock handle' ela= 4362 type|mode=1398145029 id1=86033 id2=0 obj#=-1 tim=23065806692</p>
<p>SQL&gt; select chr(bitand(&amp;&amp;p1,-16777216)/16777215) ||<br />
      chr(bitand(&amp;&amp;p1,16711680)/65535) type,<br />
      mod(&amp;&amp;p1, 16) md<br />
     from dual<br />
/<br />
TY         MD<br />
-- ----------<br />
SV          5</p>
<p>Also<br />
1398145029 = 0x53560005; 53 is ASCII for S and 56 is ASCII for V.<br />
</code></p>
<p>
Now, we know that, lock type is SV and we can get more details about this lock type accessing v$lock_type view. SV enqueue is acquired to co-ordinate the retrieval values from sequences created with order and cache. There are many other enqueue types though, this is just an example
</p>
<p><code><br />
SQL&gt; exec rs.print_table<br />
   ('select * from v$lock_type where type=''SV''');<br />
TYPE                          : SV<br />
NAME                          : Sequence Ordering<br />
ID1_TAG                       : object #<br />
ID2_TAG                       : 0<br />
IS_USER                       : NO<br />
DESCRIPTION                   : Lock to ensure ordered sequence allocation in RAC mode<br />
-----------------<br />
</code><br />
<b> Resource name</b></p>
<p>
 In Global Enqueue Services layer, each resource is uniquely identified by a resource name. For example, for the sequence with object_id=86033, resource name is [0x15011][0x0],[SV][ext 0x0,0x0]. As you see, this resource name is essentially, [id1][id2],[lock type][extension]. In this example, id1=86033=0&#215;15011. Also, p2, p3 columns in v$session for this DFS lock handle wait event is enumerating id1 and id2 columns of the resource. As you probably guessed, many instance level locks are not visible in gv$lock family of views, of course, gv$lock is a global view of local locks and gv$ges_enqueue is global view of global locks <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />
</p>
<p> Let’s probe further to understand few lock types commonly encountered.
</p>
<p><b> Enqueue: SV </b></p>
<p>
  If the enqueue type is SV, then that enqueue is used to co-ordinate sequence values in a RAC cluster, for sequences declared with order and cache attributes. For the SV locks, id1 column will give you the object# of the sequence. In the example line below
</p>
<p><code><br />
nam='DFS lock handle' ela= 4362 type|mode=1398145029 id1=86033 id2=0 obj#=-1 tim=23065806692<br />
</code></p>
<p>
id1 is set to 86033. That’s the object_id of a sequence declared with cache and order. Sequences with these attributes require the values to be in ORDER. As we know that in RAC, it is likely to have sequences return values in an order not correlated with time, due to the fact that each instance will cache sequence values. With ORDER attribute, we specifically require these values to be in a strict ascending/descending order even if the sequences are accessed in different instances. To accommodate this requirement, RAC code must ensure that next value retrieved from the sequence will be in an ORDER in any instance and the co-ordination mechanism is by transferring couple of GES messages between the instances. Master node of the GES resource for that sequence object will keep track of the latest value. It looks like, Value block of the GES resource is updated to reflect the latest sequence value.
</p>
<p>
 You might be wondering what if there is more than a sequence. How is it handled? Each sequence gets its own resource. For example, the resource name for sequence with object_id=86033 will be [0x15011][0x0],[SV] and another sequence with object_id=86034 will be maintained by a resource [0x15012][0x0],[SV] etc. Value block of these resources will contain the latest value of the sequence and kept in the master node of this resource.( As a shameless plug, I go in to much details about GES and GRD in my Advanced RAC troubleshooting class. )
</p>
<p>
 Of course, if the wait event is DFS lock handle, and if the enqueue is SV type, then the solution probably would be that, ORDER attribute is not a suitable attribute for that heavily accessed sequence. My recommendation is always been (a) Use bigger cache &gt;1000 for the sequences frequently accessed, hundreds per second (b) Use default cache of 20 if the sequence is not frequently accessed (c) if you really require ORDERed values, know that this could be a problem in RAC, and use ORDER cache (d) Only in exceptional situations use nocache.
</p>
<p><b> Enqueue: CI </b></p>
<p>
  CI stands for Cross Invocation, and mainly used to trigger an action in a background process such as DBWR, CKPT process etc, in a remote instance. id1 and id2 columns of this CI enqueue has special significance. Depending upon the values of these id1,id2 fields a specific resource is manipulated to trigger a specific action in a background process.
</p>
<p> For example, truncating a table leads to foreground process marking a segment as temporary and requesting the background process to clean up the segments from their cache. Essentially, a co-ordination mechanism to ensure that all buffers about a segment is flushed out by DBW. This operation is triggered by acquiring a GES resource of CI type in a specific format: [0xd][0x2],[CI][ext 0x0,0x0]. From the GES resource name [0xd][0x2],[CI], we can decode that lock name is CI, id1=0xd=13, id2=0&#215;2=2 (CI-13-2).</p>
<p>
 You can see the process holding this specific resource in gv$ges_enqueue;
</p>
<p><code><br />
select resource_name1 ,inst_id, pid,blocker, blocked from gv$ges_enqueue where resource_name1 like '%[0xd][0x2],[CI]%' and pid!=0<br />
SQL&gt; /</p>
<p>RESOURCE_NAME1			  INST_ID	 PID	BLOCKER    BLOCKED<br />
------------------------------ ---------- ---------- ---------- ----------<br />
[0xd][0x2],[CI][ext 0x0,0x0]		1	1481	      0 	 0<br />
[0xd][0x2],[CI][ext 0x0,0x0]		2	1486	      0 	 0</p>
<p>In this case, PID 1486 is DBW0<br />
$ ps -ef |grep 1486|grep -v grep<br />
  oracle  1486     1   0 14:23:36 ?           0:02 ora_dbw0_solrac2</p>
<p></code></p>
<p>
  In fact, similar resource with a different id2 combinations are accessed prior to waiting for id2=2.  For example, resources, [0xd][0x1],[CI], [0xd][0x3],[CI] are accessed prior to acquiring the resource [0xd][0x2],[CI] for a partition. Value block of the resource [0xd][0x1],[CI] is used to send the object_id of the segments.  First two resources ([0xd][0x1],[CI], [0xd][0x3],[CI] ) are accessed as AST(Asynchronous Trap), and the resource [0xd][0x2],[CI] is accessed with BAST (Blocking Asynchronous Trap) per partition (or segment).
</p>
<p>
  If you encounter high number of waits for ‘DFS lock handle’ with CI enqueue, then find the object_id of the event. Find the object details from the object_id, and understand the activity on that segment. Of course, excessive truncate and DDL statement on objects can cause issues in RAC due to global lock activity.
</p>
<p>
  There are few more examples of CI locks. For example, starting parallel query servers in an inter-instance parallelism will trigger few access to CI locks. Three access to the resource to allocate one parallel slave is printed below: Essentially, resource is [0xa][0x1],[CI] for the first wait below.
</p>
<p><code><br />
nam='DFS lock handle' ela= 554 type|mode=1128857605 id1=10 id2=1 obj#=79568<br />
nam='DFS lock handle' ela= 523 type|mode=1128857605 id1=10 id2=3 obj#=79568<br />
nam='DFS lock handle' ela= 129970 type|mode=1128857605 id1=10 id2=2 obj#=79568<br />
</code></p>
<p>
 Note 34631.1 documents some of the meaning for id1 and id2 column. For example, id1=13 “drop sort segments”. I am not certain this note is accurate enough for 11.2 though.
</p>
<p><b> Enqueue: IV </b></p>
<p>
 IV enqueues are acquired for Invalidation Lock. When a DDL is encountered on an object, then the dependent objects need to be invalidated. For example, cursors (SQL statements) that have dependency on a table need to be invalidated so that next execution of that cursor will reparse the cursor, after a DDL on that table. (Of course, I do understand that not all DDL statements will invalidate the cursors).
</p>
<p> only the permanent objects such as tables and indexes are globalised and the SQL statements need not be protected by global resources. SQL statements are in turn invalidated by the dependency mechanisms on the dependent objects. For example, if you alter a table to drop a column, then that DDL statement will trigger invalidation of dependent objects of that table from all instances, an indirect invalidation of cursors from all instances occurs. In some cases, library cache locks and pin waits can occur due to indirect dependency validation mechanisms.
</p>
<p><code><br />
 nam='DFS lock handle' ela= 414 type|mode=1230372869 id1=1398361667 id2=59 obj#=82512 tim=11542441219</p>
<p><code></p>
<p>
  In the example above, object# 82512 is an associated with table partition. Essentially, all dependent object of that partition must be invalidated from all instances. There are potential bugs in this area, for example, IV waits are higher for shared server connections (bug 8215444)
</p>
<p><b> Enqueue: BB </b></p>
<p>
 XA enabled applications can connect to more than one instance in RAC from 11.2 onwards. Prior to 11.2, XA transaction can only connect to just one instance of RAC. GTX processes implement these global transactions and due to bug 13003033, GTX process waits for BB enqueue longer, leading to more DFS lock handle waits in 11.2. Only workaround at this point is to disable global transactions (11.2.0.2).
</p>
<p><b> Enqueue related to ASM </b></p>
<p>
  There are many ASM related operations that use DFS lock handles to co-ordinate the operations. For example, ASM map operations when a file extended or added will trigger actions in the other nodes via DFS lock handle mechanism.
</p>
<p><code><br />
Here is the list of ASM based waits:<br />
38    ASM diskgroup discovery wait<br />
39    ASM diskgroup release<br />
40    ASM push DB updates<br />
41    ASM add ACD chunk<br />
42    ASM map resize message<br />
43    ASM map lock message<br />
44    ASM map unlock message (phase 1)<br />
45    ASM map unlock message (phase 2)<br />
46    ASM generate add disk redo marker<br />
47    ASM check of PST validity<br />
48    ASM offline disk CIC<br />
</code><br />
<b>Summary</b></p>
<p> DFS lock handle is a wait event is associated with many different areas of database software code. It is important to identify the lock type, id1,id2 and understand the problem to resolve the root cause. Of course, many of these issues <em>can </em>be a new or already-identified software bugs too.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/orainternals.wordpress.com/961/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/orainternals.wordpress.com/961/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/orainternals.wordpress.com/961/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/orainternals.wordpress.com/961/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/orainternals.wordpress.com/961/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/orainternals.wordpress.com/961/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/orainternals.wordpress.com/961/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/orainternals.wordpress.com/961/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/orainternals.wordpress.com/961/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/orainternals.wordpress.com/961/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/orainternals.wordpress.com/961/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/orainternals.wordpress.com/961/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/orainternals.wordpress.com/961/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/orainternals.wordpress.com/961/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=orainternals.wordpress.com&amp;blog=670821&amp;post=961&amp;subd=orainternals&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://orainternals.wordpress.com/2011/11/08/troubleshooting-dfs-lock-handle-waits/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de30d27adb6aee87e455780e8cb19e7b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">orainternals</media:title>
		</media:content>
	</item>
		<item>
		<title>Oracle Open World 2011 &#8211; My presentation on RAC topic</title>
		<link>http://orainternals.wordpress.com/2011/09/28/oracle-open-world-2011-my-presentation-on-rac/</link>
		<comments>http://orainternals.wordpress.com/2011/09/28/oracle-open-world-2011-my-presentation-on-rac/#comments</comments>
		<pubDate>Wed, 28 Sep 2011 16:09:56 +0000</pubDate>
		<dc:creator>Riyaj Shamsudeen</dc:creator>
				<category><![CDATA[11g]]></category>
		<category><![CDATA[Performance tuning]]></category>
		<category><![CDATA[Presentations]]></category>
		<category><![CDATA[RAC]]></category>
		<category><![CDATA[oracle performance]]></category>
		<category><![CDATA[parallel_instance_group]]></category>
		<category><![CDATA[RAC performance]]></category>

		<guid isPermaLink="false">http://orainternals.wordpress.com/?p=948</guid>
		<description><![CDATA[I will be talking about &#8220;Administering Parallel Execution in RAC&#8221; with demos on Sunday morning 9AM-10AM (session id 28060). This is part of IOUG RAC SIG presentation series. You would enjoy the content and demos I have prepared. I know, it is too early, but hoping to see you there! BTW, if you have attended [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=orainternals.wordpress.com&amp;blog=670821&amp;post=948&amp;subd=orainternals&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>
  I will be talking about &#8220;Administering Parallel Execution in RAC&#8221; with demos on Sunday morning 9AM-10AM (session id 28060). This is part of IOUG RAC SIG presentation series. You would enjoy the content and demos I have prepared.
</p>
<p>
   I know, it is too early, but hoping to see you there!<br />
   BTW, if you have attended my RAC Advanced Troubleshooting class series, please don&#8217;t hesitate to introduce yourself when we meet.
</p>
<p>
<b> Session details: </b><br />
  Session ID: 28060<br />
  Session Title: IOUG: Administering Parallel Execution in Oracle RAC<br />
  Venue / Room: Moscone West- 2005<br />
  Date and Time: 10/2/11, 9:00 &#8211; 10:00
</p>
<p>
  Update: I just completed this session in IOUG. Thank you for coming, if you were in the room.<br />
  You can download the pdf file from<br />
 <a href='http://orainternals.files.wordpress.com/2011/09/px-execution-in-rac.pdf'>PX execution in RAC</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/orainternals.wordpress.com/948/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/orainternals.wordpress.com/948/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/orainternals.wordpress.com/948/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/orainternals.wordpress.com/948/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/orainternals.wordpress.com/948/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/orainternals.wordpress.com/948/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/orainternals.wordpress.com/948/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/orainternals.wordpress.com/948/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/orainternals.wordpress.com/948/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/orainternals.wordpress.com/948/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/orainternals.wordpress.com/948/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/orainternals.wordpress.com/948/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/orainternals.wordpress.com/948/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/orainternals.wordpress.com/948/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=orainternals.wordpress.com&amp;blog=670821&amp;post=948&amp;subd=orainternals&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://orainternals.wordpress.com/2011/09/28/oracle-open-world-2011-my-presentation-on-rac/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de30d27adb6aee87e455780e8cb19e7b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">orainternals</media:title>
		</media:content>
	</item>
		<item>
		<title>RAC hack session &#8211; Tuesday &#8211; July 11 2011</title>
		<link>http://orainternals.wordpress.com/2011/07/11/rac-hack-session-tuesday-july-11-2011/</link>
		<comments>http://orainternals.wordpress.com/2011/07/11/rac-hack-session-tuesday-july-11-2011/#comments</comments>
		<pubDate>Mon, 11 Jul 2011 14:02:24 +0000</pubDate>
		<dc:creator>Riyaj Shamsudeen</dc:creator>
				<category><![CDATA[Performance tuning]]></category>
		<category><![CDATA[Presentations]]></category>
		<category><![CDATA[RAC]]></category>
		<category><![CDATA[LGWR]]></category>
		<category><![CDATA[LMS]]></category>
		<category><![CDATA[log file sync]]></category>
		<category><![CDATA[oracle performance]]></category>
		<category><![CDATA[performance logfile dump]]></category>
		<category><![CDATA[pstack]]></category>
		<category><![CDATA[RAC performance]]></category>

		<guid isPermaLink="false">http://orainternals.wordpress.com/?p=938</guid>
		<description><![CDATA[I will be conducting a 1-hour deep dive session about RAC LMS process (and about LGWR processes too if time permits) using advanced UNIX utilities. Read Tanel&#8217;s blog entry for details: RAC hack session See you there!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=orainternals.wordpress.com&amp;blog=670821&amp;post=938&amp;subd=orainternals&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>
I will be conducting a 1-hour deep dive session about RAC LMS process (and about LGWR processes too if time permits) using advanced UNIX utilities. Read Tanel&#8217;s blog entry for details:<br />
<a href="http://blog.tanelpoder.com/seminar/secret/free-rac-hacking-session-probing-lms-process-internals-with-advanced-unix-utilities/" title="RAC hack session"> RAC hack session</a>
</p>
<p>
 See you there!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/orainternals.wordpress.com/938/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/orainternals.wordpress.com/938/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/orainternals.wordpress.com/938/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/orainternals.wordpress.com/938/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/orainternals.wordpress.com/938/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/orainternals.wordpress.com/938/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/orainternals.wordpress.com/938/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/orainternals.wordpress.com/938/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/orainternals.wordpress.com/938/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/orainternals.wordpress.com/938/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/orainternals.wordpress.com/938/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/orainternals.wordpress.com/938/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/orainternals.wordpress.com/938/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/orainternals.wordpress.com/938/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=orainternals.wordpress.com&amp;blog=670821&amp;post=938&amp;subd=orainternals&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://orainternals.wordpress.com/2011/07/11/rac-hack-session-tuesday-july-11-2011/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de30d27adb6aee87e455780e8cb19e7b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">orainternals</media:title>
		</media:content>
	</item>
		<item>
		<title>1-Day Expert Oracle-centric Conference at MIT &#8211; 07/07/11 -virtual or physical</title>
		<link>http://orainternals.wordpress.com/2011/07/06/1-day-expert-oracle-centric-conference-at-mit-070711-virtual-or-physical/</link>
		<comments>http://orainternals.wordpress.com/2011/07/06/1-day-expert-oracle-centric-conference-at-mit-070711-virtual-or-physical/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 14:05:43 +0000</pubDate>
		<dc:creator>Riyaj Shamsudeen</dc:creator>
				<category><![CDATA[Performance tuning]]></category>
		<category><![CDATA[Presentations]]></category>

		<guid isPermaLink="false">http://orainternals.wordpress.com/?p=931</guid>
		<description><![CDATA[You probably aware of 1 day event happening on July 7th Thursday 9AM-5PM EDT (virtually and physically). I will be talking about advanced UNIX tools to debug issues. You can find details of 1-day event here Here is the outline of my presentation: Advanced tools and techniques in Unix environment &#8211; Riyaj Shamsudeen &#8211; 07/07/2011, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=orainternals.wordpress.com&amp;blog=670821&amp;post=931&amp;subd=orainternals&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>
  You probably aware of 1 day event happening on July 7th Thursday 9AM-5PM EDT (virtually and physically). I will be talking about advanced UNIX tools to debug issues. You can find details of 1-day event <a href="http://bit.ly/jtZhFC" title="BrainSurface MIT conference 1day"> here </a>
</p>
<p>
Here is the outline of my presentation:
</p>
<p><b> Advanced tools and techniques in Unix environment &#8211; Riyaj Shamsudeen &#8211; 07/07/2011, 3:15pm &#8211; 4:00pm EDT </b></p>
<p>
Unix environments provides rich set of tools to debug performance issues. Even if the issue is complex to understand, if we use right tool for the job, we can identify the root cause of an issue quickly. In this presentation, the speaker will demo tools such as truss/strace, pfiles, pmap, prstat, vmstat, mpstat etc to show how you can debug complex issues. The speaker will also introduce Solaris/dtrace to understand performance issues.</p>
<p>
  Why not join us?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/orainternals.wordpress.com/931/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/orainternals.wordpress.com/931/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/orainternals.wordpress.com/931/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/orainternals.wordpress.com/931/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/orainternals.wordpress.com/931/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/orainternals.wordpress.com/931/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/orainternals.wordpress.com/931/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/orainternals.wordpress.com/931/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/orainternals.wordpress.com/931/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/orainternals.wordpress.com/931/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/orainternals.wordpress.com/931/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/orainternals.wordpress.com/931/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/orainternals.wordpress.com/931/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/orainternals.wordpress.com/931/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=orainternals.wordpress.com&amp;blog=670821&amp;post=931&amp;subd=orainternals&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://orainternals.wordpress.com/2011/07/06/1-day-expert-oracle-centric-conference-at-mit-070711-virtual-or-physical/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de30d27adb6aee87e455780e8cb19e7b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">orainternals</media:title>
		</media:content>
	</item>
		<item>
		<title>Advanced RAC Training</title>
		<link>http://orainternals.wordpress.com/2011/07/05/advanced-rac-training/</link>
		<comments>http://orainternals.wordpress.com/2011/07/05/advanced-rac-training/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 02:58:50 +0000</pubDate>
		<dc:creator>Riyaj Shamsudeen</dc:creator>
				<category><![CDATA[Oracle database internals]]></category>
		<category><![CDATA[Performance tuning]]></category>
		<category><![CDATA[Presentations]]></category>
		<category><![CDATA[RAC]]></category>
		<category><![CDATA[oracle performance]]></category>
		<category><![CDATA[rac online training]]></category>
		<category><![CDATA[RAC performance]]></category>
		<category><![CDATA[RAC training]]></category>
		<category><![CDATA[seminar]]></category>

		<guid isPermaLink="false">http://orainternals.wordpress.com/?p=921</guid>
		<description><![CDATA[I will be delivering an intense, advanced 2-week RAC training seminar in Aug 22-26 and Sep 19-23 with numerous demos, dumps and scripts. We will meet 4 hours per day, in a virtual world, 8AM-12 Noon Pacific time for those two weeks. Tanel has written has a great blog post about this seminar series Advanced [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=orainternals.wordpress.com&amp;blog=670821&amp;post=921&amp;subd=orainternals&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>
  I will be delivering an intense, advanced 2-week RAC training seminar in Aug 22-26 and Sep 19-23 with numerous demos, dumps and scripts. We will meet 4 hours per day, in a virtual world, 8AM-12 Noon Pacific time for those two weeks. Tanel has written has a great blog post about this seminar series <a href="http://blog.tanelpoder.com/2011/06/30/advanced-rac-training-by-oracle-rac-expert-riyaj-shamsudeen/" title="Advanced RAC training"> Advanced RAC training</a>.
</p>
<p>
   If you like my presentations about RAC and performance tuning, you will love my seminar series. You will gain better understanding about RAC internals, and you will be able to advance your debugging and performance tuning skills attending my seminar series.
</p>
<p>
   Join me and Let&#8217;s explore RAC further.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/orainternals.wordpress.com/921/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/orainternals.wordpress.com/921/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/orainternals.wordpress.com/921/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/orainternals.wordpress.com/921/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/orainternals.wordpress.com/921/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/orainternals.wordpress.com/921/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/orainternals.wordpress.com/921/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/orainternals.wordpress.com/921/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/orainternals.wordpress.com/921/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/orainternals.wordpress.com/921/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/orainternals.wordpress.com/921/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/orainternals.wordpress.com/921/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/orainternals.wordpress.com/921/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/orainternals.wordpress.com/921/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=orainternals.wordpress.com&amp;blog=670821&amp;post=921&amp;subd=orainternals&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://orainternals.wordpress.com/2011/07/05/advanced-rac-training/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/de30d27adb6aee87e455780e8cb19e7b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">orainternals</media:title>
		</media:content>
	</item>
	</channel>
</rss>
