<?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/"
	>

<channel>
	<title>Tanel Poder&#039;s blog: IT &#38; Mobile for Geeks and Pros</title>
	<atom:link href="http://blog.tanelpoder.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tanelpoder.com</link>
	<description>Oracle, Exadata, Linux, Performance, Troubleshooting - Mobile Life and Productivity.</description>
	<lastBuildDate>Wed, 15 May 2013 21:28:39 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Oracle Database 11.2 Upgrade and Migration slides</title>
		<link>http://blog.tanelpoder.com/2013/04/14/oracle-database-11-2-upgrade-and-migration-slides/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=oracle-database-11-2-upgrade-and-migration-slides</link>
		<comments>http://blog.tanelpoder.com/2013/04/14/oracle-database-11-2-upgrade-and-migration-slides/#comments</comments>
		<pubDate>Sun, 14 Apr 2013 12:47:05 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/?p=2142</guid>
		<description><![CDATA[Check out the extensive slide deck (over 500 slides) about upgrading techniques to Oracle 11.2, by Oracle Corp (Roy Swonger and Mike Dietrich): https://blogs.oracle.com/UPGRADE/entry/new_version_of_the_huge It has lots of examples (from real customer upgrade cases) in it. Thanks to Randolf Geist for telling me about this. You can also download other interesting presentations from that page [...]<div class="crp_related"><h4>Related Posts</h4><ul><li><a href="http://blog.tanelpoder.com/oracle/exadata/"     class="crp_title">Exadata</a></li><li><a href="http://blog.tanelpoder.com/2011/01/11/performance-stories-from-exadata-migrations/"     class="crp_title">Performance Stories from Exadata Migrations</a></li><li><a href="http://blog.tanelpoder.com/2011/08/08/are-you-getting-the-most-out-of-your-exadata-performance-part-1/"     class="crp_title">Are you getting the most out of your Exadata performance?&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2011/03/16/ora-4031-errors-contention-cursor-management-issues-and-shared-pool-fragmentation-free-secret-seminar/"     class="crp_title">ORA-4031 errors, contention, cursor management issues and&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2013/02/14/drilling-deep-into-exadata-performance-with-ash-sql-monitoring-and-exadata-snapper-slides-and-a-hacking-session/"     class="crp_title">Drilling Deep Into Exadata Performance with ASH, SQL&hellip;</a></li></ul></div>]]></description>
				<content:encoded><![CDATA[<p>Check out the extensive slide deck (over 500 slides) about upgrading techniques to Oracle 11.2, by Oracle Corp (Roy Swonger and Mike Dietrich):</p>
<ul>
<li><a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cHM6Ly9ibG9ncy5vcmFjbGUuY29tL1VQR1JBREUvZW50cnkvbmV3X3ZlcnNpb25fb2ZfdGhlX2h1Z2U=" target=\"_blank\">https://blogs.oracle.com/UPGRADE/entry/new_version_of_the_huge</a></li>
</ul>
<p>It has lots of examples (from real customer upgrade cases) in it.</p>
<p>Thanks to <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL29yYWNsZS1yYW5kb2xmLmJsb2dzcG90LmNvbS8=" target=\"_blank\">Randolf Geist</a> for telling me about this.</p>
<p>You can also download other interesting presentations from that page (check the right hand side download section), like the <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2FwZXgub3JhY2xlLmNvbS9wbHMvYXBleC9mP3A9MjAyMjAyOjI6MDpBUFBMSUNBVElPTl9QUk9DRVNTPWRvd25sb2FkRmlsZTo6OkYyMDIyNV9JRDo4MjE=" target=\"_blank\">Oracle Database Behavior Changes 8.0 through 11.2</a> doc. Pretty cool!</p>
<p>&nbsp;</p>
 <img src="http://blog.tanelpoder.com/?feed-stats-post-id=2142" width="1" height="1" style="display: none;" /><div class="crp_related"><h4>Related Posts</h4><ul><li><a href="http://blog.tanelpoder.com/oracle/exadata/"     class="crp_title">Exadata</a></li><li><a href="http://blog.tanelpoder.com/2011/01/11/performance-stories-from-exadata-migrations/"     class="crp_title">Performance Stories from Exadata Migrations</a></li><li><a href="http://blog.tanelpoder.com/2011/08/08/are-you-getting-the-most-out-of-your-exadata-performance-part-1/"     class="crp_title">Are you getting the most out of your Exadata performance?&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2011/03/16/ora-4031-errors-contention-cursor-management-issues-and-shared-pool-fragmentation-free-secret-seminar/"     class="crp_title">ORA-4031 errors, contention, cursor management issues and&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2013/02/14/drilling-deep-into-exadata-performance-with-ash-sql-monitoring-and-exadata-snapper-slides-and-a-hacking-session/"     class="crp_title">Drilling Deep Into Exadata Performance with ASH, SQL&hellip;</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2013/04/14/oracle-database-11-2-upgrade-and-migration-slides/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to Compose New Gmail Messages in Full Screen (instead of the tiny compose box of new Gmail)</title>
		<link>http://blog.tanelpoder.com/2013/04/09/how-to-compose-new-gmail-messages-in-full-screen-instead-of-the-tiny-compose-box-of-new-gmail/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-to-compose-new-gmail-messages-in-full-screen-instead-of-the-tiny-compose-box-of-new-gmail</link>
		<comments>http://blog.tanelpoder.com/2013/04/09/how-to-compose-new-gmail-messages-in-full-screen-instead-of-the-tiny-compose-box-of-new-gmail/#comments</comments>
		<pubDate>Tue, 09 Apr 2013 11:51:00 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/?p=2124</guid>
		<description><![CDATA[I&#8217;m writing this (unusual) post as I am a long time Gmail user and recently I&#8217;ve seen plenty of people &#38; articles complain about the Gmail&#8217;s new compose window (the one that shows up as a small hovering window in the bottom right of your screen): The top google hits so far only return tips [...]<div class="crp_related"><h4>Related Posts</h4><ul><li><a href="http://blog.tanelpoder.com/2013/02/22/exasnapper-0-7-beta-download-and-the-hacking-session-videos/"     class="crp_title">ExaSnapper 0.7 beta download and the hacking session videos</a></li><li><a href="http://blog.tanelpoder.com/2011/03/30/oracle-troubleshooting-tv-show/"     class="crp_title">Oracle Troubleshooting TV Show: Season 1, Episode 01 ;-)</a></li><li><a href="http://blog.tanelpoder.com/2011/03/29/moats-the-mother-of-all-tuning-scripts/"     class="crp_title">MOATS: The Mother of All Tuning Scripts!</a></li><li><a href="http://blog.tanelpoder.com/2013/02/18/even-more-snapper-v4-03-now-works-in-sql-developer-too/"     class="crp_title">Even more Snapper &#8211; v4.03 now works in SQL Developer&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2011/08/11/full-scans-direct-path-reads-and-ora-8103-error-hacking-session-video-here-plus-itunes-podcast-address-2/"     class="crp_title">Full scans, direct path reads and ORA-8103 error hacking&hellip;</a></li></ul></div>]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m writing this (unusual) post as I am a long time Gmail user and recently I&#8217;ve seen plenty of people &amp; articles complain about the Gmail&#8217;s new compose window (the one that shows up as a small hovering window in the bottom right of your screen):</p>
<p><a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTMvMDQvZ21haWxfbmV3X2NvbXBvc2UzLnBuZw=="><img class="alignnone size-medium wp-image-2133" alt="gmail_new_compose3" src="http://blog.tanelpoder.com/wp-content/uploads/2013/04/gmail_new_compose3-300x271.png" width="300" height="271" /></a></p>
<p>The top google hits so far only return tips to disable the new editor completely, but I want to use the new one, just in a bigger window! There is a <strong>very easy workaround</strong> for that &#8211; and there&#8217;s <strong>no need</strong> to switch back to the old compose mode at all!</p>
<p>If you are using your mouse, then just:</p>
<ol>
<li><span style="line-height: 13px;"><strong>Hold down SHIFT</strong> key when clicking the Compose button to get a <strong>stand-alone new window</strong> for composing a message.</span></li>
<li><strong>Hold down CTRL</strong> (on Windows) or <strong>Command</strong> (on Mac OSX) key to get a <strong>full-screen new browser tab</strong> for composing a message.</li>
</ol>
<p>Examples 1 &amp; 2 below:</p>
<p><a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTMvMDQvZ21haWxfbmV3X3dpbmRvd19jb21wb3NlLnBuZw=="><img class="alignnone size-medium wp-image-2127" alt="gmail_new_window_compose" src="http://blog.tanelpoder.com/wp-content/uploads/2013/04/gmail_new_window_compose-300x228.png" width="300" height="228" /></a><a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTMvMDQvZ21haWxfZnVsbF9zY3JlZW5fY29tcG9zZS5wbmc="><img class="alignnone size-medium wp-image-2126" alt="gmail_full_screen_compose" src="http://blog.tanelpoder.com/wp-content/uploads/2013/04/gmail_full_screen_compose-300x227.png" width="300" height="227" /></a></p>
<p>If you use <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cHM6Ly9zdXBwb3J0Lmdvb2dsZS5jb20vbWFpbC9hbnN3ZXIvNjU5ND9obD1lbg==" target=\"_blank\">Gmail keyboard shortcuts</a> for productivity (they&#8217;re awesome!), then you can just:</p>
<ol>
<li><span style="line-height: 13px;">Press &#8220;c&#8221; for the new (small) compose box</span></li>
<li>Press <strong>SHIFT-C</strong> (capital &#8220;C&#8221;) for the <strong>stand-alone new window</strong> for composing a message</li>
<li>Press <strong>D</strong> for a full screen <strong>new browser tab</strong> for composing a message</li>
</ol>
<p>Note that you can view the Gmail shortcuts reference, <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cHM6Ly9zdXBwb3J0Lmdvb2dsZS5jb20vbWFpbC9hbnN3ZXIvNjU5ND9obD1lbg==" target=\"_blank\">if this feature is enabled</a>, just by pressing the ? (question mark) key:<br />
<a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTMvMDQvZ21haWxfdmltX25hdmlnYXRpb25fa2V5cy5wbmc="><img class="alignnone size-full wp-image-2128" alt="gmail_vim_navigation_keys" src="http://blog.tanelpoder.com/wp-content/uploads/2013/04/gmail_vim_navigation_keys.png" width="269" height="173" /></a><br />
So, there&#8217;s no need to switch back to the old compose mode completely, just remember SHIFT, CTRL and the &#8220;D&#8221; keys :)</p>
 <img src="http://blog.tanelpoder.com/?feed-stats-post-id=2124" width="1" height="1" style="display: none;" /><div class="crp_related"><h4>Related Posts</h4><ul><li><a href="http://blog.tanelpoder.com/2013/02/22/exasnapper-0-7-beta-download-and-the-hacking-session-videos/"     class="crp_title">ExaSnapper 0.7 beta download and the hacking session videos</a></li><li><a href="http://blog.tanelpoder.com/2011/03/30/oracle-troubleshooting-tv-show/"     class="crp_title">Oracle Troubleshooting TV Show: Season 1, Episode 01 ;-)</a></li><li><a href="http://blog.tanelpoder.com/2011/03/29/moats-the-mother-of-all-tuning-scripts/"     class="crp_title">MOATS: The Mother of All Tuning Scripts!</a></li><li><a href="http://blog.tanelpoder.com/2013/02/18/even-more-snapper-v4-03-now-works-in-sql-developer-too/"     class="crp_title">Even more Snapper &#8211; v4.03 now works in SQL Developer&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2011/08/11/full-scans-direct-path-reads-and-ora-8103-error-hacking-session-video-here-plus-itunes-podcast-address-2/"     class="crp_title">Full scans, direct path reads and ORA-8103 error hacking&hellip;</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2013/04/09/how-to-compose-new-gmail-messages-in-full-screen-instead-of-the-tiny-compose-box-of-new-gmail/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Public Appearances and Exadata Performance Training</title>
		<link>http://blog.tanelpoder.com/2013/04/02/public-appearances-and-exadata-performance-training/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=public-appearances-and-exadata-performance-training</link>
		<comments>http://blog.tanelpoder.com/2013/04/02/public-appearances-and-exadata-performance-training/#comments</comments>
		<pubDate>Tue, 02 Apr 2013 15:13:06 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Announcement]]></category>
		<category><![CDATA[Exadata]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/?p=2021</guid>
		<description><![CDATA[I will be doing a lot of (Exadata) talking and teaching in the coming months. Here&#8217;s a list of events where you&#8217;ll see me speaking, teaching, hacking, learning and hopefully also drinking beer: 16 April 2013 &#8211; UKOUG Engineered Systems Summit London, UK I will talk about the common Exadata performance lessons learned in my [...]<div class="crp_related"><h4>Related Posts</h4><ul><li><a href="http://blog.tanelpoder.com/2010/07/30/exadata-v2-smart-scan-performance-troubleshooting-article/"     class="crp_title">Exadata v2 Smart Scan Performance Troubleshooting article</a></li><li><a href="http://blog.tanelpoder.com/2011/08/08/are-you-getting-the-most-out-of-your-exadata-performance-part-1/"     class="crp_title">Are you getting the most out of your Exadata performance?&hellip;</a></li><li><a href="http://blog.tanelpoder.com/oracle/exadata/troubleshooting/"     class="crp_title">Oracle Exadata Troubleshooting</a></li><li><a href="http://blog.tanelpoder.com/oracle/exadata/"     class="crp_title">Exadata</a></li><li><a href="http://blog.tanelpoder.com/2013/02/14/drilling-deep-into-exadata-performance-with-ash-sql-monitoring-and-exadata-snapper-slides-and-a-hacking-session/"     class="crp_title">Drilling Deep Into Exadata Performance with ASH, SQL&hellip;</a></li></ul></div>]]></description>
				<content:encoded><![CDATA[<p>I will be doing a lot of (Exadata) talking and teaching in the coming months. Here&#8217;s a list of events where you&#8217;ll see me speaking, teaching, hacking, learning and hopefully also drinking beer:</p>
<ul>
<li><strong>16 April 2013</strong> &#8211; <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL3d3dy51a291Zy5vcmcvMjAxMy1ldmVudHMvdWtvdWctZW5naW5lZXJlZC1zeXN0ZW1zLXN1bW1pdC9hZ2VuZGEv" target=\"_blank\">UKOUG Engineered Systems Summit</a>
<ul>
<li>London, UK</li>
<li>I will talk about the common Exadata performance lessons learned in my <em>&#8220;4 years of Exadata performance&#8221;</em> talk</li>
<li><a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL29yYWNsZS1uaW5qYS5jb20v" target=\"_blank\">Andy Colvin</a> and <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL21hcnRpbmNhcnN0ZW5iYWNoLndvcmRwcmVzcy5jb20v" target=\"_blank\">Martin Bach</a> of Enkitec will also speak there (yes, Martin has joined Enkitec in Europe!!! :-)</li>
</ul>
</li>
<li><strong>30 April 2013</strong> &#8211; <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL255b3VnLm9yZy91cGNvbWluZ19ldmVudHMuaHRtI05ZT1VHX1RyYWluaW5nX0RheXM=" target=\"_blank\">NYOUG Training Day</a>
<ul>
<li>Manhattan, NYC</li>
<li>This is the first ever public delivery of my new <em>Getting the Most Out of Oracle&#8217;s Active Session History, Time Model and Wait events</em> seminar!</li>
</ul>
</li>
<li><strong>2-3 May 2013</strong> &#8211; <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL3d3dy5lbmtpdGVjLmNvbS9lZHVjYXRpb24vc2Vzc2lvbnMvYWR2YW5jZWRfZXhhZGF0YV9wZXJmb3JtYW5jZV9pcnZpbmdfMDItbWF5LTIwMTM=" target=\"_blank\">Advanced Exadata Performance</a> seminar &#8211; in-classroom!
<ul>
<li>First public delivery of this class &#8211; and we&#8217;ll be going very deep into Exadata internals and performance ;-)</li>
<li>Irving, TX (in Enkitec HQ)</li>
</ul>
</li>
<li><strong>13-16 May 2013</strong> &#8211; <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL3d3dy5lbmtpdGVjLmNvbS9lZHVjYXRpb24vc2Vzc2lvbnMvYWR2YW5jZWRfZXhhZGF0YV9wZXJmb3JtYW5jZV9vbmxpbmVfMTMtbWF5LTIwMTM=" target=\"_blank\">Advanced Exadata Performance</a> seminar &#8211; online
<ul>
<li>Same as previous, but online.</li>
</ul>
</li>
<li><strong>10-11 June 2013</strong> &#8211; My new ASH seminar &#8211; online
<ul>
<li><em>Getting the Most Out of Oracle&#8217;s Active Session History, Time Model and Wait events</em></li>
<li>More details will appear in the <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vc2VtaW5hci8=" target=\"_blank\">training &amp; seminar</a> page soon</li>
</ul>
</li>
<li><strong>13-14 June 2013</strong> &#8211; Oracle Data Warehouse Global Leaders forum (by invitation-only event run by Oracle)
<ul>
<li>Amsterdam, Netherlands</li>
<li>I will speak about my &#8220;<em>4 years of Exadata performance</em>&#8221; experience and probably learn from others&#8217; experience too</li>
</ul>
</li>
<li><strong>5-6 Aug 2013</strong> &#8211; <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL3d3dy5lbmtpdGVjLmNvbS9lNA==" target=\"_blank\">Enkitec Extreme Exadata Expo</a> (E4) conference
<ul>
<li>Irving, TX</li>
<li>I will be speaking there, haven&#8217;t set the exact topic yet, but it will include demos and hacking something I suspect ;-)</li>
</ul>
</li>
<li><strong>22-26 September 2013</strong> &#8211; <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL3d3dy5vcmFjbGUuY29tL29wZW53b3JsZC9pbmRleC5odG1s" target=\"_blank\">Oracle OpenWorld</a> conference
<ul>
<li>San Francisco, CA</li>
<li>I will attend the ACE Directors briefing before the conference, likely speak, hang out at Enkitec booth, probably hack something at Enkitec&#8217;s Conference HQ for fun and definitely drink beer there. Maybe I&#8217;ll even attend the Wednesday&#8217;s party for a change!</li>
</ul>
</li>
</ul>
<p>As you see, my great plans to not travel much are not going to work out well :)</p>
<p>Actually it <em>is </em>better, this year I&#8217;ve managed to only travel twice so far (and one of the trips was for vacation!) and I haven&#8217;t had to do too many of the crazy around-the-world in 5 days trips I did when living in back Singapore&#8230; but looks like I&#8217;ll get to 2 million km nevertheless this year:</p>
<p><a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTMvMDQvdHJpcGl0X3N0YXRzLnBuZw=="><img class="alignnone size-full wp-image-2025" alt="Tanel's Tripit stats April 2013" src="http://blog.tanelpoder.com/wp-content/uploads/2013/04/tripit_stats.png" width="309" height="381" /></a></p>
<p>Well, see you in some corner of the world some day!</p>
 <img src="http://blog.tanelpoder.com/?feed-stats-post-id=2021" width="1" height="1" style="display: none;" /><div class="crp_related"><h4>Related Posts</h4><ul><li><a href="http://blog.tanelpoder.com/2010/07/30/exadata-v2-smart-scan-performance-troubleshooting-article/"     class="crp_title">Exadata v2 Smart Scan Performance Troubleshooting article</a></li><li><a href="http://blog.tanelpoder.com/2011/08/08/are-you-getting-the-most-out-of-your-exadata-performance-part-1/"     class="crp_title">Are you getting the most out of your Exadata performance?&hellip;</a></li><li><a href="http://blog.tanelpoder.com/oracle/exadata/troubleshooting/"     class="crp_title">Oracle Exadata Troubleshooting</a></li><li><a href="http://blog.tanelpoder.com/oracle/exadata/"     class="crp_title">Exadata</a></li><li><a href="http://blog.tanelpoder.com/2013/02/14/drilling-deep-into-exadata-performance-with-ash-sql-monitoring-and-exadata-snapper-slides-and-a-hacking-session/"     class="crp_title">Drilling Deep Into Exadata Performance with ASH, SQL&hellip;</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2013/04/02/public-appearances-and-exadata-performance-training/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Understanding what a hint affects using the V$SQL_FEATURE views</title>
		<link>http://blog.tanelpoder.com/2013/04/01/understanding-what-a-hint-affects-using-the-vsql_feature-views/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=understanding-what-a-hint-affects-using-the-vsql_feature-views</link>
		<comments>http://blog.tanelpoder.com/2013/04/01/understanding-what-a-hint-affects-using-the-vsql_feature-views/#comments</comments>
		<pubDate>Mon, 01 Apr 2013 17:17:07 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/?p=2017</guid>
		<description><![CDATA[You may have used the Oracle 11g V$SQL_HINT view already &#8211; it displays all the valid hints (both documented and undocumented ones) available in your Oracle version, for example: SQL> @hint merge NAME VERSION VERSION_OUTLINE INVERSE ---------------------------------------------------------------- ------------------------- ------------------------- ---------------------------------------------------------------- MERGE_CONST_ON 8.0.0 MERGE_AJ 8.1.0 8.1.7 MERGE_SJ 8.1.0 8.1.7 MV_MERGE 9.0.0 MERGE 8.1.0 10.1.0 NO_MERGE NO_MERGE [...]<div class="crp_related"><h4>Related Posts</h4><ul><li><a href="http://blog.tanelpoder.com/oracle/performance/sql/oracle-sql-plan-stability/"     class="crp_title">Oracle SQL Plan Stability</a></li><li><a href="http://blog.tanelpoder.com/2013/03/17/asqlmon-sql-sql-monitoring-like-execution-plan-line-level-drilldown-into-sql-response-time/"     class="crp_title">asqlmon.sql: SQL Monitoring-like execution plan line level&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2011/06/28/knowing-what-you-want-to-achieve-before-thinking-of-how-to-achieve-it-a-query-optimization-example-2/"     class="crp_title">Knowing what you want to achieve before thinking of how to&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2013/02/14/drilling-deep-into-exadata-performance-with-ash-sql-monitoring-and-exadata-snapper-slides-and-a-hacking-session/"     class="crp_title">Drilling Deep Into Exadata Performance with ASH, SQL&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2012/05/02/advanced-oracle-troubleshooting-guide-part-10-index-unique-scan-doing-multiblock-reads/"     class="crp_title">Advanced Oracle Troubleshooting Guide &#8211; Part 10: Index</a></li></ul></div>]]></description>
				<content:encoded><![CDATA[<p>You may have used the Oracle 11g V$SQL_HINT view already &#8211; it displays all the valid hints (both documented and undocumented ones) available in your Oracle version, for example:</p>
<pre>
SQL> @<a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vZmlsZXMvc2NyaXB0cy9oaW50LnNxbA==" target=\"_blank\">hint</a> <strong>merge</strong>

NAME                                                             VERSION                   VERSION_OUTLINE           INVERSE
---------------------------------------------------------------- ------------------------- ------------------------- ----------------------------------------------------------------
MERGE_CONST_ON                                                   8.0.0
MERGE_AJ                                                         8.1.0                     8.1.7
MERGE_SJ                                                         8.1.0                     8.1.7
MV_MERGE                                                         9.0.0
MERGE                                                            8.1.0                     10.1.0                    NO_MERGE
NO_MERGE                                                         8.0.0                     10.1.0                    MERGE
USE_MERGE_CARTESIAN                                              11.1.0.6                  11.1.0.6
USE_MERGE                                                        8.1.0                     8.1.7                     NO_USE_MERGE
NO_USE_MERGE                                                     10.1.0.3                  10.1.0.3                  USE_MERGE
</pre>
<p>But there&#8217;s more, (semi)undocumented views like <code>V$SQL_FEATURE</code> and <code>V$SQL_FEATURE_HIERARCHY</code> do give us more information about what these hints relate to. For example, if you have ever wondered why is there a <code>MERGE</code> hint and then also a <code>USE_MERGE</code> hint, you can check what do these hints control using my <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vZmlsZXMvc2NyaXB0cy9oaW50aC5zcWw=" target=\"_blank\">hinth.sql</a> (Hint Hierarchy) script:</p>
<pre>
SQL> @<a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vZmlsZXMvc2NyaXB0cy9oaW50aC5zcWw=" target=\"_blank\">hinth</a> <strong>MERGE</strong>
Display Hint feature hierarchy for hints like MERGE

NAME                                                             PATH
---------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------
MERGE                                                            ALL -> COMPILATION -> CBO -> CBQT -> CVM
MERGE                                                            ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> CVM
MERGE                                                            ALL -> COMPILATION -> TRANSFORMATION -> HEURISTIC -> CVM
</pre>
<p>So, the MERGE hints seem to affect the CBO&#8217;s query transformation code &#8211; (CBQT means Cost-Based Query Transformation and CVM means Complex View Merging, but more about that later).</p>
<pre>
SQL> @hinth USE_MERGE
Display Hint feature hierarchy for hints like USE_MERGE

NAME                                                             PATH
---------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------
USE_MERGE                                                        ALL -> COMPILATION -> CBO -> JOIN_METHOD -> USE_MERGE
</pre>
<p>And the USE_MERGE hint is about controlling the use of a join method &#8211; the sort-merge join.</p>
<p>Let&#8217;s list all hints having NL in them:</p>
<pre>
SQL> @hinth %NL%
Display Hint feature hierarchy for hints like %NL%

NAME                                                             PATH
---------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------
INLINE_XMLTYPE_NT                                                ALL
NL_SJ                                                            ALL -> COMPILATION -> CBO
NL_AJ                                                            ALL -> COMPILATION -> CBO
NO_TABLE_LOOKUP_BY_NL                                            ALL -> COMPILATION -> CBO -> CBQT -> STAR_TRANS -> TABLE_LOOKUP_BY_NL
TABLE_LOOKUP_BY_NL                                               ALL -> COMPILATION -> CBO -> CBQT -> STAR_TRANS -> TABLE_LOOKUP_BY_NL
NO_USE_NL                                                        ALL -> COMPILATION -> CBO -> JOIN_METHOD -> USE_NL
USE_NL                                                           ALL -> COMPILATION -> CBO -> JOIN_METHOD -> USE_NL
USE_NL_WITH_INDEX                                                ALL -> COMPILATION -> CBO -> JOIN_METHOD -> USE_NL_WITH_INDEX
NO_TABLE_LOOKUP_BY_NL                                            ALL -> COMPILATION -> CBO -> STAR_TRANS -> TABLE_LOOKUP_BY_NL
TABLE_LOOKUP_BY_NL                                               ALL -> COMPILATION -> CBO -> STAR_TRANS -> TABLE_LOOKUP_BY_NL
NO_CONNECT_BY_CB_WHR_ONLY                                        ALL -> COMPILATION -> TRANSFORMATION
CONNECT_BY_CB_WHR_ONLY                                           ALL -> COMPILATION -> TRANSFORMATION
INLINE                                                           ALL -> COMPILATION -> TRANSFORMATION
NO_TABLE_LOOKUP_BY_NL                                            ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> STAR_TRANS -> TABLE_LOOKUP_BY_NL
TABLE_LOOKUP_BY_NL                                               ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> STAR_TRANS -> TABLE_LOOKUP_BY_NL
NO_NLJ_BATCHING                                                  ALL -> EXECUTION
NLJ_BATCHING                                                     ALL -> EXECUTION
NO_NLJ_PREFETCH                                                  ALL -> EXECUTION
NLJ_PREFETCH                                                     ALL -> <strong>EXECUTION</strong>
</pre>
<p>Plenty of interesting stuff here &#8211; the new hint TABLE_LOOKUP_BY_NL that has showed up recently seems to have to do with star transformations for example (I just learned this myself from this output).</p>
<p>Interestingly the NLJ_BATCHING and NLJ_PREFETCH hints are considered as execution phase hints apparently (that was my term, I&#8217;m thinking about hints (also) affecting a decision in the execution phase, not just during optimization). For example, normally the NLJ prefetch feature can be dynamically turned on &#038; off during the query execution, I guess with a hint this feature would be always enabled (I&#8217;m not sure about this here, just trying to reason why a hint is shown to be related to &#8220;execution&#8221; phase).</p>
<p>If optimizer feature terms like CBQT and CVM do not immediately ring a bell, you can use the V$SQL_FEATURE view (or my <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vZmlsZXMvc2NyaXB0cy9zcWxmaC5zcWw=" target=\"_blank\">sqlfh.sql</a> script) to list some more info about what these SQL feature name abbreviations mean and where in the hierarchy does this particular feature stand.</p>
<p>The script below doesn&#8217;t accept any parameters, prints out the entire SQL feature hierarchy (except the temporary bugfix features you can see from <code>V$SYSTEM_FIX_CONTROL</code>):</p>
<pre>
SQL> @<a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vZmlsZXMvc2NyaXB0cy9zcWxmaC5zcWw=" target=\"_blank\">sqlfh</a>

SQL_FEATURE                                             DESCRIPTION
------------------------------------------------------- ----------------------------------------------------------------
ALL                                                     A Universal Feature
  COMPILATION                                           SQL COMPILATION
    CBO                                                 SQL Cost Based Optimization
      ACCESS_PATH                                       Query access path
        AND_EQUAL                                       Index and-equal access path
        BITMAP_TREE                                     Bitmap tree access path
        FULL                                            Full table scan
        INDEX                                           Index
        INDEX_ASC                                       Index (ascending)
        INDEX_COMBINE                                   Combine index for bitmap access
        INDEX_DESC                                      Use index (descending)
        INDEX_FFS                                       Index fast full scan
        INDEX_JOIN                                      Index join
        INDEX_RS_ASC                                    Index range scan
        INDEX_RS_DESC                                   Index range scan descending
        INDEX_SS                                        Index skip scan
        INDEX_SS_ASC                                    Index skip scan ascending
        INDEX_SS_DESC                                   Index skip scan descending
        SORT_ELIM                                       Sort Elimination Via Index
      CBQT                                              Cost Based Query Transformation
        CVM                                             Complex View Merging
        DIST_PLCMT                                      Distinct Placement
        JOINFAC                                         Join Factorization
        JPPD                                            Join Predicate Push Down
        PLACE_GROUP_BY                                  Group-By Placement
        PULL_PRED                                       pull predicates
        STAR_TRANS                                      Star Transformation
          TABLE_LOOKUP_BY_NL                            Table Lookup By Nested Loop
        TABLE_EXPANSION                                 Table Expansion
        UNNEST                                          unnest query block
      CURSOR_SHARING                                    Cursor sharing
      DML                                               DML
      JOIN_METHOD                                       Join methods
        USE_HASH                                        Hash join
        USE_MERGE                                       Sort-merge join
        USE_MERGE_CARTESIAN                             Merge join cartesian
        USE_NL                                          Nested-loop join
        USE_NL_WITH_INDEX                               Nested-loop index join
      JOIN_ORDER                                        Join order
      OPT_MODE                                          Optimizer mode
        ALL_ROWS                                        All rows (optimizer mode)
        CHOOSE                                          Choose (optimizer mode)
        FIRST_ROWS                                      First rows (optimizer mode)
      OR_EXPAND                                         OR expansion
      OUTLINE                                           Outlines
      PARTITION                                         Partition
      PQ                                                Parallel Query
        PARALLEL                                        Parallel table
        PQ_DISTRIBUTE                                   PQ Distribution method
        PQ_MAP                                          PQ slave mapper
        PX_JOIN_FILTER                                  Bloom filtering for joins
      STAR_TRANS                                        Star Transformation
        TABLE_LOOKUP_BY_NL                              Table Lookup By Nested Loop
      STATS                                             Optimizer statistics
        CARDINALITY                                     Cardinality computation
        COLUMN_STATS                                    Basic column statistics
        CPU_COSTING                                     CPU costing
        DBMS_STATS                                      Statistics gathered by DBMS_STATS
        DYNAMIC_SAMPLING                                Dynamic sampling
        DYNAMIC_SAMPLING_EST_CDN                        Estimate CDN using dynamic sampling
        GATHER_PLAN_STATISTICS                          Gather plan statistics
        INDEX_STATS                                     Basic index statistics
        OPT_ESTIMATE                                    Optimizer estimates
        TABLE_STATS                                     Basic table statistics
    QUERY_REWRITE                                       query rewrite with materialized views
    RBO                                                 SQL Rule Based Optimization
    SQL_CODE_GENERATOR                                  SQL Code Generator
    SQL_PLAN_MANAGEMENT                                 SQL Plan Management
    TRANSFORMATION                                      Query Transformation
<strong>      CBQT                                              Cost Based Query Transformation
        CVM                                             Complex View Merging
</strong>        DIST_PLCMT                                      Distinct Placement
        JOINFAC                                         Join Factorization
        JPPD                                            Join Predicate Push Down
        PLACE_GROUP_BY                                  Group-By Placement
        PULL_PRED                                       pull predicates
        STAR_TRANS                                      Star Transformation
          TABLE_LOOKUP_BY_NL                            Table Lookup By Nested Loop
        TABLE_EXPANSION                                 Table Expansion
        UNNEST                                          unnest query block
      HEURISTIC                                         Heuristic Query Transformation
        CNT                                             Count(col) to count(*)
        COALESCE_SQ                                     coalesce subqueries
        CSE                                             Common Sub-Expression Elimination
        CVM                                             Complex View Merging
        FILTER_PUSH_PRED                                Push filter predicates
        FULL_OUTER_JOIN_TO_OUTER                        Join Conversion
        JPPD                                            Join Predicate Push Down
        OBYE                                            Order-by Elimination
        OLD_PUSH_PRED                                   Old push predicate algorithm (pre-10.1.0.3)
        OUTER_JOIN_TO_ANTI                              Join Conversion
        OUTER_JOIN_TO_INNER                             Join Conversion
        PRED_MOVE_AROUND                                Predicate move around
        SET_TO_JOIN                                     Transform set operations to joins
        SVM                                             Simple View Merging
        TABLE_ELIM                                      Table Elimination
        UNNEST                                          unnest query block
        USE_CONCAT                                      Or-optimization
    XML_REWRITE                                         XML Rewrite
      CHECK_ACL_REWRITE                                 Check ACL Rewrite
      COST_XML_QUERY_REWRITE                            Cost Based XML Query Rewrite
      XMLINDEX_REWRITE                                  XMLIndex Rewrite
  EXECUTION                                             SQL EXECUTION
</pre>
<p>I highlighted the CVM and CBQT lines above&#8230;</p>
<p>Just for reference (and if you&#8217;re too lazy to run these scripts yourself), I&#8217;ve pasted the full output of the hint feature hierarchy script too (executed in my 11.2.0.3 DB):<br />
<span id="more-2017"></span></p>
<pre>
SQL> @hinth %
Display Hint feature hierarchy for hints like %

NAME                                                             PATH
---------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------
NO_XDB_FASTPATH_INSERT                                           ALL
XDB_FASTPATH_INSERT                                              ALL
NO_USE_HASH_GBY_FOR_PUSHDOWN                                     ALL
USE_HASH_GBY_FOR_PUSHDOWN                                        ALL
XMLINDEX_SEL_IDX_TBL                                             ALL
NO_DST_UPGRADE_INSERT_CONV                                       ALL
DST_UPGRADE_INSERT_CONV                                          ALL
NO_CONNECT_BY_ELIM_DUPS                                          ALL
CONNECT_BY_ELIM_DUPS                                             ALL
NO_MONITOR                                                       ALL
MONITOR                                                          ALL
NO_NATIVE_FULL_OUTER_JOIN                                        ALL
NATIVE_FULL_OUTER_JOIN                                           ALL
NO_CONNECT_BY_COMBINE_SW                                         ALL
CONNECT_BY_COMBINE_SW                                            ALL
OPT_PARAM                                                        ALL
OUTLINE_LEAF                                                     ALL
OUTLINE                                                          ALL
NO_CARTESIAN                                                     ALL
INCLUDE_VERSION                                                  ALL
RESTRICT_ALL_REF_CONS                                            ALL
NO_ACCESS                                                        ALL
HASH                                                             ALL
DRIVING_SITE                                                     ALL
CACHE_TEMP_TABLE                                                 ALL
QB_NAME                                                          ALL
NO_STATS_GSETS                                                   ALL
NO_USE_HASH_AGGREGATION                                          ALL
USE_HASH_AGGREGATION                                             ALL
NO_MODEL_PUSH_REF                                                ALL
MODEL_NO_ANALYSIS                                                ALL
SCN_ASCENDING                                                    ALL
TIV_GB                                                           ALL
PIV_GB                                                           ALL
TIV_SSF                                                          ALL
PIV_SSF                                                          ALL
NO_CONNECT_BY_FILTERING                                          ALL
CONNECT_BY_FILTERING                                             ALL
BYPASS_RECURSIVE_CHECK                                           ALL
SYS_RID_ORDER                                                    ALL
NO_BASETABLE_MULTIMV_REWRITE                                     ALL
NO_MULTIMV_REWRITE                                               ALL
REMOTE_MAPPED                                                    ALL
NO_GBY_PUSHDOWN                                                  ALL
GBY_PUSHDOWN                                                     ALL
IGNORE_OPTIM_EMBEDDED_HINTS                                      ALL
DB_VERSION                                                       ALL
OPTIMIZER_FEATURES_ENABLE                                        ALL
USE_WEAK_NAME_RESL                                               ALL
IGNORE_WHERE_CLAUSE                                              ALL
INLINE_XMLTYPE_NT                                                ALL
NESTED_TABLE_FAST_INSERT                                         ALL
NESTED_TABLE_SET_SETID                                           ALL
PRESERVE_OID                                                     ALL
NESTED_TABLE_GET_REFS                                            ALL
DEREF_NO_REWRITE                                                 ALL
NO_SQL_TUNE                                                      ALL
NO_MONITORING                                                    ALL
NO_OUTER_JOIN_TO_ANTI                                            ALL -> COMPILATION -> CBO
OUTER_JOIN_TO_ANTI                                               ALL -> COMPILATION -> CBO
NO_FULL_OUTER_JOIN_TO_OUTER                                      ALL -> COMPILATION -> CBO
FULL_OUTER_JOIN_TO_OUTER                                         ALL -> COMPILATION -> CBO
APPEND_VALUES                                                    ALL -> COMPILATION -> CBO
NUM_INDEX_KEYS                                                   ALL -> COMPILATION -> CBO
NO_DOMAIN_INDEX_FILTER                                           ALL -> COMPILATION -> CBO
DOMAIN_INDEX_FILTER                                              ALL -> COMPILATION -> CBO
NO_PARTIAL_COMMIT                                                ALL -> COMPILATION -> CBO
SKIP_UNQ_UNUSABLE_IDX                                            ALL -> COMPILATION -> CBO
X_DYN_PRUNE                                                      ALL -> COMPILATION -> CBO
ROWID                                                            ALL -> COMPILATION -> CBO
CLUSTER                                                          ALL -> COMPILATION -> CBO
NO_SWAP_JOIN_INPUTS                                              ALL -> COMPILATION -> CBO
SWAP_JOIN_INPUTS                                                 ALL -> COMPILATION -> CBO
INDEX_RRS                                                        ALL -> COMPILATION -> CBO
NO_SUBQUERY_PRUNING                                              ALL -> COMPILATION -> CBO
SUBQUERY_PRUNING                                                 ALL -> COMPILATION -> CBO
USE_SEMI                                                         ALL -> COMPILATION -> CBO
USE_ANTI                                                         ALL -> COMPILATION -> CBO
QUEUE_ROWP                                                       ALL -> COMPILATION -> CBO
QUEUE_CURR                                                       ALL -> COMPILATION -> CBO
CACHE_CB                                                         ALL -> COMPILATION -> CBO
NO_PARALLEL                                                      ALL -> COMPILATION -> CBO
CURSOR_SHARING_EXACT                                             ALL -> COMPILATION -> CBO
NO_BUFFER                                                        ALL -> COMPILATION -> CBO
BUFFER                                                           ALL -> COMPILATION -> CBO
NO_QKN_BUFF                                                      ALL -> COMPILATION -> CBO
BITMAP                                                           ALL -> COMPILATION -> CBO
RESTORE_AS_INTERVALS                                             ALL -> COMPILATION -> CBO
SAVE_AS_INTERVALS                                                ALL -> COMPILATION -> CBO
CUBE_GB                                                          ALL -> COMPILATION -> CBO
SYS_PARALLEL_TXN                                                 ALL -> COMPILATION -> CBO
OVERFLOW_NOMOVE                                                  ALL -> COMPILATION -> CBO
HWM_BROKERED                                                     ALL -> COMPILATION -> CBO
LOCAL_INDEXES                                                    ALL -> COMPILATION -> CBO
BYPASS_UJVC                                                      ALL -> COMPILATION -> CBO
NL_SJ                                                            ALL -> COMPILATION -> CBO
HASH_SJ                                                          ALL -> COMPILATION -> CBO
MERGE_SJ                                                         ALL -> COMPILATION -> CBO
NL_AJ                                                            ALL -> COMPILATION -> CBO
HASH_AJ                                                          ALL -> COMPILATION -> CBO
MERGE_AJ                                                         ALL -> COMPILATION -> CBO
SEMIJOIN_DRIVER                                                  ALL -> COMPILATION -> CBO
SKIP_EXT_OPTIMIZER                                               ALL -> COMPILATION -> CBO
DOMAIN_INDEX_NO_SORT                                             ALL -> COMPILATION -> CBO
DOMAIN_INDEX_SORT                                                ALL -> COMPILATION -> CBO
ORDERED_PREDICATES                                               ALL -> COMPILATION -> CBO
ORDERED                                                          ALL -> COMPILATION -> CBO
FBTSCAN                                                          ALL -> COMPILATION -> CBO
MERGE_CONST_ON                                                   ALL -> COMPILATION -> CBO
STREAMS                                                          ALL -> COMPILATION -> CBO
EXPR_CORR_CHECK                                                  ALL -> COMPILATION -> CBO
VECTOR_READ_TRACE                                                ALL -> COMPILATION -> CBO
VECTOR_READ                                                      ALL -> COMPILATION -> CBO
DML_UPDATE                                                       ALL -> COMPILATION -> CBO
SQLLDR                                                           ALL -> COMPILATION -> CBO
SYS_DL_CURSOR                                                    ALL -> COMPILATION -> CBO
NO_REF_CASCADE                                                   ALL -> COMPILATION -> CBO
REF_CASCADE_CURSOR                                               ALL -> COMPILATION -> CBO
NOAPPEND                                                         ALL -> COMPILATION -> CBO
APPEND                                                           ALL -> COMPILATION -> CBO
AND_EQUAL                                                        ALL -> COMPILATION -> CBO -> ACCESS_PATH -> AND_EQUAL
BITMAP_TREE                                                      ALL -> COMPILATION -> CBO -> ACCESS_PATH -> BITMAP_TREE
FULL                                                             ALL -> COMPILATION -> CBO -> ACCESS_PATH -> FULL
NO_USE_INVISIBLE_INDEXES                                         ALL -> COMPILATION -> CBO -> ACCESS_PATH -> INDEX
USE_INVISIBLE_INDEXES                                            ALL -> COMPILATION -> CBO -> ACCESS_PATH -> INDEX
NO_INDEX                                                         ALL -> COMPILATION -> CBO -> ACCESS_PATH -> INDEX
INDEX                                                            ALL -> COMPILATION -> CBO -> ACCESS_PATH -> INDEX
INDEX_ASC                                                        ALL -> COMPILATION -> CBO -> ACCESS_PATH -> INDEX_ASC
INDEX_COMBINE                                                    ALL -> COMPILATION -> CBO -> ACCESS_PATH -> INDEX_COMBINE
INDEX_DESC                                                       ALL -> COMPILATION -> CBO -> ACCESS_PATH -> INDEX_DESC
NO_INDEX_FFS                                                     ALL -> COMPILATION -> CBO -> ACCESS_PATH -> INDEX_FFS
INDEX_FFS                                                        ALL -> COMPILATION -> CBO -> ACCESS_PATH -> INDEX_FFS
INDEX_JOIN                                                       ALL -> COMPILATION -> CBO -> ACCESS_PATH -> INDEX_JOIN
INDEX_RS_ASC                                                     ALL -> COMPILATION -> CBO -> ACCESS_PATH -> INDEX_RS_ASC
INDEX_RS_DESC                                                    ALL -> COMPILATION -> CBO -> ACCESS_PATH -> INDEX_RS_DESC
NO_INDEX_SS                                                      ALL -> COMPILATION -> CBO -> ACCESS_PATH -> INDEX_SS
INDEX_SS                                                         ALL -> COMPILATION -> CBO -> ACCESS_PATH -> INDEX_SS
INDEX_SS_ASC                                                     ALL -> COMPILATION -> CBO -> ACCESS_PATH -> INDEX_SS_ASC
INDEX_SS_DESC                                                    ALL -> COMPILATION -> CBO -> ACCESS_PATH -> INDEX_SS_DESC
NO_MERGE                                                         ALL -> COMPILATION -> CBO -> CBQT -> CVM
MERGE                                                            ALL -> COMPILATION -> CBO -> CBQT -> CVM
NO_PLACE_DISTINCT                                                ALL -> COMPILATION -> CBO -> CBQT -> DIST_PLCMT
PLACE_DISTINCT                                                   ALL -> COMPILATION -> CBO -> CBQT -> DIST_PLCMT
NO_FACTORIZE_JOIN                                                ALL -> COMPILATION -> CBO -> CBQT -> JOINFAC
FACTORIZE_JOIN                                                   ALL -> COMPILATION -> CBO -> CBQT -> JOINFAC
NO_PLACE_GROUP_BY                                                ALL -> COMPILATION -> CBO -> CBQT -> PLACE_GROUP_BY
PLACE_GROUP_BY                                                   ALL -> COMPILATION -> CBO -> CBQT -> PLACE_GROUP_BY
NO_PULL_PRED                                                     ALL -> COMPILATION -> CBO -> CBQT -> PULL_PRED
PULL_PRED                                                        ALL -> COMPILATION -> CBO -> CBQT -> PULL_PRED
NO_FACT                                                          ALL -> COMPILATION -> CBO -> CBQT -> STAR_TRANS
FACT                                                             ALL -> COMPILATION -> CBO -> CBQT -> STAR_TRANS
NO_STAR_TRANSFORMATION                                           ALL -> COMPILATION -> CBO -> CBQT -> STAR_TRANS
STAR_TRANSFORMATION                                              ALL -> COMPILATION -> CBO -> CBQT -> STAR_TRANS
STAR                                                             ALL -> COMPILATION -> CBO -> CBQT -> STAR_TRANS
NO_TABLE_LOOKUP_BY_NL                                            ALL -> COMPILATION -> CBO -> CBQT -> STAR_TRANS -> TABLE_LOOKUP_BY_NL
TABLE_LOOKUP_BY_NL                                               ALL -> COMPILATION -> CBO -> CBQT -> STAR_TRANS -> TABLE_LOOKUP_BY_NL
NO_EXPAND_TABLE                                                  ALL -> COMPILATION -> CBO -> CBQT -> TABLE_EXPANSION
EXPAND_TABLE                                                     ALL -> COMPILATION -> CBO -> CBQT -> TABLE_EXPANSION
NO_UNNEST                                                        ALL -> COMPILATION -> CBO -> CBQT -> UNNEST
UNNEST                                                           ALL -> COMPILATION -> CBO -> CBQT -> UNNEST
NO_BIND_AWARE                                                    ALL -> COMPILATION -> CBO -> CURSOR_SHARING
BIND_AWARE                                                       ALL -> COMPILATION -> CBO -> CURSOR_SHARING
RETRY_ON_ROW_CHANGE                                              ALL -> COMPILATION -> CBO -> DML
CHANGE_DUPKEY_ERROR_INDEX                                        ALL -> COMPILATION -> CBO -> DML
IGNORE_ROW_ON_DUPKEY_INDEX                                       ALL -> COMPILATION -> CBO -> DML
NO_USE_HASH                                                      ALL -> COMPILATION -> CBO -> JOIN_METHOD -> USE_HASH
USE_HASH                                                         ALL -> COMPILATION -> CBO -> JOIN_METHOD -> USE_HASH
NO_USE_MERGE                                                     ALL -> COMPILATION -> CBO -> JOIN_METHOD -> USE_MERGE
USE_MERGE                                                        ALL -> COMPILATION -> CBO -> JOIN_METHOD -> USE_MERGE
USE_MERGE_CARTESIAN                                              ALL -> COMPILATION -> CBO -> JOIN_METHOD -> USE_MERGE_CARTESIAN
NO_USE_NL                                                        ALL -> COMPILATION -> CBO -> JOIN_METHOD -> USE_NL
USE_NL                                                           ALL -> COMPILATION -> CBO -> JOIN_METHOD -> USE_NL
USE_NL_WITH_INDEX                                                ALL -> COMPILATION -> CBO -> JOIN_METHOD -> USE_NL_WITH_INDEX
LEADING                                                          ALL -> COMPILATION -> CBO -> JOIN_ORDER
ALL_ROWS                                                         ALL -> COMPILATION -> CBO -> OPT_MODE -> ALL_ROWS
CHOOSE                                                           ALL -> COMPILATION -> CBO -> OPT_MODE -> CHOOSE
FIRST_ROWS                                                       ALL -> COMPILATION -> CBO -> OPT_MODE -> FIRST_ROWS
OR_EXPAND                                                        ALL -> COMPILATION -> CBO -> OR_EXPAND
NO_PARALLEL_INDEX                                                ALL -> COMPILATION -> CBO -> PQ
PARALLEL_INDEX                                                   ALL -> COMPILATION -> CBO -> PQ
NO_STATEMENT_QUEUING                                             ALL -> COMPILATION -> CBO -> PQ -> PARALLEL
STATEMENT_QUEUING                                                ALL -> COMPILATION -> CBO -> PQ -> PARALLEL
SHARED                                                           ALL -> COMPILATION -> CBO -> PQ -> PARALLEL
NOPARALLEL                                                       ALL -> COMPILATION -> CBO -> PQ -> PARALLEL
PQ_DISTRIBUTE                                                    ALL -> COMPILATION -> CBO -> PQ -> PQ_DISTRIBUTE
PQ_NOMAP                                                         ALL -> COMPILATION -> CBO -> PQ -> PQ_MAP
PQ_MAP                                                           ALL -> COMPILATION -> CBO -> PQ -> PQ_MAP
NO_PX_JOIN_FILTER                                                ALL -> COMPILATION -> CBO -> PQ -> PX_JOIN_FILTER
PX_JOIN_FILTER                                                   ALL -> COMPILATION -> CBO -> PQ -> PX_JOIN_FILTER
NO_FACT                                                          ALL -> COMPILATION -> CBO -> STAR_TRANS
STAR                                                             ALL -> COMPILATION -> CBO -> STAR_TRANS
FACT                                                             ALL -> COMPILATION -> CBO -> STAR_TRANS
NO_STAR_TRANSFORMATION                                           ALL -> COMPILATION -> CBO -> STAR_TRANS
STAR_TRANSFORMATION                                              ALL -> COMPILATION -> CBO -> STAR_TRANS
NO_TABLE_LOOKUP_BY_NL                                            ALL -> COMPILATION -> CBO -> STAR_TRANS -> TABLE_LOOKUP_BY_NL
TABLE_LOOKUP_BY_NL                                               ALL -> COMPILATION -> CBO -> STAR_TRANS -> TABLE_LOOKUP_BY_NL
CARDINALITY                                                      ALL -> COMPILATION -> CBO -> STATS
TABLE_STATS                                                      ALL -> COMPILATION -> CBO -> STATS
INDEX_STATS                                                      ALL -> COMPILATION -> CBO -> STATS
COLUMN_STATS                                                     ALL -> COMPILATION -> CBO -> STATS
NO_CPU_COSTING                                                   ALL -> COMPILATION -> CBO -> STATS -> CPU_COSTING
CPU_COSTING                                                      ALL -> COMPILATION -> CBO -> STATS -> CPU_COSTING
DBMS_STATS                                                       ALL -> COMPILATION -> CBO -> STATS -> DBMS_STATS
DYNAMIC_SAMPLING                                                 ALL -> COMPILATION -> CBO -> STATS -> DYNAMIC_SAMPLING
DYNAMIC_SAMPLING_EST_CDN                                         ALL -> COMPILATION -> CBO -> STATS -> DYNAMIC_SAMPLING_EST_CDN
GATHER_PLAN_STATISTICS                                           ALL -> COMPILATION -> CBO -> STATS -> GATHER_PLAN_STATISTICS
OPT_ESTIMATE                                                     ALL -> COMPILATION -> CBO -> STATS -> OPT_ESTIMATE
RBO_OUTLINE                                                      ALL -> COMPILATION -> RBO
RULE                                                             ALL -> COMPILATION -> RBO
NO_PRUNE_GSETS                                                   ALL -> COMPILATION -> TRANSFORMATION
MODEL_DONTVERIFY_UNIQUENESS                                      ALL -> COMPILATION -> TRANSFORMATION
MODEL_PUSH_REF                                                   ALL -> COMPILATION -> TRANSFORMATION
MODEL_COMPILE_SUBQUERY                                           ALL -> COMPILATION -> TRANSFORMATION
MODEL_DYNAMIC_SUBQUERY                                           ALL -> COMPILATION -> TRANSFORMATION
MODEL_MIN_ANALYSIS                                               ALL -> COMPILATION -> TRANSFORMATION
NO_EXPAND_GSET_TO_UNION                                          ALL -> COMPILATION -> TRANSFORMATION
EXPAND_GSET_TO_UNION                                             ALL -> COMPILATION -> TRANSFORMATION
MV_MERGE                                                         ALL -> COMPILATION -> TRANSFORMATION
NO_CONNECT_BY_COST_BASED                                         ALL -> COMPILATION -> TRANSFORMATION
CONNECT_BY_COST_BASED                                            ALL -> COMPILATION -> TRANSFORMATION
INLINE                                                           ALL -> COMPILATION -> TRANSFORMATION
MATERIALIZE                                                      ALL -> COMPILATION -> TRANSFORMATION
REWRITE_OR_ERROR                                                 ALL -> COMPILATION -> TRANSFORMATION
NO_REWRITE                                                       ALL -> COMPILATION -> TRANSFORMATION
REWRITE                                                          ALL -> COMPILATION -> TRANSFORMATION
NO_SEMIJOIN                                                      ALL -> COMPILATION -> TRANSFORMATION
SEMIJOIN                                                         ALL -> COMPILATION -> TRANSFORMATION
ANTIJOIN                                                         ALL -> COMPILATION -> TRANSFORMATION
NO_PUSH_SUBQ                                                     ALL -> COMPILATION -> TRANSFORMATION
PUSH_SUBQ                                                        ALL -> COMPILATION -> TRANSFORMATION
NO_QUERY_TRANSFORMATION                                          ALL -> COMPILATION -> TRANSFORMATION
OPAQUE_XCANONICAL                                                ALL -> COMPILATION -> TRANSFORMATION
OPAQUE_TRANSFORM                                                 ALL -> COMPILATION -> TRANSFORMATION
NO_CONNECT_BY_CB_WHR_ONLY                                        ALL -> COMPILATION -> TRANSFORMATION
CONNECT_BY_CB_WHR_ONLY                                           ALL -> COMPILATION -> TRANSFORMATION
NO_TRANSFORM_DISTINCT_AGG                                        ALL -> COMPILATION -> TRANSFORMATION
TRANSFORM_DISTINCT_AGG                                           ALL -> COMPILATION -> TRANSFORMATION
PRECOMPUTE_SUBQUERY                                              ALL -> COMPILATION -> TRANSFORMATION
LIKE_EXPAND                                                      ALL -> COMPILATION -> TRANSFORMATION
NO_ORDER_ROLLUPS                                                 ALL -> COMPILATION -> TRANSFORMATION
GBY_CONC_ROLLUP                                                  ALL -> COMPILATION -> TRANSFORMATION
USE_TTT_FOR_GSETS                                                ALL -> COMPILATION -> TRANSFORMATION
MERGE                                                            ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> CVM
NO_MERGE                                                         ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> CVM
NO_PLACE_DISTINCT                                                ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> DIST_PLCMT
PLACE_DISTINCT                                                   ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> DIST_PLCMT
FACTORIZE_JOIN                                                   ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> JOINFAC
NO_FACTORIZE_JOIN                                                ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> JOINFAC
PLACE_GROUP_BY                                                   ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> PLACE_GROUP_BY
NO_PLACE_GROUP_BY                                                ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> PLACE_GROUP_BY
PULL_PRED                                                        ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> PULL_PRED
NO_PULL_PRED                                                     ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> PULL_PRED
NO_FACT                                                          ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> STAR_TRANS
NO_STAR_TRANSFORMATION                                           ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> STAR_TRANS
STAR_TRANSFORMATION                                              ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> STAR_TRANS
STAR                                                             ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> STAR_TRANS
FACT                                                             ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> STAR_TRANS
TABLE_LOOKUP_BY_NL                                               ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> STAR_TRANS -> TABLE_LOOKUP_BY_NL
NO_TABLE_LOOKUP_BY_NL                                            ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> STAR_TRANS -> TABLE_LOOKUP_BY_NL
NO_EXPAND_TABLE                                                  ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> TABLE_EXPANSION
EXPAND_TABLE                                                     ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> TABLE_EXPANSION
NO_UNNEST                                                        ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> UNNEST
UNNEST                                                           ALL -> COMPILATION -> TRANSFORMATION -> CBQT -> UNNEST
NO_COALESCE_SQ                                                   ALL -> COMPILATION -> TRANSFORMATION -> HEURISTIC -> COALESCE_SQ
COALESCE_SQ                                                      ALL -> COMPILATION -> TRANSFORMATION -> HEURISTIC -> COALESCE_SQ
MERGE                                                            ALL -> COMPILATION -> TRANSFORMATION -> HEURISTIC -> CVM
NO_MERGE                                                         ALL -> COMPILATION -> TRANSFORMATION -> HEURISTIC -> CVM
NO_PUSH_PRED                                                     ALL -> COMPILATION -> TRANSFORMATION -> HEURISTIC -> FILTER_PUSH_PRED
PUSH_PRED                                                        ALL -> COMPILATION -> TRANSFORMATION -> HEURISTIC -> FILTER_PUSH_PRED
ELIMINATE_OBY                                                    ALL -> COMPILATION -> TRANSFORMATION -> HEURISTIC -> OBYE
NO_ELIMINATE_OBY                                                 ALL -> COMPILATION -> TRANSFORMATION -> HEURISTIC -> OBYE
OLD_PUSH_PRED                                                    ALL -> COMPILATION -> TRANSFORMATION -> HEURISTIC -> OLD_PUSH_PRED
NO_OUTER_JOIN_TO_INNER                                           ALL -> COMPILATION -> TRANSFORMATION -> HEURISTIC -> OUTER_JOIN_TO_INNER
OUTER_JOIN_TO_INNER                                              ALL -> COMPILATION -> TRANSFORMATION -> HEURISTIC -> OUTER_JOIN_TO_INNER
SET_TO_JOIN                                                      ALL -> COMPILATION -> TRANSFORMATION -> HEURISTIC -> SET_TO_JOIN
NO_SET_TO_JOIN                                                   ALL -> COMPILATION -> TRANSFORMATION -> HEURISTIC -> SET_TO_JOIN
ELIMINATE_JOIN                                                   ALL -> COMPILATION -> TRANSFORMATION -> HEURISTIC -> TABLE_ELIM
NO_ELIMINATE_JOIN                                                ALL -> COMPILATION -> TRANSFORMATION -> HEURISTIC -> TABLE_ELIM
NO_UNNEST                                                        ALL -> COMPILATION -> TRANSFORMATION -> HEURISTIC -> UNNEST
UNNEST                                                           ALL -> COMPILATION -> TRANSFORMATION -> HEURISTIC -> UNNEST
NO_EXPAND                                                        ALL -> COMPILATION -> TRANSFORMATION -> HEURISTIC -> USE_CONCAT
USE_CONCAT                                                       ALL -> COMPILATION -> TRANSFORMATION -> HEURISTIC -> USE_CONCAT
XML_DML_RWT_STMT                                                 ALL -> COMPILATION -> XML_REWRITE
NO_XML_DML_REWRITE                                               ALL -> COMPILATION -> XML_REWRITE
NO_XML_QUERY_REWRITE                                             ALL -> COMPILATION -> XML_REWRITE
FORCE_XML_QUERY_REWRITE                                          ALL -> COMPILATION -> XML_REWRITE
CHECK_ACL_REWRITE                                                ALL -> COMPILATION -> XML_REWRITE -> CHECK_ACL_REWRITE
NO_CHECK_ACL_REWRITE                                             ALL -> COMPILATION -> XML_REWRITE -> CHECK_ACL_REWRITE
NO_COST_XML_QUERY_REWRITE                                        ALL -> COMPILATION -> XML_REWRITE -> COST_XML_QUERY_REWRITE
COST_XML_QUERY_REWRITE                                           ALL -> COMPILATION -> XML_REWRITE -> COST_XML_QUERY_REWRITE
NO_XMLINDEX_REWRITE_IN_SELECT                                    ALL -> COMPILATION -> XML_REWRITE -> XMLINDEX_REWRITE
XMLINDEX_REWRITE_IN_SELECT                                       ALL -> COMPILATION -> XML_REWRITE -> XMLINDEX_REWRITE
NO_XMLINDEX_REWRITE                                              ALL -> COMPILATION -> XML_REWRITE -> XMLINDEX_REWRITE
XMLINDEX_REWRITE                                                 ALL -> COMPILATION -> XML_REWRITE -> XMLINDEX_REWRITE
NO_SUBSTRB_PAD                                                   ALL -> EXECUTION
NO_NLJ_BATCHING                                                  ALL -> EXECUTION
NLJ_BATCHING                                                     ALL -> EXECUTION
NO_NLJ_PREFETCH                                                  ALL -> EXECUTION
NLJ_PREFETCH                                                     ALL -> EXECUTION
CACHE                                                            ALL -> EXECUTION
NO_RESULT_CACHE                                                  ALL -> EXECUTION
RESULT_CACHE                                                     ALL -> EXECUTION
TRACING                                                          ALL -> EXECUTION
NOCACHE                                                          ALL -> EXECUTION
NO_LOAD                                                          ALL -> EXECUTION

305 rows selected.
</pre>
<p>Lots of hints to remember and to try out some day&#8230; nah, I&#8217;ll just run on modern Oracle versions and gather the stats properly ;-)</p>
 <img src="http://blog.tanelpoder.com/?feed-stats-post-id=2017" width="1" height="1" style="display: none;" /><div class="crp_related"><h4>Related Posts</h4><ul><li><a href="http://blog.tanelpoder.com/oracle/performance/sql/oracle-sql-plan-stability/"     class="crp_title">Oracle SQL Plan Stability</a></li><li><a href="http://blog.tanelpoder.com/2013/03/17/asqlmon-sql-sql-monitoring-like-execution-plan-line-level-drilldown-into-sql-response-time/"     class="crp_title">asqlmon.sql: SQL Monitoring-like execution plan line level&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2011/06/28/knowing-what-you-want-to-achieve-before-thinking-of-how-to-achieve-it-a-query-optimization-example-2/"     class="crp_title">Knowing what you want to achieve before thinking of how to&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2013/02/14/drilling-deep-into-exadata-performance-with-ash-sql-monitoring-and-exadata-snapper-slides-and-a-hacking-session/"     class="crp_title">Drilling Deep Into Exadata Performance with ASH, SQL&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2012/05/02/advanced-oracle-troubleshooting-guide-part-10-index-unique-scan-doing-multiblock-reads/"     class="crp_title">Advanced Oracle Troubleshooting Guide &#8211; Part 10: Index</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2013/04/01/understanding-what-a-hint-affects-using-the-vsql_feature-views/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Listing Exadata storage cells and their configuration info from V$CELL_CONFIG</title>
		<link>http://blog.tanelpoder.com/2013/03/21/listing-exadata-storage-cells-and-their-configuration-info-from-vcell_config/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=listing-exadata-storage-cells-and-their-configuration-info-from-vcell_config</link>
		<comments>http://blog.tanelpoder.com/2013/03/21/listing-exadata-storage-cells-and-their-configuration-info-from-vcell_config/#comments</comments>
		<pubDate>Thu, 21 Mar 2013 22:18:47 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Exadata]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/?p=2013</guid>
		<description><![CDATA[If you attended my Exadata hacking session today, you saw me using the cellver.sql script which lists some basic configuration info about the currently connected storage cells: SQL&#62; @exadata/cellver Show Exadata cell versions from V$CELL_CONFIG.... CELLNAME CELLSRV_VERSION FLASH_CACHE_MODE CPU_COUNT UPTIME KERNEL_VERSION MAKE_MODEL -------------------- -------------------- -------------------- ---------- -------------------- ------------------------------ -------------------------------------------------- 192.168.12.10 11.2.3.2.1 WriteBack 24 8 days, [...]<div class="crp_related"><h4>Related Posts</h4><ul><li><a href="http://blog.tanelpoder.com/2013/02/14/drilling-deep-into-exadata-performance-with-ash-sql-monitoring-and-exadata-snapper-slides-and-a-hacking-session/"     class="crp_title">Drilling Deep Into Exadata Performance with ASH, SQL&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2012/04/13/exadata-smart-scan-predicate-offloading-and-sequence-nextval/"     class="crp_title">Exadata Smart Scan predicate offloading and sequence.NEXTVAL</a></li><li><a href="http://blog.tanelpoder.com/2010/07/30/exadata-v2-smart-scan-performance-troubleshooting-article/"     class="crp_title">Exadata v2 Smart Scan Performance Troubleshooting article</a></li><li><a href="http://blog.tanelpoder.com/2011/08/08/are-you-getting-the-most-out-of-your-exadata-performance-part-1/"     class="crp_title">Are you getting the most out of your Exadata performance?&hellip;</a></li><li><a href="http://blog.tanelpoder.com/oracle/exadata/"     class="crp_title">Exadata</a></li></ul></div>]]></description>
				<content:encoded><![CDATA[<p>If you attended my Exadata hacking session today, you saw me using the <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vZmlsZXMvc2NyaXB0cy9leGFkYXRhL2NlbGx2ZXIuc3Fs" target=\"_blank\">cellver.sql</a> script which lists some basic configuration info about the currently connected storage cells:</p>
<pre>SQL&gt; @<a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vZmlsZXMvc2NyaXB0cy9leGFkYXRhLw==" target=\"_blank\">exadata</a>/<a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vZmlsZXMvc2NyaXB0cy9leGFkYXRhL2NlbGx2ZXIuc3Fs" target=\"_blank\">cellver</a>
Show Exadata cell versions from V$CELL_CONFIG....

CELLNAME             CELLSRV_VERSION      FLASH_CACHE_MODE     CPU_COUNT  UPTIME               KERNEL_VERSION                 MAKE_MODEL
-------------------- -------------------- -------------------- ---------- -------------------- ------------------------------ --------------------------------------------------
192.168.12.10        11.2.3.2.1           WriteBack            24         8 days, 2:07         2.6.32-400.11.1.el5uek         Oracle Corporation SUN FIRE X4270 M2 SERVER SAS
192.168.12.11        11.2.3.2.1           WriteBack            24         8 days, 2:06         2.6.32-400.11.1.el5uek         Oracle Corporation SUN FIRE X4270 M2 SERVER SAS
192.168.12.8         11.2.3.2.1           WriteBack            24         8 days, 2:06         2.6.32-400.11.1.el5uek         Oracle Corporation SUN FIRE X4270 M2 SERVER SAS
192.168.12.9         11.2.3.2.1           WriteBack            24         8 days, 2:06         2.6.32-400.11.1.el5uek         Oracle Corporation SUN FIRE X4270 M2 SERVER SAS</pre>
<p>The output is pretty self-explanatory. One thing to note is that the CPU_COUNT is not the number of CPU cores, but just the number of &#8220;virtual&#8221; CPU threads presented to the OS, in this case 24 threads over 12 cores.</p>
<p>The script itself is simple, just extracting some XML values from the &#8220;CELL&#8221; type config records:</p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt; l
  1  SELECT
  2      cellname cv_cellname
  3    , CAST(extract(xmltype(confval), '/cli-output/cell/releaseVersion/text()') AS VARCHAR2(20))  cv_cellVersion
  4    , CAST(extract(xmltype(confval), '/cli-output/cell/flashCacheMode/text()') AS VARCHAR2(20))  cv_flashcachemode
  5    , CAST(extract(xmltype(confval), '/cli-output/cell/cpuCount/text()')       AS VARCHAR2(10))  cpu_count
  6    , CAST(extract(xmltype(confval), '/cli-output/cell/upTime/text()')         AS VARCHAR2(20))  uptime
  7    , CAST(extract(xmltype(confval), '/cli-output/cell/kernelVersion/text()')  AS VARCHAR2(30))  kernel_version
  8    , CAST(extract(xmltype(confval), '/cli-output/cell/makeModel/text()')      AS VARCHAR2(50))  make_model
  9  FROM
 10      v$cell_config  -- gv$ isn't needed, all cells should be visible in all instances
 11  WHERE
 12      conftype = 'CELL'
 13  ORDER BY
 14*     cv_cellname
</pre>
<p>I will add some more scripts to the <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vZmlsZXMvc2NyaXB0cy9leGFkYXRhL2NlbGx2ZXIuc3Fs" target=\"_blank\">exadata</a> directory over the coming days.</p>
<p>Enjoy! :)</p>
 <img src="http://blog.tanelpoder.com/?feed-stats-post-id=2013" width="1" height="1" style="display: none;" /><div class="crp_related"><h4>Related Posts</h4><ul><li><a href="http://blog.tanelpoder.com/2013/02/14/drilling-deep-into-exadata-performance-with-ash-sql-monitoring-and-exadata-snapper-slides-and-a-hacking-session/"     class="crp_title">Drilling Deep Into Exadata Performance with ASH, SQL&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2012/04/13/exadata-smart-scan-predicate-offloading-and-sequence-nextval/"     class="crp_title">Exadata Smart Scan predicate offloading and sequence.NEXTVAL</a></li><li><a href="http://blog.tanelpoder.com/2010/07/30/exadata-v2-smart-scan-performance-troubleshooting-article/"     class="crp_title">Exadata v2 Smart Scan Performance Troubleshooting article</a></li><li><a href="http://blog.tanelpoder.com/2011/08/08/are-you-getting-the-most-out-of-your-exadata-performance-part-1/"     class="crp_title">Are you getting the most out of your Exadata performance?&hellip;</a></li><li><a href="http://blog.tanelpoder.com/oracle/exadata/"     class="crp_title">Exadata</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2013/03/21/listing-exadata-storage-cells-and-their-configuration-info-from-vcell_config/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Alter session force parallel query doesn&#8217;t really force anything</title>
		<link>http://blog.tanelpoder.com/2013/03/20/alter-session-force-parallel-query-doesnt-really-force-anything/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=alter-session-force-parallel-query-doesnt-really-force-anything</link>
		<comments>http://blog.tanelpoder.com/2013/03/20/alter-session-force-parallel-query-doesnt-really-force-anything/#comments</comments>
		<pubDate>Wed, 20 Mar 2013 16:04:55 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/?p=2009</guid>
		<description><![CDATA[Jonathan Lewis has already written about this behavior from the angle of PARALLEL hints. I&#8217;m writing a similar article just because the word FORCE in the ALTER SESSION FORCE PARALLEL QUERY syntax. Force should mean that some behavior would always happen (when possible), right? Let&#8217;s test: SQL&#62; CREATE TABLE t AS SELECT * FROM dba_objects; [...]<div class="crp_related"><h4>Related Posts</h4><ul><li><a href="http://blog.tanelpoder.com/2012/08/02/the-limitations-of-cursor_sharing-force-and-force_matching_signature-for-sql-plan-stability/"     class="crp_title">The limitations of CURSOR_SHARING = FORCE and&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2011/11/14/profiling-trace-files-with-preprocessor-external-tables-in-11g-and-some-parallel-execution-hacking/"     class="crp_title">Profiling trace files with preprocessor external tables in&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2011/03/15/exadata-can-do-smart-scans-on-bitmap-indexes/"     class="crp_title">Exadata CAN do smart scans on bitmap indexes</a></li><li><a href="http://blog.tanelpoder.com/2011/06/28/knowing-what-you-want-to-achieve-before-thinking-of-how-to-achieve-it-a-query-optimization-example-2/"     class="crp_title">Knowing what you want to achieve before thinking of how to&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2010/06/23/the-full-power-of-oracles-diagnostic-events-part-2-oradebug-doc-and-11g-improvements/"     class="crp_title">The full power of Oracle&#8217;s diagnostic events, part 2:&hellip;</a></li></ul></div>]]></description>
				<content:encoded><![CDATA[<p>Jonathan Lewis has <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2pvbmF0aGFubGV3aXMud29yZHByZXNzLmNvbS8yMDA3LzA2LzE3L2hpbnRzLWFnYWluLw==" target=\"_blank\">already written</a> about this behavior from the angle of PARALLEL hints.</p>
<p>I&#8217;m writing a similar article just because the word <strong>FORCE</strong> in the ALTER SESSION FORCE PARALLEL QUERY syntax. Force should mean that some behavior would always happen (when possible), right? Let&#8217;s test:</p>
<pre>SQL&gt; CREATE TABLE t AS SELECT * FROM dba_objects;

Table created.

SQL&gt; CREATE INDEX i ON t(owner);

Index created.

SQL&gt; @<a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vZmlsZXMvc2NyaXB0cy9ndHMuc3Fs" target=\"_blank\">gts</a> t
Gather Table Statistics for table t...

PL/SQL procedure successfully completed.</pre>
<p>Now let&#8217;s &#8220;force&#8221; the parallel query in my session, run the query and check the execution plan:</p>
<pre>SQL&gt; <strong>ALTER SESSION <span style="color: #ff0000;">FORCE</span> PARALLEL QUERY PARALLEL 2;</strong>

Session altered.

SQL&gt; SELECT SUM(object_id) FROM t WHERE owner LIKE 'S%';

SUM(OBJECT_ID)
--------------
     979900956

SQL&gt; @<a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vZmlsZXMvc2NyaXB0cy94LnNxbA==" target=\"_blank\">x</a>

---------------------------------------------------------------------------
| Id  | Operation                    | Name | E-Rows |E-Bytes| Cost (%CPU)|
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |      |        |       |   <strong>186</strong> (100)|
|   1 |  SORT AGGREGATE              |      |      1 |    12 |            |
|   2 |   TABLE ACCESS BY INDEX ROWID| T    |   6741 | 80892 |   186   (0)|
|*  3 |    <strong>INDEX RANGE SCAN</strong>          | I    |   6741 |       |    18   (0)|
---------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
   3 - access("OWNER" LIKE 'S%')
       filter("OWNER" LIKE 'S%')</pre>
<p>The output shows a regular, serial execution plan!</p>
<p>Hmm, let&#8217;s increase the &#8220;forced&#8221; parallelism from 2 to 3 and run exactly the same query again:</p>
<pre>SQL&gt; <strong>ALTER SESSION FORCE PARALLEL QUERY PARALLEL <span style="color: #ff0000;">3</span></strong>;

Session altered.

SQL&gt; SELECT SUM(object_id) FROM t WHERE owner LIKE 'S%';

SUM(OBJECT_ID)
--------------
     979900956

SQL&gt; @x

------------------------------------------------------------------------------------------------------
| Id  | Operation              | Name     | E-Rows |E-Bytes| Cost (%CPU)|    TQ  |IN-OUT| PQ Distrib |
------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |          |        |       |   <strong>128</strong> (100)|        |      |            |
|   1 |  SORT AGGREGATE        |          |      1 |    12 |            |        |      |            |
|   2 |   PX COORDINATOR       |          |        |       |            |        |      |            |
|   3 |    PX SEND QC (RANDOM) | :TQ10000 |      1 |    12 |            |  Q1,00 | P-&gt;S | QC (RAND)  |
|   4 |     SORT AGGREGATE     |          |      1 |    12 |            |  Q1,00 | PCWP |            |
|   5 |      PX BLOCK ITERATOR |          |   6741 | 80892 |   128   (0)|  Q1,00 | PCWC |            |
|*  6 |       <strong>TABLE ACCESS FULL</strong>| T        |   6741 | 80892 |   128   (0)|  Q1,00 | PCWP |            |
------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
   6 - access(:Z&gt;=:Z AND :Z&lt;=:Z)
       filter("OWNER" LIKE 'S%')</pre>
<p>Now the query will get a parallel plan!</p>
<p>The reason for this behavior is that the FORCE parallel query syntax doesn&#8217;t really <em>force</em> Oracle to use a parallel plan, but rather just reduces optimizer cost estimates <em>for full table scans </em>(the higher the parallelism, the lower the FTS costs &#8211; Jonathan already has details about this in his blog entry, so I won&#8217;t replicate this). But the optimizer is still free to choose some other, non-parallel execution plan if that has a lower cost than the best parallel one!</p>
<p>So what happened above is that with &#8220;forced&#8221; parallel degree 2, the parallel full table scan plan must have had a higher cost than the serial index range scan (186), but once I increased the parallelism &#8220;factor&#8221; to 3, then the final cost of the parallel full table scan plan ended up being lower (128) than the best serial plan found.</p>
<p>This is a good example showing that both the PARALLEL hints and the FORCE PARALLEL session settings really just adjust a narrow set of optimizer cost computation inputs and don&#8217;t really fix the resulting execution plan. If you really want to fix an execution plan, you need to tie optimizer &#8220;hands&#8221; in every aspect with a full set of hints just like the stored profiles do. That way, even if there is a lower cost plan available, the optimizer doesn&#8217;t know about it as you&#8217;ve prohibited it from doing any calculations other than your hints direct it to.</p>
<p>Note that when testing this, your mileage may vary, depending on how much data you have in your test table (or rather in the optimizer stats for that table) plus system stats.</p>
 <img src="http://blog.tanelpoder.com/?feed-stats-post-id=2009" width="1" height="1" style="display: none;" /><div class="crp_related"><h4>Related Posts</h4><ul><li><a href="http://blog.tanelpoder.com/2012/08/02/the-limitations-of-cursor_sharing-force-and-force_matching_signature-for-sql-plan-stability/"     class="crp_title">The limitations of CURSOR_SHARING = FORCE and&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2011/11/14/profiling-trace-files-with-preprocessor-external-tables-in-11g-and-some-parallel-execution-hacking/"     class="crp_title">Profiling trace files with preprocessor external tables in&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2011/03/15/exadata-can-do-smart-scans-on-bitmap-indexes/"     class="crp_title">Exadata CAN do smart scans on bitmap indexes</a></li><li><a href="http://blog.tanelpoder.com/2011/06/28/knowing-what-you-want-to-achieve-before-thinking-of-how-to-achieve-it-a-query-optimization-example-2/"     class="crp_title">Knowing what you want to achieve before thinking of how to&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2010/06/23/the-full-power-of-oracles-diagnostic-events-part-2-oradebug-doc-and-11g-improvements/"     class="crp_title">The full power of Oracle&#8217;s diagnostic events, part 2:&hellip;</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2013/03/20/alter-session-force-parallel-query-doesnt-really-force-anything/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>asqlmon.sql: SQL Monitoring-like execution plan line level drilldown into SQL response time</title>
		<link>http://blog.tanelpoder.com/2013/03/17/asqlmon-sql-sql-monitoring-like-execution-plan-line-level-drilldown-into-sql-response-time/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=asqlmon-sql-sql-monitoring-like-execution-plan-line-level-drilldown-into-sql-response-time</link>
		<comments>http://blog.tanelpoder.com/2013/03/17/asqlmon-sql-sql-monitoring-like-execution-plan-line-level-drilldown-into-sql-response-time/#comments</comments>
		<pubDate>Sun, 17 Mar 2013 14:23:52 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/?p=1999</guid>
		<description><![CDATA[I don&#8217;t have much time for a thorough blog post, so I&#8217;ll just paste in an example output of my asqlmon.sql script, which uses ASH sql_plan_line columns for displaying where inside your execution plan response time has been spent. Why not just use Oracle&#8217;s own SQL Monitoring reports? Well, SQL monitoring is meant for &#8220;long [...]<div class="crp_related"><h4>Related Posts</h4><ul><li><a href="http://blog.tanelpoder.com/2010/10/18/read-currently-running-sql-statements-bind-variable-values/"     class="crp_title">Read currently running SQL statement&#8217;s bind variable&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2012/04/13/exadata-smart-scan-predicate-offloading-and-sequence-nextval/"     class="crp_title">Exadata Smart Scan predicate offloading and sequence.NEXTVAL</a></li><li><a href="http://blog.tanelpoder.com/2011/11/14/profiling-trace-files-with-preprocessor-external-tables-in-11g-and-some-parallel-execution-hacking/"     class="crp_title">Profiling trace files with preprocessor external tables in&hellip;</a></li><li><a href="http://blog.tanelpoder.com/oracle/performance/sql/oracle-sql-plan-stability/"     class="crp_title">Oracle SQL Plan Stability</a></li><li><a href="http://blog.tanelpoder.com/2011/06/29/ioug-select-journal-editors-choice-award-2011/"     class="crp_title">IOUG Select Journal Editor&#8217;s Choice Award 2011</a></li></ul></div>]]></description>
				<content:encoded><![CDATA[<p>I don&#8217;t have much time for a thorough blog post, so I&#8217;ll just paste in an example output of my asqlmon.sql script, which uses ASH sql_plan_line columns for displaying where <i>inside</i> your execution plan response time has been spent. Why not just use Oracle&#8217;s own SQL Monitoring reports? Well, SQL monitoring is meant for &#8220;long running&#8221; queries, which are not executed very frequently. In other words, you can&#8217;t use SQL Monitoring for drilling down into your frequently executed OLTP-style SQL. I am copying my recent post to Oracle-L mailing list here too:</p>
<blockquote><p>The main performance impact of the old GATHER_PLAN_STATISTICS / statistics_level = ALL instrumentation came from the fact that expensive timing (gettimeofday()) system calls were used for getting A-Times of row sources.</p>
<p>That&#8217;s why the _rowsource_statistics_sampfreq was introduced, to not have to get the timing every switch between row sources, but only at every 128th time (by default). This caused some interesting measurement (or rather extrapolation) errors where the parent row source seemingly used less time than all of its children combined. (By the way, depending on your platform and recency of it, lightweight &#8220;fast trap&#8221; system calls may be used for getting the current timestamp, which reduces the overhead somewhat &#8211; Solaris since long time ago and RHEL 5.4+ for example).</p>
<p><em id="__mceDel">Anyway, the row source timing info in SQL Monitoring comes from ASH sql_plan_line samples, so this instrumentation is always enabled anyway &#8211; SQL Monitoring will just query ASH for these records. The other data in V$SQL_MONITOR views doesn&#8217;t cause huge overhead &#8211; it depends on your query, but a heavy logical IO nested loop (my <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vZmlsZXMvc2NyaXB0cy9sb3RzbGlvcy5zcWw=" target=\"_blank\">lotslios.sql</a>) consumed around 0.6% more CPU with MONITOR hint compared to running with NO_MONITOR hint. I tested it on a VM and ran it only a couple of times, so this might just be statistical error or due to some other background activity. Not significant overhead in other words.</em></p>
<p>Now this was about long running queries, but you should not go and enable SQL Monitoring for all your short (OLTP) queries with a hint now as the SQL Monitoring data has to be kept and updated in a shared pool memory structure &#8211; and if all of your 1000 sessions suddenly start updating their monitoring data for every execution of a SQL, you will end up waiting for <i>Real-time plan statistics latch </i>contention (and some CPU overhead because so frequent searching and purging of previous SQL execution&#8217;s monitoring data).</p></blockquote>
<p>The asqlmon (ASH-based SQL Monitoring like report) assumes that the corresponding execution plan is still present in library cache, it will take SQL_ID and child_number as a parameter. It does not show only a single execution as the SQL Monitoring report does, but  rather a plan-line level breakdown across all executions of that SQL/child captured in ASH data (you can change the WHERE clause to change the scope of the measurement):</p>
<pre>SQL&gt; @ash/<a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vZmlsZXMvc2NyaXB0cy9hc2gvYXNxbG1vbi5zcWw=" target=\"_blank\">asqlmon</a> 6c45rgjx1myt6 0 

   <strong>SECONDS</strong> <strong>Activity</strong> <strong>Visual</strong>       Line ID Parent ASQLMON_OPERATION                                                                                    SESSION EVENT                                                            OBJ_ALIAS_QBC_NAME                                                                                 ASQLMON_PREDICATES                                                                                   PROJECTION
---------- -------- ------------ ------- ------ ---------------------------------------------------------------------------------------------------- ------- ---------------------------------------------------------------- -------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                  % |          |       0        SELECT STATEMENT
         5   10.4 % |#         |       1      0  SORT AGGREGATE                                                                                      ON CPU                                                                    [SEL$1]                                                                                                                                                                                                (#keys=0) COUNT(*)[22]
         3    6.3 % |#         |       2      1   COUNT STOPKEY                                                                                      ON CPU                                                                                                                                                                      [F:]ROWNUM&lt;=1000000000
                  % |          |       3      2    MERGE JOIN CARTESIAN
                  % |          |       4      3     VIEW  [DBA_SOURCE]                                                                                                                                                        DBA_SOURCE@SEL$1 [SET$1]
                  % |          |       5      4      UNION-ALL                                                                                                                                                                 [SET$1]
                  % |          |       6      5       FILTER                                                                                                                                                                   [SEL$335DD26A]                                                                                    [F:](("O"."TYPE#"&lt;&gt;4 AND "O"."TYPE#"&lt;&gt;5 AND "O"."TYPE#"&lt;&gt;7 AND "O"."TYPE#"&lt;&gt;8 AND "O"."TYPE#"&lt;&gt;9 AND
                                                                                                                                                                                                                                                                                                                                 "O"."TYPE#"&lt;&gt;10 AND "O"."TYPE#"&lt;&gt;11 AND "O"."TYPE#"&lt;&gt;12 AND "O"."TYPE#"&lt;&gt;13 AND "O"."TYPE#"&lt;&gt;14 AND
                                                                                                                                                                                                                                                                                                                                 "O"."TYPE#"&lt;&gt;22 AND "O"."TYPE#"&lt;&gt;87 AND "O"."TYPE#"&lt;&gt;88) OR BITAND("U"."SPARE1",16)=0 OR
                                                                                                                                                                                                                                                                                                                                 (INTERNAL_FUNCTION("O"."TYPE#") AND ((SYS_CONTEXT('userenv','current_edition_name')='ORA$BASE' AND
                                                                                                                                                                                                                                                                                                                                 "U"."TYPE#"&lt;&gt;2) OR ("U"."TYPE#"=2 AND
                                                                                                                                                                                                                                                                                                                                 "U"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))) OR  IS NOT NULL)))

                  % |          |       7      6        HASH JOIN                                                                                                                                                                                                                                                                 [A:] "O"."OBJ#"="S"."OBJ#"                                                                           (#keys=1) "O"."OBJ#"[NUMBER,22], "U"."SPARE2"[NUMBER,22], "U"."TYPE#"[NUMBER,22], "U"."SPARE1"[NUMBER,22], "O"."TYPE#"[NUMBER,22]
                  % |          |       8      7         HASH JOIN                                                                                                                                                                                                                                                                [A:] "O"."SPARE3"="U"."USER#"                                                                        (#keys=1) "U"."SPARE2"[NUMBER,22], "U"."TYPE#"[NUMBER,22], "U"."SPARE1"[NUMBER,22], "O"."OBJ#"[NUMBER,22], "O"."TYPE#"[NUMBER,22]
                  % |          |       9      8          INDEX FULL SCAN [I_USER2]                                                                                                                                            U@SEL$2 [SEL$335DD26A]                                                                                                                                                                                  "U"."USER#"[NUMBER,22]
                  % |          |      10      8          HASH JOIN                                                                                                                                                                                                                                                               [A:] "O"."OWNER#"="U"."USER#"                                                                        (#keys=1) "U"."SPARE2"[NUMBER,22], "U"."TYPE#"[NUMBER,22], "U"."SPARE1"[NUMBER,22], "O"."OBJ#"[NUMBER,22], "O"."SPARE3"[NUMBER,22], "O"."TYPE#"[NUMBER,22]
                  % |          |      11     10           INDEX FULL SCAN [I_USER2]                                                                                                                                           U@SEL$3 [SEL$335DD26A]                                                                                                                                                                                  "U"."USER#"[NUMBER,22], "U"."TYPE#"[NUMBER,22], "U"."SPARE1"[NUMBER,22], "U"."SPARE2"[NUMBER,22]
         1    2.1 % |          |      12     10           INDEX FAST FULL SCAN [I_OBJ2]                                                              ON CPU                                                                   O@SEL$3 [SEL$335DD26A]                                                                             [F:](("O"."TYPE#"=13 AND "O"."SUBNAME" IS NULL) OR INTERNAL_FUNCTION("O"."TYPE#"))                   "O"."OBJ#"[NUMBER,22], "O"."OWNER#"[NUMBER,22], "O"."TYPE#"[NUMBER,22], "O"."SPARE3"[NUMBER,22]
                  % |          |      13      7         INDEX FAST FULL SCAN [I_SOURCE1]                                                                                                                                      S@SEL$2 [SEL$335DD26A]                                                                                                                                                                                  "S"."OBJ#"[NUMBER,22]
                  % |          |      14      6        NESTED LOOPS                                                                                                                                                            [SEL$5]
                  % |          |      15     14         INDEX SKIP SCAN [I_USER2]                                                                                                                                             U2@SEL$5 [SEL$5]                                                                                   [A:] "U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))         "U2"."USER#"[NUMBER,22]
                                                                                                                                                                                                                                                                                                                                 [F:]("U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id')))

                  % |          |      16     14         INDEX RANGE SCAN [I_OBJ4]                                                                                                                                             O2@SEL$5 [SEL$5]                                                                                   [A:] "O2"."DATAOBJ#"=:B1 AND "O2"."TYPE#"=88 AND "O2"."OWNER#"="U2"."USER#"
                  % |          |      17      5       NESTED LOOPS                                                                                                                                                             [SEL$68B588A0]
                  % |          |      18     17        NESTED LOOPS                                                                                                                                                                                                                                                                                                                                                                   "O"."SPARE3"[NUMBER,22]
                  % |          |      19     18         NESTED LOOPS                                                                                                                                                                                                                                                                                                                                                                  "O"."OWNER#"[NUMBER,22], "O"."TYPE#"[NUMBER,22], "O"."SPARE3"[NUMBER,22]
                  % |          |      20     19          FIXED TABLE FULL [X$JOXSCD]                                                                                                                                          S@SEL$6 [SEL$68B588A0]                                                                                                                                                                                  "S"."JOXFTOBN"[NUMBER,22]
                  % |          |      21     19          TABLE ACCESS BY INDEX ROWID [OBJ$]                                                                                                                                   O@SEL$7 [SEL$68B588A0]                                                                                                                                                                                  "O"."OWNER#"[NUMBER,22], "O"."TYPE#"[NUMBER,22], "O"."SPARE3"[NUMBER,22]
                  % |          |      22     21           INDEX RANGE SCAN [I_OBJ1]                                                                                                                                           O@SEL$7 [SEL$68B588A0]                                                                             [A:] "O"."OBJ#"="S"."JOXFTOBN" AND "O"."TYPE#"=28 [F:]"O"."TYPE#"=28                                 "O".ROWID[ROWID,10], "O"."OWNER#"[NUMBER,22], "O"."TYPE#"[NUMBER,22]
                  % |          |      23     18         INDEX RANGE SCAN [I_USER2]                                                                                                                                            U@SEL$7 [SEL$68B588A0]                                                                             [A:] "O"."OWNER#"="U"."USER#" [F:](("O"."TYPE#"&lt;&gt;4 AND "O"."TYPE#"&lt;&gt;5 AND "O"."TYPE#"&lt;&gt;7 AND
                                                                                                                                                                                                                                                                                                                                 "O"."TYPE#"&lt;&gt;8 AND "O"."TYPE#"&lt;&gt;9 AND "O"."TYPE#"&lt;&gt;10 AND "O"."TYPE#"&lt;&gt;11 AND "O"."TYPE#"&lt;&gt;12 AND
                                                                                                                                                                                                                                                                                                                                 "O"."TYPE#"&lt;&gt;13 AND "O"."TYPE#"&lt;&gt;14 AND "O"."TYPE#"&lt;&gt;22 AND "O"."TYPE#"&lt;&gt;87 AND "O"."TYPE#"&lt;&gt;88) OR
                                                                                                                                                                                                                                                                                                                                 BITAND("U"."SPARE1",16)=0)

                  % |          |      24     17        INDEX RANGE SCAN [I_USER2]                                                                                                                                             U@SEL$6 [SEL$68B588A0]                                                                             [A:] "O"."SPARE3"="U"."USER#"
<strong><span style="color: #ff0000;">        39   81.3 % |########  |      25      3     BUFFER SORT                                                                                      ON CPU                                                                                                                                                                                                                                                                           (#keys=0)
</span></strong>                  % |          |      26     25      VIEW  [DBA_OBJECTS]                                                                                                                                                      DBA_OBJECTS@SEL$1 [SET$2]
                  % |          |      27     26       UNION-ALL                                                                                                                                                                [SET$2]
                  % |          |      28     27        FILTER                                                                                                                                                                  [SEL$18BE6699]                                                                                    [F:](("O"."TYPE#"&lt;&gt;4 AND "O"."TYPE#"&lt;&gt;5 AND "O"."TYPE#"&lt;&gt;7 AND "O"."TYPE#"&lt;&gt;8 AND "O"."TYPE#"&lt;&gt;9 AND
                                                                                                                                                                                                                                                                                                                                 "O"."TYPE#"&lt;&gt;11 AND "O"."TYPE#"&lt;&gt;12 AND "O"."TYPE#"&lt;&gt;13 AND "O"."TYPE#"&lt;&gt;14 AND "O"."TYPE#"&lt;&gt;22 AND
                                                                                                                                                                                                                                                                                                                                 "O"."TYPE#"&lt;&gt;87 AND "O"."TYPE#"&lt;&gt;88) OR BITAND("U"."SPARE1",16)=0 OR (INTERNAL_FUNCTION("O"."TYPE#")
                                                                                                                                                                                                                                                                                                                                 AND ((SYS_CONTEXT('userenv','current_edition_name')='ORA$BASE' AND "U"."TYPE#"&lt;&gt;2) OR ("U"."TYPE#"=2
                                                                                                                                                                                                                                                                                                                                 AND "U"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))) OR  IS NOT NULL)))

                  % |          |      29     28         HASH JOIN                                                                                                                                                                                                                                                                [A:] "O"."SPARE3"="U"."USER#"                                                                        (#keys=1) "U"."SPARE2"[NUMBER,22], "U"."TYPE#"[NUMBER,22], "U"."SPARE1"[NUMBER,22], "O"."OBJ#"[NUMBER,22], "O"."TYPE#"[NUMBER,22]
                  % |          |      30     29          INDEX FULL SCAN [I_USER2]                                                                                                                                            U@SEL$10 [SEL$18BE6699]                                                                                                                                                                                 "U"."USER#"[NUMBER,22]
                  % |          |      31     29          HASH JOIN                                                                                                                                                                                                                                                               [A:] "O"."OWNER#"="U"."USER#"                                                                        (#keys=1) "U"."SPARE2"[NUMBER,22], "U"."TYPE#"[NUMBER,22], "U"."SPARE1"[NUMBER,22], "O"."OBJ#"[NUMBER,22], "O"."SPARE3"[NUMBER,22], "O"."TYPE#"[NUMBER,22]
                  % |          |      32     31           INDEX FULL SCAN [I_USER2]                                                                                                                                           U@SEL$12 [SEL$18BE6699]                                                                                                                                                                                 "U"."USER#"[NUMBER,22], "U"."TYPE#"[NUMBER,22], "U"."SPARE1"[NUMBER,22], "U"."SPARE2"[NUMBER,22]
                  % |          |      33     31           TABLE ACCESS FULL [OBJ$]                                                                                                                                            O@SEL$12 [SEL$18BE6699]                                                                            [F:]("O"."TYPE#"&lt;&gt;10 AND BITAND("O"."FLAGS",128)=0 AND "O"."NAME"&lt;&gt;'_NEXT_OBJECT' AND                "O"."OBJ#"[NUMBER,22], "O"."OWNER#"[NUMBER,22], "O"."TYPE#"[NUMBER,22], "O"."SPARE3"[NUMBER,22]
                                                                                                                                                                                                                                                                                                                                 "O"."NAME"&lt;&gt;'_default_auditing_options_' AND "O"."LINKNAME" IS NULL)

                  % |          |      34     28         NESTED LOOPS                                                                                                                                                           [SEL$14]
                  % |          |      35     34          INDEX SKIP SCAN [I_USER2]                                                                                                                                            U2@SEL$14 [SEL$14]                                                                                 [A:] "U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))         "U2"."USER#"[NUMBER,22]
                                                                                                                                                                                                                                                                                                                                 [F:]("U2"."TYPE#"=2 AND "U2"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id')))

                  % |          |      36     34          INDEX RANGE SCAN [I_OBJ4]                                                                                                                                            O2@SEL$14 [SEL$14]                                                                                 [A:] "O2"."DATAOBJ#"=:B1 AND "O2"."TYPE#"=88 AND "O2"."OWNER#"="U2"."USER#"
                  % |          |      37     27        NESTED LOOPS                                                                                                                                                            [SEL$15]
                  % |          |      38     37         INDEX FULL SCAN [I_LINK1]                                                                                                                                             L@SEL$15 [SEL$15]                                                                                                                                                                                       "L"."OWNER#"[NUMBER,22]
                  % |          |      39     37         INDEX RANGE SCAN [I_USER2]                                                                                                                                            U@SEL$15 [SEL$15]                                                                                  [A:] "L"."OWNER#"="U"."USER#"

40 rows selected.</pre>
<p>The output is deliberately very wide &#8211; as I like to have relevant info to a plan line on the same text line visually. I navigate around such plans by visually identifying where most of the time was spent (Activity% and Visual columns), then double or triple-click that line in my terminal window to highlight the whole line (it becomes like a marker) and then scroll left-right to see more info about it, such as the filter conditions and projection etc.</p>
<p>Note that this script does not give you all the info that a SQL Monitoring report (or the old-fashioned SQL Plan Profiling would give), like A-rows and Starts, because ASH just doesn&#8217;t provide data at this scope. But again, this approach works with frequently executed OLTP-style queries and does not require you to enable any session settings or add hints for getting quick overview of on which execution plan line does your SQL spend the most of its time.</p>
<p>Update: I also have a RAC-aware / GV$-using <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vZmlsZXMvc2NyaXB0cy9hc2gvZ2FzcWxtb24uc3Fs" target=\"_blank\">gasqlmon.sql</a> script, but I haven&#8217;t kept it up to date for a while, so it might return incorrect output at the moment (there are some notable challenges as the child# of interest may not be the same on all instances, so for simplicity I look into a single instance at a time &#8211; non-parallel SQL tuning rarely requires a whole cluster overview in one script).</p>
 <img src="http://blog.tanelpoder.com/?feed-stats-post-id=1999" width="1" height="1" style="display: none;" /><div class="crp_related"><h4>Related Posts</h4><ul><li><a href="http://blog.tanelpoder.com/2010/10/18/read-currently-running-sql-statements-bind-variable-values/"     class="crp_title">Read currently running SQL statement&#8217;s bind variable&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2012/04/13/exadata-smart-scan-predicate-offloading-and-sequence-nextval/"     class="crp_title">Exadata Smart Scan predicate offloading and sequence.NEXTVAL</a></li><li><a href="http://blog.tanelpoder.com/2011/11/14/profiling-trace-files-with-preprocessor-external-tables-in-11g-and-some-parallel-execution-hacking/"     class="crp_title">Profiling trace files with preprocessor external tables in&hellip;</a></li><li><a href="http://blog.tanelpoder.com/oracle/performance/sql/oracle-sql-plan-stability/"     class="crp_title">Oracle SQL Plan Stability</a></li><li><a href="http://blog.tanelpoder.com/2011/06/29/ioug-select-journal-editors-choice-award-2011/"     class="crp_title">IOUG Select Journal Editor&#8217;s Choice Award 2011</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2013/03/17/asqlmon-sql-sql-monitoring-like-execution-plan-line-level-drilldown-into-sql-response-time/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>ExaSnapper 0.7 beta download and the hacking session videos</title>
		<link>http://blog.tanelpoder.com/2013/02/22/exasnapper-0-7-beta-download-and-the-hacking-session-videos/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=exasnapper-0-7-beta-download-and-the-hacking-session-videos</link>
		<comments>http://blog.tanelpoder.com/2013/02/22/exasnapper-0-7-beta-download-and-the-hacking-session-videos/#comments</comments>
		<pubDate>Fri, 22 Feb 2013 19:38:28 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Exadata]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/?p=1906</guid>
		<description><![CDATA[Thank you for attending the Exadata Snapper (ExaSnapper) hacking session! I have split the recording of this session into 3 pieces and uploaded to enkitec.tv. The ExaSnapper v0.7 beta that I demoed is also available now at enkitec.com (registration needed). See the links below. For quick reference, here&#8217;s the syntax of running ExaSnapper &#8211; there [...]<div class="crp_related"><h4>Related Posts</h4><ul><li><a href="http://blog.tanelpoder.com/2011/08/11/full-scans-direct-path-reads-and-ora-8103-error-hacking-session-video-here-plus-itunes-podcast-address-2/"     class="crp_title">Full scans, direct path reads and ORA-8103 error hacking&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2011/03/29/moats-the-mother-of-all-tuning-scripts/"     class="crp_title">MOATS: The Mother of All Tuning Scripts!</a></li><li><a href="http://blog.tanelpoder.com/2012/08/27/do-you-like-to-watch-tv-watch-enkitec-tv-from-now-on/"     class="crp_title">Do you like to watch TV? Watch Enkitec.TV from now on! :-)</a></li><li><a href="http://blog.tanelpoder.com/2011/03/30/oracle-troubleshooting-tv-show/"     class="crp_title">Oracle Troubleshooting TV Show: Season 1, Episode 01 ;-)</a></li><li><a href="http://blog.tanelpoder.com/2013/02/18/snapper-v4-02-and-the-snapper-launch-party-video/"     class="crp_title">Snapper v4.02 and the Snapper launch party video</a></li></ul></div>]]></description>
				<content:encoded><![CDATA[<p>Thank you for attending the Exadata Snapper (ExaSnapper) hacking session!</p>
<p>I have split the recording of this session into 3 pieces and uploaded to <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Vua2l0ZWMudHY=" target=\"_blank\">enkitec.tv</a>. The ExaSnapper v0.7 beta that I demoed is also available now at enkitec.com (registration needed). See the links below.</p>
<p>For quick reference, here&#8217;s the syntax of running ExaSnapper &#8211; there are two modes, one is the before/after capture (think Tom Kyte&#8217;s runstats, but for exadata metrics) and the other is more like a DBA-monitoring mode, where you can just measure a few seconds worth of a long-running query runtime and get the IO and efficiency figures from there.</p>
<p>Here&#8217;s an excerpt from the install script documentation section:</p>
<pre>-- Usage:       Take a snapshot of a running session (use QC SID if PX):
--
--                a) Monitor a running query - "DBA mode" 
--
--                   SELECT * FROM TABLE(exasnap.display_sid(, [snap_seconds], [detail_level]));
--
--                   The SID argument can be just a number (SID in local instance) or a remote SID with
--                   @instance after it (like '123@4')
--
--                   SELECT * FROM TABLE(exasnap.display_sid(123));
--                   SELECT * FROM TABLE(exasnap.display_sid('123@4', p_detail=&gt;'%');
--
--                b) Take Before &amp; After snapshots of a query execution - "Developer Mode"
--
--                   1) SELECT exasnap.begin_snap(123) FROM dual;
--                        or
--                      EXEC :begin_snap_id := exasnap.begin_snap(123);
-- 
--                   2) Run your query, wait until it finishes (or CTRL+C)
--
--                   3) SELECT exasnap.end_snap(123) FROM dual;
--                        or
--                      EXEC :end_snap_id := exasnap.end_snap(123);
--
--                   4) SELECT * FROM TABLE(exasnap.display_snap(:begin_snap_id, :end_snap_id, '%'));
--</pre>
<h4>One slide illustrating the idea of ExaSnapper:</h4>
<p><span id="more-1906"></span></p>
<p><a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTMvMDIvU2NyZWVuLVNob3QtMjAxMy0wMi0yMi1hdC00LjQxLjM2LVBNLnBuZw=="><img class="alignnone size-full wp-image-1907" alt="Screen Shot 2013-02-22 at 4.41.36 PM" src="http://blog.tanelpoder.com/wp-content/uploads/2013/02/Screen-Shot-2013-02-22-at-4.41.36-PM.png" width="1032" height="772" /></a></p>
<h4>One  screenshot of ExaSnapper output:</h4>
<p>Watch the videos to see more!</p>
<p><a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTMvMDIvU2NyZWVuLVNob3QtMjAxMy0wMi0yMi1hdC00LjU0LjEwLVBNLnBuZw=="><img class="alignnone size-full wp-image-1908" alt="Screen Shot 2013-02-22 at 4.54.10 PM" src="http://blog.tanelpoder.com/wp-content/uploads/2013/02/Screen-Shot-2013-02-22-at-4.54.10-PM.png" width="1086" height="433" /></a></p>
<h4><strong>Videos:</strong></h4>
<ul>
<li><a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Vua2l0ZWMudHYvMjAxMy8wMi8yMi90YW5lbC1wb2RlcnMtZXhhZGF0YS1zbmFwcGVyLWhhY2tpbmctc2Vzc2lvbi12aWRlb3Mv" target=\"_self\">http://enkitec.tv/2013/02/22/tanel-poders-exadata-snapper-hacking-session-videos/</a></li>
</ul>
<h4><strong>Slides:</strong></h4>
<ul>
<li><a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vZmlsZXMvVGFuZWxfUG9kZXJfRHJpbGxpbmdfRGVlcF9JbnRvX0V4YWRhdGFfUGVyZm9ybWFuY2UucGRm" target=\"_self\">http://blog.tanelpoder.com/files/Tanel_Poder_Drilling_Deep_Into_Exadata_Performance.pdf</a></li>
</ul>
<h4><strong>ExaSnapper install script:</strong></h4>
<ul>
<li><a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL3d3dy5lbmtpdGVjLmNvbS9wcm9kdWN0cy9leGFzbmFwcGVy" target=\"_self\">http://www.enkitec.com/products/exasnapper</a></li>
</ul>
<p>Also, if you&#8217;re serious about learning more about Exadata, from The Exadata Experts, check out our <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL3d3dy5lbmtpdGVjLmNvbS9lZHVjYXRpb24=" target=\"_self\">training pages</a> , I&#8217;m running my Advanced Exadata Performance seminar the first time in May :-)</p>
 <img src="http://blog.tanelpoder.com/?feed-stats-post-id=1906" width="1" height="1" style="display: none;" /><div class="crp_related"><h4>Related Posts</h4><ul><li><a href="http://blog.tanelpoder.com/2011/08/11/full-scans-direct-path-reads-and-ora-8103-error-hacking-session-video-here-plus-itunes-podcast-address-2/"     class="crp_title">Full scans, direct path reads and ORA-8103 error hacking&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2011/03/29/moats-the-mother-of-all-tuning-scripts/"     class="crp_title">MOATS: The Mother of All Tuning Scripts!</a></li><li><a href="http://blog.tanelpoder.com/2012/08/27/do-you-like-to-watch-tv-watch-enkitec-tv-from-now-on/"     class="crp_title">Do you like to watch TV? Watch Enkitec.TV from now on! :-)</a></li><li><a href="http://blog.tanelpoder.com/2011/03/30/oracle-troubleshooting-tv-show/"     class="crp_title">Oracle Troubleshooting TV Show: Season 1, Episode 01 ;-)</a></li><li><a href="http://blog.tanelpoder.com/2013/02/18/snapper-v4-02-and-the-snapper-launch-party-video/"     class="crp_title">Snapper v4.02 and the Snapper launch party video</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2013/02/22/exasnapper-0-7-beta-download-and-the-hacking-session-videos/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Peeking into Linux kernel-land using /proc filesystem for quick&#8217;n&#039;dirty troubleshooting</title>
		<link>http://blog.tanelpoder.com/2013/02/21/peeking-into-linux-kernel-land-using-proc-filesystem-for-quickndirty-troubleshooting/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=peeking-into-linux-kernel-land-using-proc-filesystem-for-quickndirty-troubleshooting</link>
		<comments>http://blog.tanelpoder.com/2013/02/21/peeking-into-linux-kernel-land-using-proc-filesystem-for-quickndirty-troubleshooting/#comments</comments>
		<pubDate>Thu, 21 Feb 2013 14:46:48 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/?p=1896</guid>
		<description><![CDATA[This blog entry is about modern Linuxes. In other words RHEL6 equivalents with 2.6.3x kernels and not the ancient RHEL5 with 2.6.18 kernel (wtf?!), which is the most common in enterprises unfortunately. And no, I&#8217;m not going to use kernel debuggers or SystemTap scripts here, just plain old &#8220;cat /proc/PID/xyz&#8221; commands against some useful /proc [...]<div class="crp_related"><h4>Related Posts</h4><ul><li><a href="http://blog.tanelpoder.com/2011/02/28/finding-oracle-homes-with/"     class="crp_title">Finding Oracle Homes which Oracle instances are using on&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2011/03/13/oracle-exadata-performance-series-part-1-should-i-use-hugepages-on-linux-database-nodes/"     class="crp_title">Oracle Exadata Performance series &#8211; Part 1: Should I&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2011/11/13/evil-things-are-happening-in-oracle/"     class="crp_title">Evil things are happening in Oracle</a></li><li><a href="http://blog.tanelpoder.com/2010/11/23/asynch-descriptor-resize-wait-event-in-oracle/"     class="crp_title">Asynch descriptor resize wait event in Oracle</a></li><li><a href="http://blog.tanelpoder.com/2013/02/14/troubleshooting-high-cpu-usage-with-poor-mans-stack-profiler-in-a-one-liner/"     class="crp_title">Troubleshooting high CPU usage with poor-man&#8217;s stack&hellip;</a></li></ul></div>]]></description>
				<content:encoded><![CDATA[<p>This blog entry is about modern Linuxes. In other words RHEL6 equivalents with 2.6.3x kernels and not the ancient RHEL5 with 2.6.18 kernel (wtf?!), which is the most common in enterprises unfortunately. And no, I&#8217;m not going to use kernel debuggers or SystemTap scripts here, just plain old &#8220;cat /proc/PID/xyz&#8221; commands against some useful /proc filesystem entries.</p>
<h4>Troubleshooting a &#8220;slow&#8221; process</h4>
<p>Here&#8217;s one systematic troubleshooting example I <em>reproduced</em> in my laptop. A DBA was wondering why their find command had been running &#8220;much slower&#8221;, without returning any results for a while. Knowing the environment, we had a hunch, but I got asked about what would be the systematic approach for troubleshooting this &#8211; <em>already ongoing</em> &#8211; problem <strong><em>right now</em></strong>.</p>
<p>Luckily the system was running OEL6, so had a pretty new kernel. Actually the 2.6.39 UEK2.</p>
<p>So, let&#8217;s do some troubleshooting. First let&#8217;s see whether that <em>find</em> process is still alive:</p>
<pre>[root@oel6 ~]# ps -ef | grep find
root     <span style="color: #ff0000;"><strong>27288</strong></span> 27245  4 11:57 pts/0    00:00:01 <strong>find . -type f</strong>
root     27334 27315  0 11:57 pts/1    00:00:00 grep find</pre>
<p>Yep it&#8217;s there &#8211; PID 27288 (I&#8217;ll use that pid throughout the troubleshooting example).</p>
<p>Let&#8217;s start from the basics and take a quick look what&#8217;s the bottleneck for this process &#8211; if it&#8217;s not blocked by anything (for example reading everything it needs from cache) it should be 100% on CPU. If it&#8217;s bottlenecked by some IO or contention issues, the CPU usage should be lower &#8211; or completely 0%.</p>
<pre>[root@oel6 ~]# top -cbp <strong>27288</strong>
top - 11:58:15 up 7 days,  3:38,  2 users,  load average: 1.21, 0.65, 0.47
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.1%us,  0.1%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   2026460k total,  1935780k used,    90680k free,    64416k buffers
Swap:  4128764k total,   251004k used,  3877760k free,   662280k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
27288 root      20   0  109m 1160  844 D  <span style="color: #ff0000;"><strong>0.0</strong></span>  0.1   0:01.11 <strong>find . -type f</strong></pre>
<p>Top tells me this process is either 0% on CPU or very close to zero percent (so it gets rounded to 0% in the output). There&#8217;s an important difference though, as a process that is completely stuck, not having a chance of getting onto CPU at all vs. a process which is getting out of its wait state every now and then (for example some polling operation times out every now and then and thee process chooses to go back to sleep). So, top on Linux is not a good enough tool to show that difference for sure &#8211; but at least we know that this process is not burning serious amounts of CPU time.</p>
<p>Let&#8217;s use something else then. Normally when a process seems to be stuck like that (0% CPU usually means that the process is stuck in some blocking system call &#8211; which causes the kernel to put the process to sleep) I run <code>strace</code> on that process to trace in which system call the process is currently stuck. Also if the process is actually not completely stuck, but returns from a system call and wakes up briefly every now and then, it would show up in strace (as the blocking system call would complete and be entered again a little later):</p>
<pre>[root@oel6 ~]# strace -cp 27288
Process 27288 attached - interrupt to quit

<span style="color: #ff0000;"><strong>^C
^Z</strong></span>
[1]+  Stopped                 strace -cp 27288

[root@oel6 ~]# kill -9 %%
[1]+  Stopped                 strace -cp 27288
[root@oel6 ~]# 
[1]+  Killed                  strace -cp 27288</pre>
<p>Oops, the strace command itself got hung too! It didn&#8217;t print any output for a long time and didn&#8217;t respond to CTRL+C, so I had to put it into background with CTRL+Z and kill it from there. So much for easy diagnosis.</p>
<p><span id="more-1896"></span></p>
<p>Let&#8217;s try pstack then (on Linux, pstack is just a shell script wrapper around the <code>GDB</code> debugger). While pstack does not see into kernel-land, it will still give us a clue about which system call was requested (as usually there&#8217;s a corresponding libc library call in the top of the displayed userland stack):</p>
<pre>[root@oel6 ~]# pstack 27288

^C
^Z
[1]+  Stopped                 pstack 27288

[root@oel6 ~]# kill %%
[1]+  Stopped                 pstack 27288
[root@oel6 ~]# 
[1]+  Terminated              pstack 27288</pre>
<p>Pstack also got stuck without returning anything!</p>
<p>So we still don&#8217;t know whether our process is 100% (hopelessly) stuck or just 99.99% stuck (the process keeps going back to sleep) &#8211; and where it&#8217;s stuck.</p>
<p>Ok, where else to look? There&#8217;s one more commonly available thing to check &#8211; the process status and WCHAN fields, which can be reported via good old ps (perhaps I should have ran this command earlier to make sure this process isn&#8217;t a zombie by now):</p>
<pre>[root@oel6 ~]# ps -flp 27288
F S UID        PID  PPID  C PRI  NI ADDR SZ <strong>WCHAN</strong>  STIME TTY          TIME CMD
0 D root     27288 27245  0  80   0 - 28070 <span style="color: #ff0000;"><strong>rpc_wa</strong></span> 11:57 pts/0    00:00:01 find . -type f</pre>
<p>You should run ps multiple times in a row to make sure that the process is still in the same state (you don&#8217;t want to get misled by a single sample taken at an unlucky time), but I&#8217;m displaying it here only once for brevity.</p>
<p>The process is in state D (uninterruptible sleep) which is usually disk IO related (as the ps man pages also say). And the WCHAN (the function which caused this sleep/wait in this process) field is a bit truncated. I could use a ps option (read the man) to print it out a bit wider, but as this info comes from the proc filesystem anyway, let&#8217;s query it directly from the source (again, it would be a good idea to sample this multiple times as we are not sure yet whether our process is completely stuck or just mostly sleeping):</p>
<pre>[root@oel6 ~]# cat /proc/27288/<strong>wchan</strong>
<strong>rpc_wait_bit_killable
</strong></pre>
<p>Hmm&#8230; this process is waiting for some RPC call. RPC usually means that the process is talking to other processes (either in the local server or even remote servers). But we still don&#8217;t know why.</p>
<h4>Is there any movement or is the process completely stuck?</h4>
<p>Before we go on to the &#8220;meat&#8221; of this article, let&#8217;s figure out whether this process is completely stuck or not. The /proc/PID/status can tell us that on modern kernels. I have highlighted the interesting bits for our purpose:</p>
<pre>[root@oel6 ~]# cat /proc/27288/<strong>status</strong> 
Name:	find
<strong>State:	D (disk sleep)
</strong>Tgid:	27288
Pid:	27288
PPid:	27245
TracerPid:	0
Uid:	0	0	0	0
Gid:	0	0	0	0
FDSize:	256
Groups:	0 1 2 3 4 6 10 
VmPeak:	  112628 kB
VmSize:	  112280 kB
VmLck:	       0 kB
VmHWM:	    1508 kB
VmRSS:	    1160 kB
VmData:	     260 kB
VmStk:	     136 kB
VmExe:	     224 kB
VmLib:	    2468 kB
VmPTE:	      88 kB
VmSwap:	       0 kB
Threads:	1
SigQ:	4/15831
SigPnd:	0000000000040000
ShdPnd:	0000000000000000
SigBlk:	0000000000000000
SigIgn:	0000000000000000
SigCgt:	0000000180000000
CapInh:	0000000000000000
CapPrm:	ffffffffffffffff
CapEff:	ffffffffffffffff
CapBnd:	ffffffffffffffff
Cpus_allowed:	ffffffff,ffffffff
Cpus_allowed_list:	0-63
Mems_allowed:	00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:	0
<strong>voluntary_ctxt_switches:	9950
nonvoluntary_ctxt_switches:	17104
</strong></pre>
<p>The process is in the state D &#8211; Disk Sleep (uninterruptible sleep). And look into the number of <code>voluntary_ctxt_switches</code> and <code>nonvoluntary_ctxt_switches</code> &#8211; this tells you how many times the process was taken off CPU (or put back). Then run the same command again a few seconds later and see if those numbers increase. In my case these numbers did not increase, thus I could conclude that the process was completely stuck (well, at least during the few seconds between these commands). So I can be more confident now that this process is completely stuck (and it&#8217;s not just flying under the radar by burning 0.04% of CPU all time).</p>
<p>By the way, there are two more locations where to get the context switch counts (and the 2nd one works on ancient kernels as well):</p>
<pre>[root@oel6 ~]# cat /proc/27288/<strong>sched</strong>
find (27288, #threads: 1)
---------------------------------------------------------
se.exec_start                      :     617547410.689282
se.vruntime                        :       2471987.542895
se.sum_exec_runtime                :          1119.480311
se.statistics.wait_start           :             0.000000
se.statistics.sleep_start          :             0.000000
se.statistics.block_start          :     617547410.689282
se.statistics.sleep_max            :             0.089192
se.statistics.block_max            :         60082.951331
se.statistics.exec_max             :             1.110465
se.statistics.slice_max            :             0.334211
se.statistics.wait_max             :             0.812834
se.statistics.wait_sum             :           724.745506
se.statistics.wait_count           :                27211
se.statistics.iowait_sum           :             0.000000
se.statistics.iowait_count         :                    0
se.nr_migrations                   :                  312
se.statistics.nr_migrations_cold   :                    0
se.statistics.nr_failed_migrations_affine:                    0
se.statistics.nr_failed_migrations_running:                   96
se.statistics.nr_failed_migrations_hot:                 1794
se.statistics.nr_forced_migrations :                  150
<strong>se.statistics.nr_wakeups           :                18507
</strong>se.statistics.nr_wakeups_sync      :                    1
se.statistics.nr_wakeups_migrate   :                  155
se.statistics.nr_wakeups_local     :                18504
se.statistics.nr_wakeups_remote    :                    3
se.statistics.nr_wakeups_affine    :                  155
se.statistics.nr_wakeups_affine_attempts:                  158
se.statistics.nr_wakeups_passive   :                    0
se.statistics.nr_wakeups_idle      :                    0
avg_atom                           :             0.041379
avg_per_cpu                        :             3.588077
<strong>nr_switches                        :                27054
nr_voluntary_switches              :                 9950
nr_involuntary_switches            :                17104
</strong>se.load.weight                     :                 1024
policy                             :                    0
prio                               :                  120
clock-delta                        :                   72</pre>
<p>Here you need to look into the <code>nr_switches</code> number (which equals <code>nr_voluntary_switches</code> + <code>nr_involuntary_switches</code>).</p>
<p>The total nr_switches is 27054 in the above output and this is also what the 3rd field in /proc/PID/schedstat shows:</p>
<pre>[root@oel6 ~]# cat /proc/27288/<strong>schedstat</strong> 
1119480311 724745506 <strong>27054
</strong></pre>
<p>And it doesn&#8217;t increase&#8230;</p>
<h4>Peeking into kernel-land using /proc filesystem</h4>
<p>So, it looks like our process is pretty stuck :) Strace and pstack were useless. They use ptrace() system call for attaching to the process and peeking into its memory, but as the process was hopelessly stuck, very likely in some system call, so I guess the ptrace() call got hung itself. (BTW, I once tried stracing the strace process itself when attaching to a target process and it crashed the target. You have been warned :)</p>
<p>So, how to see in which system call are we stuck &#8211; without strace or pstack? Luckily I was running on a modern kernel &#8211; say hi to /proc/PID/syscall!</p>
<pre>[root@oel6 ~]# cat /proc/27288/<strong>syscall</strong> 
<span style="color: #ff0000;"><strong>262</strong></span> 0xffffffffffffff9c 0x20cf6c8 0x7fff97c52710 0x100 0x100 0x676e776f645f616d 0x7fff97c52658 0x390e2da8ea</pre>
<p>Ok WTF am I supposed to do with that?<br />
Well, these numbers usually stand for something. If it&#8217;s &#8220;0xAVeryBigNumber&#8221; then it&#8217;s usually a memory address (and pmap-like tools could be used where they point), but if it&#8217;s a small number then perhaps it&#8217;s an index into some array &#8211; like open file descriptor array (which you can read from <code>/proc/PID/fd</code>) or in this case, as we are dealing with system calls &#8211; it&#8217;s the system call number where your process is currently in! So, this process is stuck in system call #262!</p>
<p>Note that the system call numbers may differ between OS type, OS version and platform, so you should read it from the proper .h file on your flavor of OS. Usually searching for &#8220;syscall*&#8221; from /usr/include is a good starting point. On my version and platform (64bit) of Linux the system calls are defined here in <code>/usr/include/asm/unistd_64.h</code>:</p>
<pre>[root@oel6 ~]# grep 262 <strong>/usr/include/asm/unistd_64.h</strong> 
#define __NR_<span style="color: #ff0000;"><strong>newfstatat</strong></span>				<strong>262
</strong></pre>
<p>Here you go! The syscall 262 is something called <code>newfstatat</code>. Just run man to find out what it is. Here&#8217;s a hint regarding system call names &#8211; if man page doesn&#8217;t find a call, then try it without possible suffixes and prefixes (for example &#8220;man pread&#8221; instead of &#8220;man pread64&#8243;) &#8211; in this case, run man without the &#8220;new&#8221; prefix &#8211; <code>man fstatat</code>. Or just google.</p>
<p>Anyway, this system call &#8220;new-fstat-at&#8221; allows you to read file properties pretty much like the usual <code>stat</code> system call. And we are stuck in this file metadata reading operation. So we&#8217;ve gotten one step further. But we still don&#8217;t know why are we stuck there?</p>
<p>Well, <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1hX3o0SXV4QXFwRQ==" target=\"_blank\">Say Hello To My Little Friend</a> <strong>/proc/PID/stack</strong>, which allows you to read kernel stack backtraces of a process by just cat&#8217;ing a proc file!!!</p>
<pre>[root@oel6 ~]# cat /proc/27288/<strong>stack</strong>
[] <strong>rpc_wait_bit_killable</strong>+0x24/0x40 [sunrpc]
[] __rpc_execute+0xf5/0x1d0 [sunrpc]
[] rpc_execute+0x43/0x50 [sunrpc]
[] rpc_run_task+0x75/0x90 [sunrpc]
[] rpc_call_sync+0x42/0x70 [sunrpc]
<strong>[] nfs3_rpc_wrapper.clone.0+0x35/0x80 [nfs]
[] nfs3_proc_getattr+0x47/0x90 [nfs]
[] __nfs_revalidate_inode+0xcc/0x1f0 [nfs]
[] nfs_revalidate_inode+0x36/0x60 [nfs]
[] <span style="color: #ff0000;">nfs</span>_getattr+0x5f/0x110 [nfs]</strong>
[] vfs_getattr+0x4e/0x80
[] vfs_fstatat+0x70/0x90
[] sys_<strong>newfstatat</strong>+0x24/0x50
[] system_call_fastpath+0x16/0x1b
[] 0xffffffffffffffff</pre>
<p>The top function is where in kernel code we are stuck right now &#8211; which is exactly what the WCHAN output showed us (note that actually there are some more functions on top of it, such as the kernel <code>schedule()</code> function which puts processes to sleep or on CPU as needed, but these are not shown here probably because they&#8217;re a result of this wait condition itself, not the cause).</p>
<p>Thanks to the full kernel-land stack of this task we can read it from bottom up to understand how did we end up calling this <code>rpc_wait_bit_killable</code> function in the top, which ended up calling the scheduler and put us into sleep mode.</p>
<p>The <code>system_call_fastpath</code> in the bottom is a generic kernel system call handler function which has called the kernel code for that newfstatat syscall we issued (<code>sys_newfstatat</code>). And then, continuing to go upwards through the &#8220;child&#8221; functions we end up seeing a bunch of NFS functions in the stack! This is a 100% undeniable proof that we are somewhere under NFS codepath. I&#8217;m not saying &#8220;in NFS codepath&#8221; as when you continue reading upwards past the NFS functions, you see that the topmost NFS function has in turn called some RPC function (rpc_call_sync) for talking to some other process &#8211; in this case probably the <code>[kworker/N:N]</code>, <code>[nfsiod]</code>, <code>[lockd]</code> or <code>[rpciod]</code> kernel IO threads. And we are never getting a reply from those threads for some reason (the usual suspect would be dropped network connection, packets or just network connectivity issues).</p>
<p>To see whether any of the helper threads are stuck on network-related code, you could sample their kernel stacks too, although the kworkers do much more than just NFS RPC communication. During a separate experiment (just copying large files over NFS), I have caught one of the kworkers waiting in networking code:</p>
<pre>[root@oel6 proc]# for i in `pgrep worker` ; do ps -fp $i ; cat /proc/$i/stack ; done
UID        PID  PPID  C STIME TTY          TIME CMD
root        53     2  0 Feb14 ?        00:04:34 [<strong>kworker</strong>/1:1]

[] __cond_resched+0x2a/0x40
[] lock_sock_nested+0x35/0x70
<strong>[] tcp_sendmsg+0x29/0xbe0</strong>
[] inet_sendmsg+0x48/0xb0
[] sock_sendmsg+0xef/0x120
[] kernel_sendmsg+0x41/0x60
[] xs_send_kvec+0x8e/0xa0 [sunrpc]
[] xs_sendpages+0x173/0x220 [sunrpc]
[] xs_tcp_send_request+0x5d/0x160 [sunrpc]
[] xprt_transmit+0x83/0x2e0 [sunrpc]
[] call_transmit+0xa8/0x130 [sunrpc]
[] __rpc_execute+0x66/0x1d0 [sunrpc]
<strong>[] rpc_async_schedule+0x15/0x20 [sunrpc]
</strong>[] process_one_work+0x13e/0x460
[] worker_thread+0x17c/0x3b0
[] kthread+0x96/0xa0
[] kernel_thread_helper+0x4/0x10</pre>
<p>It should be possible to enable kernel tracing for knowing which exact kernel thread communicates with other kernel threads, but I won&#8217;t go in there in this post &#8211; as it&#8217;s supposed to be a practical (and simple :) troubleshooting exercise!</p>
<h4>Diagnosis and &#8220;fix&#8221;</h4>
<p>Anyway, thanks to very easy kernel stack sampling in modern Linux kernels (I don&#8217;t know exact version when it was introduced) we managed to systematically figure out where the find command was stuck &#8211; in NFS code in the Linux kernel. And when you have NFS-related hangs, the most usual suspects are network issues. If you are wondering how did I reproduce this problem, I mounted a NFS volume from a VM, started the find command and then just suspended the VM. This produces similar symptoms as a network (configuration, firewall) issue where a connection is silently dropped without notifying the TCP endpoints or packets just don&#8217;t go through for some reason.</p>
<p>As the top function listed in the stack was one of the &#8220;killable&#8221; safe-to-kill functions (<code>rpc_wait_bit_killable</code>) then we can kill it with <code>kill -9</code>:</p>
<pre>[root@oel6 ~]# ps -fp 27288
UID        PID  PPID  C STIME TTY          TIME CMD
root     27288 27245  0 11:57 pts/0    00:00:01 <strong>find . -type f</strong>
[root@oel6 ~]# <span style="color: #ff0000;"><strong>kill -9</strong></span> 27288

[root@oel6 ~]# ls -l /proc/27288/stack
ls: cannot access /proc/27288/stack: No such file or directory

[root@oel6 ~]# ps -fp 27288
UID        PID  PPID  C STIME TTY          TIME CMD
[root@oel6 ~]#</pre>
<p>The process is gone.</p>
<h4>Poor-man&#8217;s kernel thread profiling</h4>
<p>Note that as the /proc/PID/stack looks like just a plain text proc file, you can do poor-man&#8217;s stack profiling also on the kernel threads! This is an example of sampling the current system call and the kernel stack (if in system call) and aggregating it into a semi-hierarchical profile in a poor-man&#8217;s way:</p>
<pre>[root@oel6 ~]# <strong>export LC_ALL=C</strong> ; for i in {1..100} ; do cat /proc/29797/<strong>syscall</strong> | awk '{ print $1 }' ; cat /proc/29797/stack | /home/oracle/os_explain -k ; usleep 100000 ; done | sort -r | uniq -c 
<strong>     69 running
      1 ffffff81534c83
      2 ffffff81534820
      6 247
     25 180</strong>

    100    0xffffffffffffffff 
      1     thread_group_cputime 
     27     sysenter_dispatch 
      3     ia32_sysret 
      1      task_sched_runtime 
     27      sys32_pread 
      1      compat_sys_io_submit 
      2      compat_sys_io_getevents 
     27       sys_pread64 
      2       sys_io_getevents 
      1       do_io_submit 
     27        vfs_read 
      2        read_events 
      1        io_submit_one 
     27         do_sync_read 
      1         aio_run_iocb 
     27          generic_file_aio_read 
      1          aio_rw_vect_retry 
     27           generic_file_read_iter 
      1           generic_file_aio_read 
     27            mapping_direct_IO 
      1            generic_file_read_iter 
     27             blkdev_direct_IO 
     27              __blockdev_direct_IO 
     27               do_blockdev_direct_IO 
     27                dio_post_submission 
     27                 dio_await_completion 
      6                  blk_flush_plug_list</pre>
<p>This gives you a very rough sample of where in kernel this process spent its time &#8211; if at all. The system call numbers are separated, in bold, above &#8211; &#8220;running&#8221; means that this process was in userland (not in a system call) during the sample. So, 69% of the time during the sampling, this process was running userland code. 25% of time in syscall #180 (nfsservctl on my system) and 6% in syscall #247 (waitid).</p>
<p>There are two more &#8220;functions&#8221; seen in this output &#8211; but for some reason they haven&#8217;t been properly translated to a function name. Well, this address must stand for something, so let&#8217;s try our luck manually:</p>
<pre>[root@oel6 ~]# cat /proc/<strong>kallsyms</strong> | grep -i <strong>ffffff81534c83</strong>
ffffffff81534c83 t ia32_sysret</pre>
<p>So it looks that these samples are about a 32-bit architecture-compatible system call return function &#8211; but as this function isn&#8217;t a system call itself (just an internal helper function), perhaps that&#8217;s why the /proc/stack routine didn&#8217;t translate it. Perhaps these addresses show up because there&#8217;s no &#8220;read consistency&#8221; on the /proc views, when owning threads modify these memory structures and entries, the reading threads may sometimes read data &#8220;in-flux&#8221;.</p>
<p>Let&#8217; check the other address too:</p>
<pre>[root@oel6 ~]# cat /proc/kallsyms | grep -i ffffff81534820
[root@oel6 ~]#</pre>
<p>Nothing? Well, the troubleshooting doesn&#8217;t have to stop yet &#8211; let&#8217;s see if there&#8217;s anything interesting around that address. I just removed a couple of trailing characters from the address:</p>
<pre>[root@oel6 ~]# cat /proc/kallsyms | grep -i ffffff815348 
ffffffff8153480d t sysenter_do_call
<strong>ffffffff81534819 t sysenter_dispatch
</strong>ffffffff81534847 t sysexit_from_sys_call
ffffffff8153487a t sysenter_auditsys
ffffffff815348b9 t sysexit_audit</pre>
<p>Looks like the sysenter_dispatch function starts just 1 byte before the original address displayed by /proc/PID/stack. So we had possibly already executed the one byte (possibly a NOP operation left in there for dynamic tracing probe traps). But nevertheless, looks like these stack samples were in the <code>sysenter_dispatch</code> function, which isn&#8217;t a system call itself, but a system call helper function.</p>
<h4>More about stack profilers</h4>
<p>Note that there are different types of stack samplers &#8211; the Linux Perf, Oprofile tools and Solaris DTrace&#8217;s <code>profile</code> provider do sample the instruction pointer (EIP on 32bit intel or RIP on x64) and stack pointer (ESP on 32bit and RSP on 64bit) registers of the currently running thread on CPU and walk the stack pointers backwards from there. Therefore, these tools only show threads which happen to be on CPU when sampling!!! This is of course perfect, when troubleshooting high CPU utilization issues, but not useful at all when troubleshooting hung processes or too long process sleeps/waits.</p>
<p>Tools like pstack on Linux,Solaris,HP-UX, procstack (on AIX), ORADEBUG SHORT_STACK and just reading the /proc/PID/stack pseudofile provide a good addition (not replacement) to the CPU profiling tools &#8211; as they access the probed process memory regardless of their CPU scheduling state and read the stack from there. If the process is sleeping, not on CPU, the starting point of the stack can be read from the stored context &#8211; which is saved to kernel memory by OS scheduler during the context switch.</p>
<p>Of course, the CPU event profiling tools can often do much more than just a pstack, OProfile, Perf and even DTrace&#8217;s CPC provider (in Solaris11) can set up and sample CPU internal performance counters to estimate things like the amount of CPU cycles stalled waiting for main memory, amount of L1/L2 cache misses, etc. Better read what Kevin Closson has to say on these topics: (<a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2tldmluY2xvc3Nvbi53b3JkcHJlc3MuY29tLzIwMTMvMDIvMTgvdXNpbmctbGludXgtcGVyZjEtdG8tYW5hbHl6ZS1kYXRhYmFzZS1wcm9jZXNzZXMtcGFydC1pLw==" target=\"_blank\">Perf</a>, <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2tldmluY2xvc3Nvbi53b3JkcHJlc3MuY29tLzIwMDYvMTIvMTQvdXNpbmctb3Byb2ZpbGUtdG8tbW9uaXRvci1rZXJuZWwtb3ZlcmhlYWQtb24tbGludXgtcnVubmluZy1vcmFjbGUv" target=\"_blank\">Oprofile</a>)</p>
<p>Enjoy :-)</p>
 <img src="http://blog.tanelpoder.com/?feed-stats-post-id=1896" width="1" height="1" style="display: none;" /><div class="crp_related"><h4>Related Posts</h4><ul><li><a href="http://blog.tanelpoder.com/2011/02/28/finding-oracle-homes-with/"     class="crp_title">Finding Oracle Homes which Oracle instances are using on&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2011/03/13/oracle-exadata-performance-series-part-1-should-i-use-hugepages-on-linux-database-nodes/"     class="crp_title">Oracle Exadata Performance series &#8211; Part 1: Should I&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2011/11/13/evil-things-are-happening-in-oracle/"     class="crp_title">Evil things are happening in Oracle</a></li><li><a href="http://blog.tanelpoder.com/2010/11/23/asynch-descriptor-resize-wait-event-in-oracle/"     class="crp_title">Asynch descriptor resize wait event in Oracle</a></li><li><a href="http://blog.tanelpoder.com/2013/02/14/troubleshooting-high-cpu-usage-with-poor-mans-stack-profiler-in-a-one-liner/"     class="crp_title">Troubleshooting high CPU usage with poor-man&#8217;s stack&hellip;</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2013/02/21/peeking-into-linux-kernel-land-using-proc-filesystem-for-quickndirty-troubleshooting/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Even more Snapper &#8211; v4.03 now works in SQL Developer too!</title>
		<link>http://blog.tanelpoder.com/2013/02/18/even-more-snapper-v4-03-now-works-in-sql-developer-too/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=even-more-snapper-v4-03-now-works-in-sql-developer-too</link>
		<comments>http://blog.tanelpoder.com/2013/02/18/even-more-snapper-v4-03-now-works-in-sql-developer-too/#comments</comments>
		<pubDate>Mon, 18 Feb 2013 23:21:54 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/?p=1890</guid>
		<description><![CDATA[If you already downloaded snapper v4, then better re-download it again as the v4.03 also runs in SQL Developer! You might also want to check how to enable the DBMS_OUTPUT display in SQL Developer post by &#8220;That&#8221; Jeff Smith :-) Update: Niall Litchfield pointed out that the &#8220;set serverout on&#8221; command was ignored on SQL Developer because [...]<div class="crp_related"><h4>Related Posts</h4><ul><li><a href="http://blog.tanelpoder.com/2011/03/29/moats-the-mother-of-all-tuning-scripts/"     class="crp_title">MOATS: The Mother of All Tuning Scripts!</a></li><li><a href="http://blog.tanelpoder.com/2013/02/18/snapper-v4-02-and-the-snapper-launch-party-video/"     class="crp_title">Snapper v4.02 and the Snapper launch party video</a></li><li><a href="http://blog.tanelpoder.com/2013/02/10/session-snapper-v4-the-worlds-most-advanced-oracle-troubleshooting-script/"     class="crp_title">Session Snapper v4 &#8211; The World&#8217;s Most Advanced&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2013/02/22/exasnapper-0-7-beta-download-and-the-hacking-session-videos/"     class="crp_title">ExaSnapper 0.7 beta download and the hacking session videos</a></li><li><a href="http://blog.tanelpoder.com/2011/01/09/snapper-3-52-with-oracle-9-2-support-2/"     class="crp_title">Snapper 3.52 &#8211; With Oracle 9.2 support!</a></li></ul></div>]]></description>
				<content:encoded><![CDATA[<p>If you already downloaded snapper v4, then better <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vZmlsZXMvc2NyaXB0cy9zbmFwcGVyNC5zcWw=" target=\"_blank\">re-download it again</a> as the v4.03 also runs in SQL Developer!</p>
<p><a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTMvMDIvU2NyZWVuLVNob3QtMjAxMy0wMi0xOS1hdC0xLjAyLjEzLUFNLnBuZw=="><img class="alignnone size-full wp-image-1891" alt="Snapper 4 inside SQL Developer" src="http://blog.tanelpoder.com/wp-content/uploads/2013/02/Screen-Shot-2013-02-19-at-1.02.13-AM.png" width="1029" height="917" /></a></p>
<p>You might also want to check <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL3d3dy50aGF0amVmZnNtaXRoLmNvbS9hcmNoaXZlLzIwMTIvMDUvZW5hYmxpbmctZGJtc19vdXRwdXQtYnktZGVmYXVsdC1pbi1zcWwtZGV2ZWxvcGVyLw==" target=\"_blank\">how to enable the DBMS_OUTPUT display in SQL Developer</a> post by &#8220;That&#8221; Jeff Smith :-)</p>
<p><em><strong>Update:</strong> <a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL3R3aXR0ZXIuY29tL25saXRjaGZpZWxk" target=\"_blank\">Niall Litchfield</a> pointed out that the &#8220;set serverout on&#8221; command was ignored on SQL Developer because I was using the short syntax (server<strong>out</strong> instead of server<strong>output</strong>). Once I changed this, the SQL Developer doesn&#8217;t print the warning anymore and there&#8217;s no need to explicitly open up the separate DBMS_OUTPUT. I have uploaded Snapper v4.04 with this fix included. Thanks Niall!</em></p>
<p>Also, thanks go to:</p>
<ul>
<li><a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL3d3dy5saW5rZWRpbi5jb20vcHViL2hhbnMtcGV0ZXItc2xvb3QvYS83ODkvYjIw" target=\"_blank\">Hans-Peter Sloot</a> &#8211; for building the first cut of RAC support into a previous Snapper version</li>
<li><span style="line-height: 13px;"><a href="http://blog.tanelpoder.com/?feed-stats-url=aHR0cDovL3JvbnIuYmxvZ3Nwb3QuY29tLw==" target=\"_blank\">Ronald Rood</a> &#8211; for adding the customizations for SQL Developer support into a previous Snapper version</span></li>
</ul>
<p>Note that the manual before/after snapshots don&#8217;t work inside SQL Developer right now, will try to fix this later &#8230;</p>
 <img src="http://blog.tanelpoder.com/?feed-stats-post-id=1890" width="1" height="1" style="display: none;" /><div class="crp_related"><h4>Related Posts</h4><ul><li><a href="http://blog.tanelpoder.com/2011/03/29/moats-the-mother-of-all-tuning-scripts/"     class="crp_title">MOATS: The Mother of All Tuning Scripts!</a></li><li><a href="http://blog.tanelpoder.com/2013/02/18/snapper-v4-02-and-the-snapper-launch-party-video/"     class="crp_title">Snapper v4.02 and the Snapper launch party video</a></li><li><a href="http://blog.tanelpoder.com/2013/02/10/session-snapper-v4-the-worlds-most-advanced-oracle-troubleshooting-script/"     class="crp_title">Session Snapper v4 &#8211; The World&#8217;s Most Advanced&hellip;</a></li><li><a href="http://blog.tanelpoder.com/2013/02/22/exasnapper-0-7-beta-download-and-the-hacking-session-videos/"     class="crp_title">ExaSnapper 0.7 beta download and the hacking session videos</a></li><li><a href="http://blog.tanelpoder.com/2011/01/09/snapper-3-52-with-oracle-9-2-support-2/"     class="crp_title">Snapper 3.52 &#8211; With Oracle 9.2 support!</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2013/02/18/even-more-snapper-v4-03-now-works-in-sql-developer-too/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
	</channel>
</rss>
