<?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 &#187; Troubleshooting</title>
	<atom:link href="http://blog.tanelpoder.com/tag/troubleshooting/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tanelpoder.com</link>
	<description>Oracle, Exadata, Performance, Troubleshooting - Mobile Life and Productivity.</description>
	<lastBuildDate>Thu, 02 Feb 2012 21:38:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>What the heck is the SQL Execution ID &#8211; SQL_EXEC_ID?</title>
		<link>http://blog.tanelpoder.com/2011/10/24/what-the-heck-is-the-sql-execution-id-sql_exec_id/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=what-the-heck-is-the-sql-execution-id-sql_exec_id</link>
		<comments>http://blog.tanelpoder.com/2011/10/24/what-the-heck-is-the-sql-execution-id-sql_exec_id/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 20:55:29 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Internals]]></category>
		<category><![CDATA[Oracle 11g]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Troubleshooting]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/2011/10/24/what-the-heck-is-the-sql-execution-id-sql_exec_id/</guid>
		<description><![CDATA[Ok, I think it&#8217;s time to write another blog entry. I&#8217;ve been traveling and dealing with jetlag from 10-hour time difference, then traveling some more, spoken at conferences, drank beer, had fun, then traveled some more, trained customers, hacked some Exadatas and now I&#8217;m back home. Anyway, do you know what is the SQL_EXEC_ID in [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, I think it&#8217;s time to write another blog entry. I&#8217;ve been traveling and dealing with jetlag from 10-hour time difference, then traveling some more, spoken at conferences, drank beer, had fun, then traveled some more, trained customers, hacked some Exadatas and now I&#8217;m back home.</p>
<p>Anyway, do you know what is the SQL_EXEC_ID in V$SESSION and ASH views?</p>
<p>Oh yeah, it&#8217;s the &#8220;SQL Execution ID&#8221; just like the <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Rvd25sb2FkLm9yYWNsZS5jb20vZG9jcy9jZC9FMTQwNzJfMDEvc2VydmVyLjExMi9lMTA4MjAvZHludmlld3NfMzAxNi5odG0jcjI5YzEtdDE5" target=\"_blank\">documentation says</a> &#8230; all clear. Um &#8230; is it? I&#8217;d like to know more about it &#8211; what does it actually stand for?! Is it session level, instance level or a RAC-global counter? And why does it start from 16 million, not 1?</p>
<p>&nbsp;</p>
<pre>SQL&gt; SELECT sql_exec_id FROM v$session WHERE sid = USERENV('SID');

SQL_EXEC_ID
-----------
   16777216
</pre>
<p>&nbsp;</p>
<p>This number <strong>16777216</strong> looks strangely familiar &#8211; indeed, it&#8217;s <strong>2^24</strong>.</p>
<p>When I run the same query again (incrementing the SQL_EXEC_ID counter for the same SQL), I see the counter going up by 1:</p>
<p>&nbsp;</p>
<pre>SQL&gt; SELECT sql_exec_id FROM v$session WHERE sid = USERENV('SID');

SQL_EXEC_ID
-----------
   1677721<strong>7</strong>

SQL&gt; SELECT sql_exec_id FROM v$session WHERE sid = USERENV('SID');

SQL_EXEC_ID
-----------
   16777218

SQL&gt; SELECT sql_exec_id FROM v$session WHERE sid = USERENV('SID');

SQL_EXEC_ID
-----------
   16777219

SQL&gt; SELECT sql_exec_id FROM v$session WHERE sid = USERENV('SID');

SQL_EXEC_ID
-----------
   16777220
</pre>
<p>&nbsp;</p>
<p>Further executions of the same query keep incrementing this counter, one by one &#8211; even if I run this same SQL from another session in the same instance. So, this SQL_EXEC_ID is not a session-scope value for each SQL_ID, it&#8217;s at least instance-wide. It looks like the counting starts from 2^24 (the bit representing 2^24 is set) and ignoring that bit for now, the counting works normally, one by one, <em>starting from zero</em>.</p>
<p>&nbsp;</p>
<p>Note that changing even a single character in the SQL text (see the extra space in the end before the semi-colon) causes the SQL_ID to change and a different SQL_EXEC_ID counter to be reported (which starts from &#8220;zero&#8221; again). A separate SQL_EXEC_ID counter is maintained in shared pool for each SQL_ID:</p>
<pre>SQL&gt; SELECT sql_exec_id FROM v$session WHERE sid = USERENV('SID') ;

SQL_EXEC_ID
-----------
   16777216
</pre>
<p>&nbsp;</p>
<p>So, obviously, when I have just restarted my instance and still see&nbsp;16777216 as the starting SQL_EXEC_ID&nbsp;for any SQL I execute, it must mean that the full SQL_EXEC_ID value contains something else than just the execution number of this SQL_ID. Whenever I see such familiar values (like powers of 2), then I like to look into the values in hex format to see whether some higher order bits are used for some special purpose. Let&#8217;s run a new SQL statement:</p>
<p>&nbsp;</p>
<pre>SQL&gt; SELECT sql_exec_id, TO_CHAR(sql_exec_id,'XXXXXXXX') hex FROM v$session WHERE sid = USERENV('SID') ;

SQL_EXEC_ID HEX
----------- ---------
   16777216   <strong>1</strong>000000

SQL&gt; SELECT sql_exec_id, TO_CHAR(sql_exec_id,'XXXXXXXX') hex FROM v$session WHERE sid = USERENV('SID') ;

SQL_EXEC_ID HEX
----------- ---------
   16777217   <strong>1</strong>000001

SQL&gt; SELECT sql_exec_id, TO_CHAR(sql_exec_id,'XXXXXXXX') hex FROM v$session WHERE sid = USERENV('SID') ;

SQL_EXEC_ID HEX
----------- ---------
   16777218   <strong>1</strong>000002
</pre>
<p>&nbsp;</p>
<p>Indeed, it looks like the 25th bit (2^24) is always pre-set to 1, while the least significant 24 bits represent how many times this SQL ID has been executed in an instance (I have tested this with a loop &#8211; the 24 least significant bits do get used fully for representing the SQL ID&#8217;s execution count in the instance and once it reaches 0xFFFFFF &#8211; or 0x1FFFFFF with that pre-set 25th bit, it wraps to 0&#215;1000000 &#8211; the 25th bit still remaining set!). So the SQL_EXEC_ID can reliably only track 2^24 &#8211; 1 SQL executions in an instance and then the counter wraps to beginning. This is why you should include SQL_EXEC_START (date datatype with 1 sec precision) column in your performance monitoring queries as well, to distinguish between SQL executions with a colliding SQL_EXEC_ID. As long as you&#8217;re executing your SQL statement less than 16.7 million times per second per instance, this should be fine :-)</p>
<p>&nbsp;</p>
<p>Anyway, so what&#8217;s the magic 25th bit then? Well, in RAC it would be very hard to somehow coordinate the incrementing of a single counter globally (that&#8217;s why you want to keep your sequences cached in RAC), I figure that there are different counters for the same SQL ID in different RAC instances. Let&#8217;s check &#8211; I will log in to another RAC node (node 2) and run this:</p>
<p>&nbsp;</p>
<pre>SQL&gt; SELECT sql_exec_id, TO_CHAR(sql_exec_id,'XXXXXXXX') hex FROM v$session WHERE sid = USERENV('SID') ;

SQL_EXEC_ID HEX
----------- ---------
   33554433   <strong>2</strong>000001

SQL&gt; SELECT sql_exec_id, TO_CHAR(sql_exec_id,'XXXXXXXX') hex FROM v$session WHERE sid = USERENV('SID') ;

SQL_EXEC_ID HEX
----------- ---------
   33554434   <strong>2</strong>000002

SQL&gt; SELECT sql_exec_id, TO_CHAR(sql_exec_id,'XXXXXXXX') hex FROM v$session WHERE sid = USERENV('SID') ;

SQL_EXEC_ID HEX
----------- ---------
   33554435   <strong>2</strong>000003
</pre>
<p>&nbsp;</p>
<p>Whoa &#8211; the SQL Execution ID in the 2nd instance starts from 33 Million! And when you convert the value to hex, you&#8217;ll see that now the 26th bit is set &#8211; showing that this SQL was executed in instance #2!</p>
<p>So, it very much looks like that while the 24 least significant bits are used for the SQL execution ID counter, the more significant bits are used for showing which instance_id ran that SQL. Assuming that 32 bits are used for the whole SQL_EXEC_ID value, then up to 8 higher order bits could be used for storing the instance_id &#8211; supporting up to 256-node RAC clusters. This is very useful when analyzing past ASH data as you can aggregate data (count min/max exec ID difference to get the execution counts in a time range) either in each separate instance or globally &#8211; by stripping out the instance_id part from the value.</p>
<p>I haven&#8217;t tested the instance_id part with 256-node RAC clusters (as Santa Claus is cutting back due to poor economy), but at least on an 8-node full rack Exadata all 8 instance_ids were reported properly. Note that for serial queries, the SQL_EXEC_ID shows you the instance_id of the instance where the session is logged on to, but for inter-instance parallel query, you will see the instance_id of the <em>query coordinator</em> for all PX slaves, regardless of in which instances they run. Here&#8217;s a little script from a 8-node Exadata cluster to show it. I&#8217;ll leave it up to you to fully figure it out what, how and why it&#8217;s doing, but basically what it shows is that the SQL_EXEC_ID consists of the <em>query coordinator&#8217;s</em> instance_id value and the execution number for a SQL_ID in the instance where the query coordinator session was logged in:</p>
<p>&nbsp;</p>
<pre>SQL&gt; SELECT qc_instance_id, MIN(TO_CHAR(sql_exec_id,'XXXXXXXX'))
  2  , MAX(TO_CHAR(sql_exec_id,'XXXXXXXX'))
  3* FROM gv$active_session_history GROUP BY qc_instance_id order by 1
SQL&gt; /

QC_INSTANCE_ID MIN(TO_CH MAX(TO_CH
-------------- --------- ---------
             1   1000000   100540F
             2   2000000   20009BF
             3   3000000   300541E
             4   4000000   40000DD
             5   5000000   50C5035
             6   6000000   600018C
             7   7000000   700023D
             8   8000000   8000755
                 1000000   803DF3B

9 rows selected.
</pre>
<p>&nbsp;</p>
<p>That&#8217;s all for today &#8211; more cool stuff is coming, I promise :-)</p>
<p>&nbsp;</p>
<p>And oh, next week I&#8217;ll start another run of my <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vc2VtaW5hci8=" target=\"_blank\">Advanced Oracle Troubleshooting seminar</a>, so check it out! ;-)</p>
 <img src="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1518" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2011/10/24/what-the-heck-is-the-sql-execution-id-sql_exec_id/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>V8 Bundled Exec call &#8211; and Oracle Program Interface (OPI) calls</title>
		<link>http://blog.tanelpoder.com/2011/08/23/v8-bundled-exec-call-and-oracle-program-interface-opi-calls/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=v8-bundled-exec-call-and-oracle-program-interface-opi-calls</link>
		<comments>http://blog.tanelpoder.com/2011/08/23/v8-bundled-exec-call-and-oracle-program-interface-opi-calls/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 13:13:23 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Cool stuff]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Internals]]></category>
		<category><![CDATA[Oracle 11gR2]]></category>
		<category><![CDATA[Troubleshooting]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/2011/08/23/v8-bundled-exec-call-and-oracle-program-interface-opi-calls/</guid>
		<description><![CDATA[So, what he hell is that V8 Bundled Exec call which shows up in various Oracle 11g monitoring reports?! It&#8217;s yet another piece of instrumentation which can be useful for diagnosing non-trivial performance problems. Oracle ASH has allowed us to measure what is the top wait event or top SQLID for a long time, but [...]]]></description>
			<content:encoded><![CDATA[<p>So, what he hell is that <strong>V8 Bundled Exec call</strong> which shows up in various Oracle 11g monitoring reports?!</p>
<p>It&#8217;s yet another piece of instrumentation which can be useful for diagnosing non-trivial performance problems. Oracle ASH has allowed us to measure what is the top wait event or top SQLID for a long time, but now it&#8217;s also possible to take a step back and see what <em>type of operation</em>&nbsp;the database session is servicing.&nbsp;</p>
<p>I am talking about Oracle Program Interface (OPI) calls. Basically for each OCI call in the client side (like , OCIStmtExecute, OCIStmtFetch, etc) there&#8217;s a corresponding server side OPI function (like opiexe(), opifch2() etc).&nbsp;</p>
<p>It has been possible to trace all the OPI calls with event 10051 as I&#8217;ve explained <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vMjAxMS8wMy8yMC9sb2JyZWFkLXNxbC10cmFjZS1lbnRyeS1pbi1vcmFjbGUtMTEtMi8=" target=\"_blank\">here</a>, but since Oracle 11g this data is also conveniently accessible from ASH views (the various monitoring reports, including SQL Monitoring report also use ASH data for some features).</p>
<p>So, I can write a simple query against ASH, which doesn&#8217;t group the samples by wait event or SQL<em>ID, but just by the general OPI call type (TOP</em>LEVEL<em>CALL</em>NAME column) and also by the SQL command type (using V$SQLCOMMAND in 11.2): &nbsp;</p>
<pre>SQL&gt; SELECT
  2      a.top_level_call#
  3    , a.<strong>top_level_call_name</strong>
  4    , a.top_level_sql_opcode
  5    , s.command_name
  6    , COUNT(*)
  7  FROM
  8      v$active_session_history a
  9    , v$sqlcommand s
 10  WHERE
 11      a.top_level_sql_opcode = s.command_type
 12  GROUP BY
 13      a.top_level_call#
 14    , a.top_level_call_name
 15    , a.top_level_sql_opcode
 16    , s.command_name
 17  ORDER BY
 18*     COUNT(*) DESC
 19  /

TOP_LEVEL_CALL# TOP_LEVEL_CALL_NAME     top_op# COMMAND_NAME                     COUNT(*)
--------------- -------------------- ---------- ------------------------------ ----------
             94 <strong>V8 Bundled Exec</strong>               7 <strong>DELETE</strong>                              10505
              0                               0                                      4041
             59 VERSION2                      0                                       579
             59 VERSION2                     47 PL/SQL EXECUTE                        377
             59 VERSION2                      3 SELECT                                191
             96 LOB/FILE operations         170 CALL METHOD                            67
             59 VERSION2                    170 CALL METHOD                            66
             94 <strong>V8 Bundled Exec</strong>               6 <strong>UPDATE</strong>                                 52
             59 VERSION2                      6 UPDATE                                 41
             59 VERSION2                      7 DELETE                                 36
             94 <strong>V8 Bundled Exec</strong>               3 <strong>SELECT</strong>                                 24
             96 LOB/FILE operations          47 PL/SQL EXECUTE                         18
             59 VERSION2                      2 INSERT                                  8
             94 <strong>V8 Bundled Exec</strong>               1 CREATE TABLE                            5
              0                               3 SELECT                                  3
             59 VERSION2                     15 ALTER TABLE                             1
             96 LOB/FILE operations           0                                         1
             59 VERSION2                     12 DROP TABLE                              1
              5 FETCH                         3 SELECT                                  1
             94 <strong>V8 Bundled Exec</strong>              12 DROP TABLE                              1

20 rows selected.
</pre>
<p>&nbsp;</p>
<p>Aas you see above, most of the ASH samples in my test database have been created by a DELETE type SQL statement, executed via <strong>V8 Bundled Exec</strong> type of an OPI call.</p>
<p>So, what is this call about? Let&#8217;s explain its name. Look into other call types in the above output. In the bottom you see a FETCH call (fetching from a SELECT type statement). Also there are a few LOB/FILE operations calls, which are used exclusively for accessing LOB data (via LOB locator, bypassing the usual SQL processing layer).</p>
<p>In Oracle 7 you would also see PARSE and EXECUTE calls, but starting from Oracle 8 not anymore. This is because starting from Oracle 8, the OPI layer in database side can accept bundled OCI calls from the client &#8211; to reduce the number of network roundtrips. So, basically instead of sending the PARSE and EXEC requests in separate SQL<em>Net roundtrips (increasing the latency), the OCI client libraries can bundle these requests together and send them to database in one SQL</em>Net payload. The database server side understands it and is able to extract these separate OPI requests from the bundled packet (in right order) and execute the corresponding OPI function for each separate call.&nbsp;</p>
<p>Note that this is why you frequently see the <strong>kpoal8()</strong> function close to the beginning in Oracle server process stack traces (and where I usually start reading them from), this is the function which processes all the OPI requests sent to it in a bundled package. So, whenever there&#8217;s a OCIStmtExecute() call extracted from the bundle, the <strong>opiexe()</strong> function is called in Oracle kernel with appropriate arguments extracted from the same bundle. Whenever we extract an OCIStmtFetch2() call from the bundle, the corresponding <strong>opifch2()</strong> function is called in the kernel.</p>
<p>Hopefully this explains why is there such a call &#8220;V8 Bundled Exec&#8221; in Oracle. It just allows to reduce client &#8211; server communication latency by allowing to bundle multiple database requests together into a single SQL*Net payload. In other words, it&#8217;s just how Oracle works and it&#8217;s <em>perfectly normal </em>to see V8 Bundled Exec as the top OPI call type in performnace reports. If you see this OPI call as the top one, then you&#8217;d need to drill down into what&#8217;s the actual SQLID which consumes the most of the response time (and further breakdown like which wait event and execution plan step takes the most time).</p>
<p>But the ability of breaking down database response time by OPI call becomes much more useful when troubleshooting somewhat more exotic performance problems like LOB access times (where there&#8217;s no SQL statement associated with the database call) or other direct OPI calls which are executed without parsing and running a SQL cursor.</p>
<p>For example, have you noticed that the behavior of ROLLBACK command in sqlplus is different from the shorter ROLL command?</p>
<p>When you issue a ROLLBACK, then Oracle will actually send the string &#8220;ROLLBACK&#8221; to the database as a regular SQL statement (using V8 Bundled Exec), it will be parsed there (with all the latching and shared pool overhead) as regular SQL &#8211; and then Oracle realizes that the command in it is a rollback. Then rollback is performed.</p>
<p>But if you issue a ROLL command, then sqlplus understands it and doesn&#8217;t send it to the database for parsing like a regular SQL statement. Instead it will send an OCITransRollback() call, which will call the corresponding OPI function directly, bypassing the SQL processing layer completely. Instead of the usual &#8220;V8 Bundled Exec&#8221; bundle call you would see a &#8220;Transaction Commit/Rollback&#8221; OPI call as it was called directly, without any SQL statement processing involved. This is why you sometimes see <strong>WAIT#0 </strong>lines in SQL<em>Trace, where the waits seem to be associated with some non-existent cursor #0. Whenever the wait happens when the database session is servicing an OPI call which bypasses the SQL processing layer (kks/kkx modules) then the SQL</em>Trace just shows cursor#0 as the wait&#8217;s &#8220;owner&#8221;.</p>
<p>The same happens when using things like <em>connection.commit()</em> in JDBC, the client does not send a SQL statement with text &#8220;commit&#8221; into the datbase, but rather will call out the OPI commit function out directly.</p>
<p>So, how many different OPI calls are there? Well, a lot, as you can see from <strong>v$toplevelcall</strong> (or its underlying <strong>x$orafn</strong>) in Oracle 11.2:</p>
<p>&nbsp;</p>
<pre>SQL&gt; SELECT * FROM <strong>v$toplevelcall</strong>;

TOP_LEVEL_CALL# TOP_LEVEL_CALL_NAME
--------------- ----------------------------------------------------------------
              0
              2 OPEN
              3 PARSE
              4 EXECUTE
              5 FETCH
              8 CLOSE
              9 LOGOFF
             10 DESCRIBE
             11 DEFINE
             12 COMMIT ON
             13 COMMIT OFF
             14 COMMIT
             15 ROLLBACK
             16 SET OPTIONS
             17 RESUME
             18 VERSION
             20 CANCEL
             21 GET ERR MSG
             23 SPECIAL
             24 ABORT
             25 DEQ ROW
             26 FETCH LONG
             31 HOW MANY
             32 INIT
             33 CHANGE USER
             34 BIND REF POS
             35 GET BIND VAR
             36 GET INTO VAR
             37 BINDV REF
             38 BINDN REF
             39 PARSE EXE
             40 PARSE SYNTAX
             41 PARSE SYNSDI
             42 CONTINUE
             43 ARRAY DESC
             44 INIT PARS
             45 FIN PARS
             46 PUT PAR
             48 START ORACLE
             49 STOP ORACLE
             50 RUN IND PROC
             52 ARCHIVE OP
             53 MED REC STRT
             54 MED REC TABS
             55 MED REC GETS
             56 MED REC RECL
             57 MED REC CANC
             58 LOGON
             59 VERSION2
             60 INIT
             62 EVERYTHING
             65 DIRECT LOAD
             66 UL BUFFER XMIT
             67 DISTRIB XACTION
             68 DESCRIBE INDEXES
             69 SESSION OPS
             70 EXEC w/SCN
             71 FAST UPI
             72 FETCH LONG
             74 V7 PARSE
             76 PL/SQL RPC
             78 EXEC &amp; FCH
             79 XA OPS
             80 KGL OP
             81 LOGON
             82 LOGON
             83 Streaming op
             84 SES OPS (71)
             85 XA OPS (71)
             86 DEBUG
             87 DEBUGS
             88 XA XA Start
             89 XA XA Commit
             90 XA XA Prepare
             91 x/import
             92 KOD OP
             93 RPI Callback with ctxdef
             94 V8 Bundled Exec
             95 Streaming op
             96 LOB/FILE operations
             97 FILE Create
             98 V8 Describe Query
             99 Connect
            100 OPEN Recursive
            101 Bundled KPR
            102 Bundled PL/SQL
            103 Transaction Start/End
            104 Transaction Commit/Rollback
            105 Cursor close all
            106 Failover session info
            107 SES OPS (80)
            108 Do Dummy Defines
            109 INIT V8 PARS
            110 FIN V8 PARS
            111 PUT V8 PAR
            112 TERM V8 PARS
            114 INIT UNTR CB
            115 OAUTH
            116 Failover get info
            117 Commit Remote Sites
            118 OSESSKEY
            119 V8 Describe Any
            120 Cancel All
            121 Enqueue
            122 Dequeue pre 8.1
            123 Object Transfer
            124 RFS op
            125 Notification
            126 Listen
            127 Commit Remote Sites &gt;= V813
            128 DirPathPrepare
            129 DirPathLoadStream
            130 DirPathMiscOps
            131 MEMORY STATS
            132 AQ Prop Status
            134 remote Fetch Archive Log (FAL)
            135 Client ID propagation
            136 DR Server CNX Process
            138 SPFILE parameter put
            139 KPFC exchange
            140 V82 Object Transfer
            141 Push transaction
            142 Pop transaction
            143 KFN Operation
            144 DirPathUnloadStream
            145 AQ batch enqueue/dequeue
            146 File transfer
            147 PING
            148 TSM
            150 Begin TSM
            151 End TSM
            152 Set schema
            153 Fetch from suspended result-set
            154 Key value pair
            155 XS Create Session Op
            156 XS Session RoundtripOp
            157 XS Piggyback Oper.
            158 KSRPC Execution
            159 Streams combined capture/apply
            160 AQ replay information
            161 SSCR
            162 OSESSGET
            163 OSESSRLS
            165 workload replay data
            166 replay statistic data
            167 Query Cache Stats
            168 Query Cache IDs
            169 RPC Test Stream
            170 replay plsql rpc
            171 XStream Out
            172 Golden Gate RPC

151 rows selected.
</pre>
<p>&nbsp;</p>
<p>A lot of calls &#8230; special stuff (like DESCRIBE) which will bypass the SQL layer completely (but may in turn invoke further recursive SQL statements through the Recursive Program Interface &#8211; RPI).</p>
<p>Ok, time to stop &#8211; if you want to learn more, enable SQL trace with waits &amp; binds and event 10051 at level 1 in your test database and try to describe a table or read some LOB columns for example!</p>
<p>&nbsp;</p>
 <img src="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1511" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2011/08/23/v8-bundled-exec-call-and-oracle-program-interface-opi-calls/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Full scans, direct path reads and ORA-8103 error hacking session video here (plus iTunes podcast address!)</title>
		<link>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/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=full-scans-direct-path-reads-and-ora-8103-error-hacking-session-video-here-plus-itunes-podcast-address-2</link>
		<comments>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/#comments</comments>
		<pubDate>Thu, 11 Aug 2011 17:35:46 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Internals]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Troubleshooting]]></category>

		<guid isPermaLink="false">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/</guid>
		<description><![CDATA[I have uploaded the latest hacking session video to blip.tv. I have edited it a little, I cut out the part where I spilled an entire Red Bull onto my desk, with some onto my laptop (some keys are still sticky:) Also, I do upload all these sessins into iTunes &#8211; so you can subscribe [...]]]></description>
			<content:encoded><![CDATA[<p>I have uploaded the latest hacking session video to blip.tv. I have edited it a little, I cut out the part where I spilled an entire Red Bull onto my desk, with some onto my laptop (some keys are still sticky:)</p>
<p>Also, I do upload all these sessins into iTunes &#8211; so you can subscribe to my podcast! That way you can download the videos into your computer, phone or iPad. I have deliberately used 1024&#215;768 resolution so it would look awesome on iPad screen! (so hopefully your commute time gets a bit more fun now ;-)</p>
<p>&nbsp;</p>
<p>Enjoy!</p>
<p><strong>iTunes video-podcast:</strong></p>
<ul>
<li><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2JpdC5seS9xbmYwZmQ=" target=\"_blank\">http://bit.ly/qnf0fd</a></li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><embed type="application/x-shockwave-flash" width="512" height="399" src="http://blip.tv/play/AYLNmlEA" allowfullscreen="true" allowscriptaccess="always" wmode="transparent"></embed></p>
 <img src="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1507" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>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/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Training Schedule for 2011 and Public Appearances</title>
		<link>http://blog.tanelpoder.com/2011/07/28/training-schedule-for-2011-and-public-appearances/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=training-schedule-for-2011-and-public-appearances</link>
		<comments>http://blog.tanelpoder.com/2011/07/28/training-schedule-for-2011-and-public-appearances/#comments</comments>
		<pubDate>Thu, 28 Jul 2011 19:01:21 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Cool stuff]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Internals]]></category>
		<category><![CDATA[Oracle 11gR2]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Training]]></category>
		<category><![CDATA[Troubleshooting]]></category>
		<category><![CDATA[Tuning]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/2011/07/28/training-schedule-for-2011-and-public-appearances/</guid>
		<description><![CDATA[Online Seminars A lot of people have asked me about whether I&#8217;d be doing any more seminars in the future. And the answer is yes &#8211; at least this year (might be too busy running a company the next year ;-) I have finally put together the schedule for my 2011 seminars. In addition to [...]]]></description>
			<content:encoded><![CDATA[<div><strong>Online Seminars</strong></div>
<div></div>
<div></div>
<div>A lot of people have asked me about whether I&#8217;d be doing any more seminars in the future. And the answer is yes &#8211; at least this year (might be too busy running a company the next year ;-)</div>
</p>
<div></div>
<div>I have finally put together the schedule for my 2011 seminars. In addition to the Advanced Oracle Troubleshooting seminar I will also deliver my Advanced Oracle SQL Tuning and Oracle Partitioning and Parallel Execution for Performance seminars, which I have done only onsite in past.</div>
</p>
<div></div>
<div></div>
<div>So, check out the seminars page:</div>
<div>
<ul>
<li><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vc2VtaW5hci8=" target=\"_self\">http://blog.tanelpoder.com/seminar/</a></li>
</ul>
</div>
<div></div>
<div>Also don&#8217;t forget the <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=Li4vLi4vYmxvZy50YW5lbHBvZGVyLmNvbS9zZW1pbmFyL2V4cGVydC1vcmFjbGUtZXhhZGF0YS12aXJ0dWFsLWNvbmZlcmVuY2Uv" target=\"_blank\">Expert Oracle Exadata virtual conference</a> next week!</div>
</p>
<div></div>
<div></div>
<div></div>
<div><strong>Public Appearances</strong></div>
<div></div>
<div><strong><span style="font-size: small;"><br />
</span></strong></div>
</p>
<div>Oracle OpenWorld 2. October</div>
<div>
<ul>
<li>I will talk about <em><strong>Large-Scale Consolidation onto Oracle Exadata: Planning, Execution, and Validation</strong></em></li>
<li>Session ID 09355</li>
</ul>
</div>
<div></div>
<div></div>
</p>
<div>Maybe I&#8217;ll lurk around the UKOUG venue as well in december ;-)</div>
</p>
<div></div>
<div></div>
 <img src="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1480" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2011/07/28/training-schedule-for-2011-and-public-appearances/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enabling and Reading event 10046 / SQL Trace</title>
		<link>http://blog.tanelpoder.com/2011/07/20/enabling-and-reading-event-10046-sql-trace/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=enabling-and-reading-event-10046-sql-trace</link>
		<comments>http://blog.tanelpoder.com/2011/07/20/enabling-and-reading-event-10046-sql-trace/#comments</comments>
		<pubDate>Wed, 20 Jul 2011 12:41:26 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Troubleshooting]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/2011/07/20/enabling-and-reading-event-10046-sql-trace/</guid>
		<description><![CDATA[As I&#8217;m done with the book and back from a quick vacation (to Prague, which is an awesome place &#8211; well, at least during the summer) I promised (in Twitter) that now I&#8217;d start regularly writing blog articles again. In a separate tweet I asked what to write about. Among other requests (which I&#8217;ll write [...]]]></description>
			<content:encoded><![CDATA[<p>As I&#8217;m done with the book and back from a quick vacation (to Prague, which is an awesome place &#8211; well, at least during the summer) I promised (in Twitter) that now I&#8217;d start regularly writing blog articles again. In a separate tweet I asked what to write about. Among other requests (which I&#8217;ll write about later), one of the requests was to write something about enabling and reading SQL trace files&#8230;&nbsp;</p>
<p>I am probably not going to write (much) about SQL trace for a single reason &#8211; Cary Millsap has already written a paper so good about this topic, that there&#8217;s no point for me to try to repeat it (and my paper wouldn&#8217;t probably be as clear as Cary&#8217;s).</p>
<p>So, if you want to get the most out of SQL Trace, read Cary&#8217;s <strong>Mastering Performance with Extended SQL Trace</strong> paper:</p>
<ul>
<li><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL21ldGhvZC1yLmNvbS9kb3dubG9hZHMvY2F0X3ZpZXcvMzgtcGFwZXJzLWFuZC1hcnRpY2xlcw==" target=\"_blank\">http://method-r.com/downloads/cat_view/38-papers-and-articles</a></li>
</ul>
<p>&nbsp;</p>
<p>The above link directs you to Method-R&#8217;s article index, as there&#8217;s a lot of other useful stuff to read there.</p>
<p>Wow, now I&#8217;m done with my first request &#8211; to write <em>something</em>&nbsp;about SQL Trace :-)</p>
<p>&nbsp;</p>
 <img src="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1472" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2011/07/20/enabling-and-reading-event-10046-sql-trace/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Another cache buffers chains latch contention troubleshooting example using LatchProf</title>
		<link>http://blog.tanelpoder.com/2011/06/30/another-cache-buffers-chains-latch-contention-troubleshooting-example-using-latchprof/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=another-cache-buffers-chains-latch-contention-troubleshooting-example-using-latchprof</link>
		<comments>http://blog.tanelpoder.com/2011/06/30/another-cache-buffers-chains-latch-contention-troubleshooting-example-using-latchprof/#comments</comments>
		<pubDate>Thu, 30 Jun 2011 21:53:34 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Troubleshooting]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/2011/06/30/another-cache-buffers-chains-latch-contention-troubleshooting-example-using-latchprof/</guid>
		<description><![CDATA[One of my blog readers recently dropped me an email noting that he had noticed some cache buffers chains latch contention recently and successfully troubleshooted it with LatchProf. I asked if he&#8217;d like to blog about it and here&#8217;s the article: http://orapsdba.wordpress.com/2011/06/21/another-latchcache-buffer-chains-troubleshooting/ &#160; Cache buffer chains latch contention typically shows up when some execution plans [...]]]></description>
			<content:encoded><![CDATA[<p>One of my blog readers recently dropped me an email noting that he had noticed some cache buffers chains latch contention recently and successfully troubleshooted it with <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=Li4vLi4vdGVjaC5lMnNuLmNvbS9vcmFjbGUvdHJvdWJsZXNob290aW5nL2xhdGNoLWNvbnRlbnRpb24tdHJvdWJsZXNob290aW5n" target=\"_blank\">LatchProf</a>. I asked if he&#8217;d like to blog about it and here&#8217;s the article:</p>
<ul>
<li><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL29yYXBzZGJhLndvcmRwcmVzcy5jb20vMjAxMS8wNi8yMS9hbm90aGVyLWxhdGNoY2FjaGUtYnVmZmVyLWNoYWlucy10cm91Ymxlc2hvb3Rpbmcv" target=\"_blank\">http://orapsdba.wordpress.com/2011/06/21/another-latchcache-buffer-chains-troubleshooting/</a></li>
</ul>
<p>&nbsp;</p>
<p>Cache buffer chains latch contention typically shows up when some execution plans go bad, switching to nested loops or filter loops and revisiting the same table (or index) blocks very frequently&#8230;</p>
<p>&nbsp;</p>
 <img src="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1227" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2011/06/30/another-cache-buffers-chains-latch-contention-troubleshooting-example-using-latchprof/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Advanced RAC Training by Oracle RAC expert Riyaj Shamsudeen</title>
		<link>http://blog.tanelpoder.com/2011/06/30/advanced-rac-training-by-oracle-rac-expert-riyaj-shamsudeen/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=advanced-rac-training-by-oracle-rac-expert-riyaj-shamsudeen</link>
		<comments>http://blog.tanelpoder.com/2011/06/30/advanced-rac-training-by-oracle-rac-expert-riyaj-shamsudeen/#comments</comments>
		<pubDate>Thu, 30 Jun 2011 12:06:43 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Internals]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[RAC]]></category>
		<category><![CDATA[Training]]></category>
		<category><![CDATA[Troubleshooting]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/2011/06/30/advanced-rac-training-by-oracle-rac-expert-riyaj-shamsudeen/</guid>
		<description><![CDATA[If you&#8217;ve troubleshooted (or tuned) RAC then you probably already know Riyaj Shamsudeen and his Orainternals blog &#38; website (links below). Anyway, since I started delivering my Advanced Oracle Troubleshooting classes some years ago, many people asked whether I would do a similar class for RAC. I had deliberately left out the RAC-specific stuff from [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve troubleshooted (or tuned) RAC then you probably already know Riyaj Shamsudeen and his Orainternals blog &amp; website (links below).</p>
<p>Anyway, since I started delivering my Advanced Oracle Troubleshooting classes some years ago, many people asked whether I would do a similar class for RAC. I had deliberately left out the RAC-specific stuff from my troubleshooting material, because it&#8217;s a very wide and complex topic and I feel like before trying to master RAC troubleshooting, you should master troubleshooting of regular single instance databases anyway. I realized that I didn&#8217;t have the time to build (and maintain) yet another set of trainig material, especially on so complex topic as RAC performance &amp; troubleshooting.&nbsp;</p>
<p>So, having seen Riyaj&#8217;s impressive work and his presentations at various conferences, I asked whether he would be interested in building a RAC troubleshooting class, going from fundamentals to advanced topics &#8211; and he said yes. By now we are that far that I&#8217;m happy to announce the first <strong>Advanced RAC</strong>&nbsp;online seminars by Riyaj Shamsudeen (split across two weeks of online sessions, 4-hours per day, in end of august and september).</p>
<p>We initially called the seminar &#8220;Advanced RAC Troubleshooting&#8221; but then realized, that there are some closely related non-troubleshooting topics to be covered, like fundamental concepts, internals and also how to configure RAC for performance (so that you wouldn&#8217;t have to troubleshoot performance later :-)</p>
<p>We&#8217;ll use the same infrastructure and seminar philosophy as I do in my own online seminars, it&#8217;s just that this is Riyaj&#8217;s material and he will deliver it too.</p>
<p>You can read more about the seminar content, dates and sign up at the seminars page:</p>
<p><strong>Seminars:</strong></p>
<ul>
<li><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vc2VtaW5hci8=">http://blog.tanelpoder.com/seminar/</a></li>
</ul>
<p><strong>Riyaj&#8217;s blog:</strong></p>
<ul>
<li><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL29yYWludGVybmFscy53b3JkcHJlc3MuY29tLw==" target=\"_blank\">http://orainternals.wordpress.com/</a></li>
</ul>
<p><strong>Riyaj&#8217;s website (articles, slides etc):</strong></p>
<ul>
<li><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5vcmFpbnRlcm5hbHMuY29t" target=\"_blank\">http://www.orainternals.com</a></li>
</ul>
<p>&nbsp;</p>
<p>Let the RAC hacking begin! ;-)</p>
<p>&nbsp;</p>
 <img src="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1222" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2011/06/30/advanced-rac-training-by-oracle-rac-expert-riyaj-shamsudeen/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>IOUG Select Journal Editor&#8217;s Choice Award 2011</title>
		<link>http://blog.tanelpoder.com/2011/06/29/ioug-select-journal-editors-choice-award-2011/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ioug-select-journal-editors-choice-award-2011</link>
		<comments>http://blog.tanelpoder.com/2011/06/29/ioug-select-journal-editors-choice-award-2011/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 10:23:18 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Cool stuff]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Troubleshooting]]></category>
		<category><![CDATA[Tuning]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/2011/06/29/ioug-select-journal-editors-choice-award-2011/</guid>
		<description><![CDATA[In May I received the IOUG Select Journal Editor&#8217;s Choice Award for my Systematic Oracle Latch Contention Troubleshooting article where I introduced my LatchProfX tool for advanced drilldown into complex latch contention problems (thanks IOUG and John Kanagaraj!). As the relevant IOUG webpage hasn&#8217;t been updated yet, I thought to delay this announcement until the [...]]]></description>
			<content:encoded><![CDATA[<p>In May I received the <strong>IOUG Select Journal Editor&#8217;s Choice Award</strong> for my <strong>Systematic Oracle Latch Contention Troubleshooting</strong> article where I introduced my LatchProfX tool for advanced drilldown into complex latch contention problems (thanks IOUG and <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5saW5rZWRpbi5jb20vaW4vam9obmthbmFnYXJhag==" target=\"_blank\">John Kanagaraj</a>!).</p>
<p>As the relevant IOUG webpage hasn&#8217;t been updated yet, I thought to delay this announcement until the update was done &#8211; but I just found an official enough announcement (press release) by accident from Reuters site:</p>
<ul>
<li><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5yZXV0ZXJzLmNvbS9hcnRpY2xlLzIwMTEvMDUvMTIvaWRVUzI3OTUxOCsxMi1NYXktMjAxMStCVzIwMTEwNTEy" target=\"_blank\">http://www.reuters.com/article/2011/05/12/idUS279518+12-May-2011+BW20110512</a></li>
</ul>
<p>Woo-hoo! :-)</p>
<p>The article itself is here:</p>
<ul>
<li><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3RlY2guZTJzbi5jb20vb3JhY2xlL3Ryb3VibGVzaG9vdGluZy9sYXRjaC1jb250ZW50aW9uLXRyb3VibGVzaG9vdGluZw==" target=\"_blank\">http://tech.e2sn.com/oracle/troubleshooting/latch-contention-troubleshooting</a></li>
</ul>
<p>Thanks to IOUG crew, John Kanagaraj and everyone else who has read, used my stuff and given feedback! :-)</p>
 <img src="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1198" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2011/06/29/ioug-select-journal-editors-choice-award-2011/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Cache buffers chains latch contention troubleshooting using latchprofx.sql example</title>
		<link>http://blog.tanelpoder.com/2011/06/05/cache-buffers-chains-latch-contention-using-latchprofx-sql-example/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cache-buffers-chains-latch-contention-using-latchprofx-sql-example</link>
		<comments>http://blog.tanelpoder.com/2011/06/05/cache-buffers-chains-latch-contention-using-latchprofx-sql-example/#comments</comments>
		<pubDate>Sun, 05 Jun 2011 12:16:26 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Troubleshooting]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/2011/06/05/cache-buffers-chains-latch-contention-using-latchprofx-sql-example/</guid>
		<description><![CDATA[Laurent Demaret has written a good article about how he systematically troubleshooted cache buffers chains latch contention, starting from wait interface and drilling down into details with my latchprofx tool: http://www.cernatis.com/index.php/oracle-databases/performancetuning/107-fix-high-qlatch-cache-buffers-chainsq-waits A common cause for cache buffers chains latch contention is that some blocks are visited and re-visited way too much by a query execution. [...]]]></description>
			<content:encoded><![CDATA[<p>Laurent Demaret has written a good article about how he systematically troubleshooted cache buffers chains latch contention, starting from wait interface and drilling down into details with my latchprofx tool:</p>
<ul>
<li><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5jZXJuYXRpcy5jb20vaW5kZXgucGhwL29yYWNsZS1kYXRhYmFzZXMvcGVyZm9ybWFuY2V0dW5pbmcvMTA3LWZpeC1oaWdoLXFsYXRjaC1jYWNoZS1idWZmZXJzLWNoYWluc3Etd2FpdHM=" target=\"_blank\">http://www.cernatis.com/index.php/oracle-databases/performancetuning/107-fix-high-qlatch-cache-buffers-chainsq-waits</a></li>
</ul>
<p>A common cause for cache buffers chains latch contention is that some blocks are visited and re-visited way too much by a query execution. This usually happens due to nested loops joins or FILTER loops retrieving many rows from their outer (driving) row sources and then visiting the inner row-source again for each row from driving row source. Once you manage to fix your execution plan (perhaps by getting a hash join instead of the loop), then the blocks will not be re-visited so much and the latches will be hammered much less too.</p>
<p>The moral of the story is that if you have latch contention in a modern Oracle database, you don&#8217;t need to start tweaking undocumented latching parameters, but reduce the latch usage instead. And Laurent has done a good job with systematically identifying the SQL that needs to be fixed.</p>
<p>Good stuff!</p>
<p>If you don&#8217;t know what LatchProfX is, read this:</p>
<ul>
<li><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3RlY2guZTJzbi5jb20vb3JhY2xlL3Ryb3VibGVzaG9vdGluZy9sYXRjaC1jb250ZW50aW9uLXRyb3VibGVzaG9vdGluZw==" target=\"_blank\">http://tech.e2sn.com/oracle/troubleshooting/latch-contention-troubleshooting</a></li>
</ul>
 <img src="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=984" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2011/06/05/cache-buffers-chains-latch-contention-using-latchprofx-sql-example/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>New scripts, tools and broken links</title>
		<link>http://blog.tanelpoder.com/2011/04/15/new-scripts-tools-and-broken-links/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=new-scripts-tools-and-broken-links</link>
		<comments>http://blog.tanelpoder.com/2011/04/15/new-scripts-tools-and-broken-links/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 20:36:33 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Administration]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Troubleshooting]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/?p=947</guid>
		<description><![CDATA[I have some broken links in my old blog entries right now, so if you&#8217;re looking for something, then download the whole zip file from here: http://tech.e2sn.com/oracle-scripts-and-tools I have uploaded a .zip file (for Windows) and a .tar.gz file (for Unix/Mac). The scripts are all the same with differences in the CR/LF bytes in the [...]]]></description>
			<content:encoded><![CDATA[<p>I have some broken links in my old blog entries right now, so if you&#8217;re looking for something, then download the whole zip file from here:</p>
<ul>
<li><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3RlY2guZTJzbi5jb20vb3JhY2xlLXNjcmlwdHMtYW5kLXRvb2xz" target=\"_blank\">http://tech.e2sn.com/oracle-scripts-and-tools</a></li>
</ul>
<p>I have uploaded a .zip file (for Windows) and a .tar.gz file (for Unix/Mac). The scripts are all the same with differences in the CR/LF bytes in the files and the <strong>init.sql</strong> and <strong>i.sql</strong> which have some OS specific commands in them.</p>
<p>I also uploaded the latest PerfSheet there where I fixed an annoying bug which complained about some missing reference files when opening the file.</p>
<p>I plan to fix the broken links some time between now and my retirement.</p>
<p>&nbsp;</p>
 <img src="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=947" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2011/04/15/new-scripts-tools-and-broken-links/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

