<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Quiz Night</title>
	<atom:link href="http://jonathanlewis.wordpress.com/2011/01/21/quiz-night-12/feed/" rel="self" type="application/rss+xml" />
	<link>http://jonathanlewis.wordpress.com/2011/01/21/quiz-night-12/</link>
	<description>Just another Oracle weblog</description>
	<lastBuildDate>Wed, 19 Jun 2013 22:21:35 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: Pavol Babel</title>
		<link>http://jonathanlewis.wordpress.com/2011/01/21/quiz-night-12/#comment-41977</link>
		<dc:creator><![CDATA[Pavol Babel]]></dc:creator>
		<pubDate>Thu, 06 Oct 2011 12:05:49 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/?p=5507#comment-41977</guid>
		<description><![CDATA[Simplified version for UNIX:

[sourcecode language=&quot;css&quot;]
#!/bin/ksh

INFILE=$1
OUTFILE=$2

grep &quot;Consistent read started&quot; $INFILE &#124; awk -F &#039;:&#039; &#039;{print $2}&#039; &#124; sort  &#124; uniq -c &#124; sort -rn &gt; $OUTFILE
[/sourcecode]

Should do the same and work even on windows (powered by cygwin :) :) )]]></description>
		<content:encoded><![CDATA[<p>Simplified version for UNIX:</p>
<pre class="brush: css; title: ; notranslate">
#!/bin/ksh

INFILE=$1
OUTFILE=$2

grep &quot;Consistent read started&quot; $INFILE | awk -F ':' '{print $2}' | sort  | uniq -c | sort -rn &gt; $OUTFILE
</pre>
<p>Should do the same and work even on windows (powered by cygwin :) :) )</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Watching Consistent Gets &#8211; 10200 Trace File Parser &#171; Charles Hooper&#039;s Oracle Notes</title>
		<link>http://jonathanlewis.wordpress.com/2011/01/21/quiz-night-12/#comment-39295</link>
		<dc:creator><![CDATA[Watching Consistent Gets &#8211; 10200 Trace File Parser &#171; Charles Hooper&#039;s Oracle Notes]]></dc:creator>
		<pubDate>Mon, 24 Jan 2011 06:01:15 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/?p=5507#comment-39295</guid>
		<description><![CDATA[[...] happened again, another blog article that forced me to stop, think, and &#8230; hey, why did Oracle Database 11.2.0.2 do something [...]]]></description>
		<content:encoded><![CDATA[<p>[...] happened again, another blog article that forced me to stop, think, and &#8230; hey, why did Oracle Database 11.2.0.2 do something [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jonathan Lewis</title>
		<link>http://jonathanlewis.wordpress.com/2011/01/21/quiz-night-12/#comment-39289</link>
		<dc:creator><![CDATA[Jonathan Lewis]]></dc:creator>
		<pubDate>Sun, 23 Jan 2011 17:54:52 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/?p=5507#comment-39289</guid>
		<description><![CDATA[Pavol,

My original source (some 15 to 20 years ago) was the oraus.msg file. From time to time you find notes on Metalink or on the internet about them.

Another interesting little detail is how more and more &quot;consistent gets&quot; have gradually changed to &quot;consistent gets - examinations&quot; over the versions.  Once upon a time it seemed to be only undo blocks, single table hash cluster blocks, and root blocks of indexes - in recent versions you can even see ordinary heap table blocks subject to examinations.]]></description>
		<content:encoded><![CDATA[<p>Pavol,</p>
<p>My original source (some 15 to 20 years ago) was the oraus.msg file. From time to time you find notes on Metalink or on the internet about them.</p>
<p>Another interesting little detail is how more and more &#8220;consistent gets&#8221; have gradually changed to &#8220;consistent gets &#8211; examinations&#8221; over the versions.  Once upon a time it seemed to be only undo blocks, single table hash cluster blocks, and root blocks of indexes &#8211; in recent versions you can even see ordinary heap table blocks subject to examinations.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jonathan Lewis</title>
		<link>http://jonathanlewis.wordpress.com/2011/01/21/quiz-night-12/#comment-39288</link>
		<dc:creator><![CDATA[Jonathan Lewis]]></dc:creator>
		<pubDate>Sun, 23 Jan 2011 17:51:05 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/?p=5507#comment-39288</guid>
		<description><![CDATA[Charles,

Since you have blevel 1 on the child index you can ignore the comments about the branch block. Given that I know what my data looks like I know that you have 57 rows per table block in the parent and child tables. So your output shows:

[sourcecode]
0206e214	   1 - get and pin parent index root
0206e215	   1 - get and pin parent index child
01c0000c	   1 - get and pin parent table block 1
01c72d94	   2 - get child index root block twice
01c72d95	 200 - get a child leaf block for 200 iterations of the loop
01c003ec	  57 - get the first child table block 57 times
01c0000d	   1 - get and pin the second parent table block
01c003ed	  57 - get the second child block 57 times
01c0000e	   1 - get and pin the third parent table block
01c003ee	  57 - get the third child block 57 times
01c0000f	   1 - get and pin the fourth parent table block
01c003ef	  29 - get the fourth child block 29 times
[/sourcecode]

Note that: 57 + 57 + 57 + 29 = 200]]></description>
		<content:encoded><![CDATA[<p>Charles,</p>
<p>Since you have blevel 1 on the child index you can ignore the comments about the branch block. Given that I know what my data looks like I know that you have 57 rows per table block in the parent and child tables. So your output shows:</p>
<pre class="brush: plain; title: ; notranslate">
0206e214	   1 - get and pin parent index root
0206e215	   1 - get and pin parent index child
01c0000c	   1 - get and pin parent table block 1
01c72d94	   2 - get child index root block twice
01c72d95	 200 - get a child leaf block for 200 iterations of the loop
01c003ec	  57 - get the first child table block 57 times
01c0000d	   1 - get and pin the second parent table block
01c003ed	  57 - get the second child block 57 times
01c0000e	   1 - get and pin the third parent table block
01c003ee	  57 - get the third child block 57 times
01c0000f	   1 - get and pin the fourth parent table block
01c003ef	  29 - get the fourth child block 29 times
</pre>
<p>Note that: 57 + 57 + 57 + 29 = 200</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Flado</title>
		<link>http://jonathanlewis.wordpress.com/2011/01/21/quiz-night-12/#comment-39287</link>
		<dc:creator><![CDATA[Flado]]></dc:creator>
		<pubDate>Sun, 23 Jan 2011 17:05:32 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/?p=5507#comment-39287</guid>
		<description><![CDATA[Or in any oracle client:

&lt;code&gt;
begin dbms_output.put_line(sqlerrm(-10200));end;
/
&lt;/code&gt;
Here&#039;s the output from &quot;SQL Commands&quot; at apex.oracle.com:

ORA-10200: consistent read buffer status

Statement processed.

0.00 seconds]]></description>
		<content:encoded><![CDATA[<p>Or in any oracle client:</p>
<p><code><br />
begin dbms_output.put_line(sqlerrm(-10200));end;<br />
/<br />
</code><br />
Here&#8217;s the output from &#8220;SQL Commands&#8221; at apex.oracle.com:</p>
<p>ORA-10200: consistent read buffer status</p>
<p>Statement processed.</p>
<p>0.00 seconds</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Pavol Babel</title>
		<link>http://jonathanlewis.wordpress.com/2011/01/21/quiz-night-12/#comment-39285</link>
		<dc:creator><![CDATA[Pavol Babel]]></dc:creator>
		<pubDate>Sun, 23 Jan 2011 16:21:06 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/?p=5507#comment-39285</guid>
		<description><![CDATA[Jonathan,

Great job gain. I would like to two additional questions:

1. I have never heard of 10200 event. How did you know such an event exists? But meanwhile, I have discovered $ORACLE_HOME/rdbms/mesg/oraus.msg. i didn&#039;t know this file was providing also list of events and their names! :-)
2. Very interesting information that Oracle is pinning blocks in the outer table, too (in 10g). If we give away condition &quot;and chi.n1 = 0&quot; making your query retuning 200 rows, we will obviously have slightly more consistent gets in rows 2 and 3.

The change of behaviour in 11g is very interesting, too.]]></description>
		<content:encoded><![CDATA[<p>Jonathan,</p>
<p>Great job gain. I would like to two additional questions:</p>
<p>1. I have never heard of 10200 event. How did you know such an event exists? But meanwhile, I have discovered $ORACLE_HOME/rdbms/mesg/oraus.msg. i didn&#8217;t know this file was providing also list of events and their names! :-)<br />
2. Very interesting information that Oracle is pinning blocks in the outer table, too (in 10g). If we give away condition &#8220;and chi.n1 = 0&#8243; making your query retuning 200 rows, we will obviously have slightly more consistent gets in rows 2 and 3.</p>
<p>The change of behaviour in 11g is very interesting, too.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Charles Hooper</title>
		<link>http://jonathanlewis.wordpress.com/2011/01/21/quiz-night-12/#comment-39283</link>
		<dc:creator><![CDATA[Charles Hooper]]></dc:creator>
		<pubDate>Sun, 23 Jan 2011 15:55:13 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/?p=5507#comment-39283</guid>
		<description><![CDATA[Jonathan,

I see that you have already posted the answer to the quiz - very thought provoking.

For comparison with 11.2.0.2, this is the execution plan that I see on 10.2.0.5 when the BLEVEL of both indexes is 1, as was the case on 11.2.0.2:
[sourcecode]
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,&#039;ALLSTATS LAST -ROWS -PREDICATE&#039;));
 
----------------------------------------------------------------------------------------
&#124; Id  &#124; Operation                    &#124; Name   &#124; Starts &#124; A-Rows &#124;   A-Time   &#124; Buffers &#124;
----------------------------------------------------------------------------------------
&#124;   0 &#124; SELECT STATEMENT             &#124;        &#124;      1 &#124;      0 &#124;00:00:00.01 &#124;     408 &#124;
&#124;   1 &#124;  NESTED LOOPS                &#124;        &#124;      1 &#124;      0 &#124;00:00:00.01 &#124;     408 &#124;
&#124;   2 &#124;   TABLE ACCESS BY INDEX ROWID&#124; T1     &#124;      1 &#124;    200 &#124;00:00:00.01 &#124;       6 &#124;
&#124;   3 &#124;    INDEX RANGE SCAN          &#124; PAR_I1 &#124;      1 &#124;    200 &#124;00:00:00.01 &#124;       2 &#124;
&#124;   4 &#124;   TABLE ACCESS BY INDEX ROWID&#124; T2     &#124;    200 &#124;      0 &#124;00:00:00.01 &#124;     402 &#124;
&#124;   5 &#124;    INDEX UNIQUE SCAN         &#124; CHI_I1 &#124;    200 &#124;    200 &#124;00:00:00.01 &#124;     202 &#124;
----------------------------------------------------------------------------------------
[/sourcecode]
As can be seen by the above, the number of consistent gets for the CHI_I1 was 202 rather than 402 as shown at the top of this blog article.  Process of elimination would suggest that the BLEVEL must be 2 (of course process of elimination was not the desired path of finding the answer).

With 300,000 rows in each of the tables I used the following SQL statement that resulted in the generation of the above execution plans:
[sourcecode]
SELECT /*+ GATHER_PLAN_STATISTICS LEADING(T1) USE_NL(T2) INDEX(T1) INDEX(T2) */
  T1.ID,
  T1.N1,
  T2.ID,
  T2.N1
FROM
  T1,
  T2
WHERE
  T1.ID=T2.ID
  AND T1.ID BETWEEN 1 AND 200
  AND T2.N1 = 0;
[/sourcecode]

Vyacheslav Rasskazov&#039;s comment jogged my memory a bit regarding what is likely happening.  While waiting for your answer to this post I performed a couple of tests.  Running this SQL statement before and after executing my test query:
[sourcecode]
SELECT
  NAME,
  VALUE
FROM
  V$MYSTAT M,
  V$STATNAME S
WHERE
  (NAME LIKE &#039;consistent%&#039;
    OR NAME LIKE &#039;buffer%&#039;)
  AND M.STATISTIC#=S.STATISTIC#;
 
NAME                                        VALUE
-------------------------------------- ----------
consistent gets                               456  /* +408 */
consistent gets from cache                    456  /* +408 */
consistent gets - examination                 405  /* +402 */
consistent gets direct                          0
consistent changes                              0
buffer is pinned count                        630  /* +593 */
buffer is not pinned count                    421  /* +406 */
[/sourcecode]

The consistent gets count increase matches my execution plan, and the buffer is pinned count increased by 593.

I then created a 10200 trace:
[sourcecode]
ALTER SESSION SET TRACEFILE_IDENTIFIER=&#039;WATCH_CONSISTENT&#039;; 
ALTER SESSION SET EVENTS &#039;10200 TRACE NAME CONTEXT FOREVER, LEVEL 1&#039;;
 
SELECT /*+ GATHER_PLAN_STATISTICS LEADING(T1) USE_NL(T2) INDEX(T1) INDEX(T2) */
  T1.ID,
  T1.N1,
  T2.ID,
  T2.N1
FROM
  T1,
  T2
WHERE
  T1.ID=T2.ID
  AND T1.ID BETWEEN 1 AND 200
  AND T2.N1 = 0;
[/sourcecode]

And a simple Excel macro to process the trace file:
[sourcecode]
Sub ReadTrace()
    Dim intFileNum As Integer             &#039;10200 trace file
    Dim intFileNum2 As Integer            &#039;Output file
    Dim strInput As String                &#039;Line read from the 10200 trace file
    Dim strOutput As String               &#039;Line to be written to the output file
    Dim strBlock(2000) As String          &#039;Block read from the trace file
    Dim strBlockCounter(2000) As Integer  &#039;Number of times read
    Dim intBlocks As Integer              &#039;Total number of blocks
    Dim i As Integer                      &#039;Loop counter
    Dim intFound As Integer               &#039;Indicates whether or not the block was found
    
    intFileNum = FreeFile
    Open &quot;c:\or10s_ora_4256_watch_consistent.trc&quot; For Input As #intFileNum
    
    intFileNum2 = FreeFile
    Open &quot;c:\watch_consistent.txt&quot; For Output As #intFileNum2
    
    Do While Not EOF(intFileNum)
        Line Input #intFileNum, strInput
        If InStr(strInput, &quot;Consistent read started for block&quot;) &gt; 0 Then
            strOutput = Trim(Right(strInput, Len(strInput) - InStr(strInput, &quot;:&quot;)))
            &#039;Find the number of times the block was accessed
            intFound = 0
            For i = 1 To intBlocks
                If strOutput = strBlock(i) Then
                    intFound = i
                    strBlockCounter(i) = strBlockCounter(i) + 1
                    Exit For
                End If
            Next i
            &#039;If the block was not found, record it
            If intFound = 0 Then
                intBlocks = intBlocks + 1
                intFound = intBlocks
                strBlockCounter(intBlocks) = 1
                strBlock(intBlocks) = strOutput
            End If
            Print #intFileNum2, strOutput; vbTab; strBlockCounter(intFound)
        End If
    Loop
    Print #intFileNum2, &quot;&quot;
    For i = 1 To intBlocks
        Print #intFileNum2, strBlock(i); vbTab; strBlockCounter(i)
    Next i
    Close #intFileNum
    Close #intFileNum2
End Sub
[/sourcecode]

The output of the Excel macro lists every consistent block read, outputs that block number to another file, along with a running count of the number of times that block had been accessed.  A summary is produced at the bottom of the output, listing the blocks accessed in order and the total number of consistent gets for that block.  The summary from my test follows:
[sourcecode]
0206e214	 1 
0206e215	 1 
01c0000c	 1 
01c72d94	 2 
01c72d95	 200 
01c003ec	 57 
01c0000d	 1 
01c003ed	 57 
01c0000e	 1 
01c003ee	 57 
01c0000f	 1 
01c003ef	 29
[/sourcecode]

The read of blocks 0206e214 and 0206e215 were at the very start of the trace file.  How are those block numbers from the 10200 trace file translated into the following from your explanation:
&lt;blockquote cite=&quot;&quot;&gt;
1) Get the root block of parent index and pin it
2) Get the first relevant leaf block of the parent index and pin it
&lt;/blockquote&gt;
]]></description>
		<content:encoded><![CDATA[<p>Jonathan,</p>
<p>I see that you have already posted the answer to the quiz &#8211; very thought provoking.</p>
<p>For comparison with 11.2.0.2, this is the execution plan that I see on 10.2.0.5 when the BLEVEL of both indexes is 1, as was the case on 11.2.0.2:</p>
<pre class="brush: plain; title: ; notranslate">
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,'ALLSTATS LAST -ROWS -PREDICATE'));
 
----------------------------------------------------------------------------------------
| Id  | Operation                    | Name   | Starts | A-Rows |   A-Time   | Buffers |
----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |        |      1 |      0 |00:00:00.01 |     408 |
|   1 |  NESTED LOOPS                |        |      1 |      0 |00:00:00.01 |     408 |
|   2 |   TABLE ACCESS BY INDEX ROWID| T1     |      1 |    200 |00:00:00.01 |       6 |
|   3 |    INDEX RANGE SCAN          | PAR_I1 |      1 |    200 |00:00:00.01 |       2 |
|   4 |   TABLE ACCESS BY INDEX ROWID| T2     |    200 |      0 |00:00:00.01 |     402 |
|   5 |    INDEX UNIQUE SCAN         | CHI_I1 |    200 |    200 |00:00:00.01 |     202 |
----------------------------------------------------------------------------------------
</pre>
<p>As can be seen by the above, the number of consistent gets for the CHI_I1 was 202 rather than 402 as shown at the top of this blog article.  Process of elimination would suggest that the BLEVEL must be 2 (of course process of elimination was not the desired path of finding the answer).</p>
<p>With 300,000 rows in each of the tables I used the following SQL statement that resulted in the generation of the above execution plans:</p>
<pre class="brush: plain; title: ; notranslate">
SELECT /*+ GATHER_PLAN_STATISTICS LEADING(T1) USE_NL(T2) INDEX(T1) INDEX(T2) */
  T1.ID,
  T1.N1,
  T2.ID,
  T2.N1
FROM
  T1,
  T2
WHERE
  T1.ID=T2.ID
  AND T1.ID BETWEEN 1 AND 200
  AND T2.N1 = 0;
</pre>
<p>Vyacheslav Rasskazov&#8217;s comment jogged my memory a bit regarding what is likely happening.  While waiting for your answer to this post I performed a couple of tests.  Running this SQL statement before and after executing my test query:</p>
<pre class="brush: plain; title: ; notranslate">
SELECT
  NAME,
  VALUE
FROM
  V$MYSTAT M,
  V$STATNAME S
WHERE
  (NAME LIKE 'consistent%'
    OR NAME LIKE 'buffer%')
  AND M.STATISTIC#=S.STATISTIC#;
 
NAME                                        VALUE
-------------------------------------- ----------
consistent gets                               456  /* +408 */
consistent gets from cache                    456  /* +408 */
consistent gets - examination                 405  /* +402 */
consistent gets direct                          0
consistent changes                              0
buffer is pinned count                        630  /* +593 */
buffer is not pinned count                    421  /* +406 */
</pre>
<p>The consistent gets count increase matches my execution plan, and the buffer is pinned count increased by 593.</p>
<p>I then created a 10200 trace:</p>
<pre class="brush: plain; title: ; notranslate">
ALTER SESSION SET TRACEFILE_IDENTIFIER='WATCH_CONSISTENT'; 
ALTER SESSION SET EVENTS '10200 TRACE NAME CONTEXT FOREVER, LEVEL 1';
 
SELECT /*+ GATHER_PLAN_STATISTICS LEADING(T1) USE_NL(T2) INDEX(T1) INDEX(T2) */
  T1.ID,
  T1.N1,
  T2.ID,
  T2.N1
FROM
  T1,
  T2
WHERE
  T1.ID=T2.ID
  AND T1.ID BETWEEN 1 AND 200
  AND T2.N1 = 0;
</pre>
<p>And a simple Excel macro to process the trace file:</p>
<pre class="brush: plain; title: ; notranslate">
Sub ReadTrace()
    Dim intFileNum As Integer             '10200 trace file
    Dim intFileNum2 As Integer            'Output file
    Dim strInput As String                'Line read from the 10200 trace file
    Dim strOutput As String               'Line to be written to the output file
    Dim strBlock(2000) As String          'Block read from the trace file
    Dim strBlockCounter(2000) As Integer  'Number of times read
    Dim intBlocks As Integer              'Total number of blocks
    Dim i As Integer                      'Loop counter
    Dim intFound As Integer               'Indicates whether or not the block was found
    
    intFileNum = FreeFile
    Open &quot;c:\or10s_ora_4256_watch_consistent.trc&quot; For Input As #intFileNum
    
    intFileNum2 = FreeFile
    Open &quot;c:\watch_consistent.txt&quot; For Output As #intFileNum2
    
    Do While Not EOF(intFileNum)
        Line Input #intFileNum, strInput
        If InStr(strInput, &quot;Consistent read started for block&quot;) &gt; 0 Then
            strOutput = Trim(Right(strInput, Len(strInput) - InStr(strInput, &quot;:&quot;)))
            'Find the number of times the block was accessed
            intFound = 0
            For i = 1 To intBlocks
                If strOutput = strBlock(i) Then
                    intFound = i
                    strBlockCounter(i) = strBlockCounter(i) + 1
                    Exit For
                End If
            Next i
            'If the block was not found, record it
            If intFound = 0 Then
                intBlocks = intBlocks + 1
                intFound = intBlocks
                strBlockCounter(intBlocks) = 1
                strBlock(intBlocks) = strOutput
            End If
            Print #intFileNum2, strOutput; vbTab; strBlockCounter(intFound)
        End If
    Loop
    Print #intFileNum2, &quot;&quot;
    For i = 1 To intBlocks
        Print #intFileNum2, strBlock(i); vbTab; strBlockCounter(i)
    Next i
    Close #intFileNum
    Close #intFileNum2
End Sub
</pre>
<p>The output of the Excel macro lists every consistent block read, outputs that block number to another file, along with a running count of the number of times that block had been accessed.  A summary is produced at the bottom of the output, listing the blocks accessed in order and the total number of consistent gets for that block.  The summary from my test follows:</p>
<pre class="brush: plain; title: ; notranslate">
0206e214	 1 
0206e215	 1 
01c0000c	 1 
01c72d94	 2 
01c72d95	 200 
01c003ec	 57 
01c0000d	 1 
01c003ed	 57 
01c0000e	 1 
01c003ee	 57 
01c0000f	 1 
01c003ef	 29
</pre>
<p>The read of blocks 0206e214 and 0206e215 were at the very start of the trace file.  How are those block numbers from the 10200 trace file translated into the following from your explanation:</p>
<blockquote cite=""><p>
1) Get the root block of parent index and pin it<br />
2) Get the first relevant leaf block of the parent index and pin it
</p></blockquote>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jonathan Lewis</title>
		<link>http://jonathanlewis.wordpress.com/2011/01/21/quiz-night-12/#comment-39278</link>
		<dc:creator><![CDATA[Jonathan Lewis]]></dc:creator>
		<pubDate>Sun, 23 Jan 2011 14:15:59 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/?p=5507#comment-39278</guid>
		<description><![CDATA[The answer is 2.
I&#039;ve added the explanation to the original posting.]]></description>
		<content:encoded><![CDATA[<p>The answer is 2.<br />
I&#8217;ve added the explanation to the original posting.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mohamed</title>
		<link>http://jonathanlewis.wordpress.com/2011/01/21/quiz-night-12/#comment-39275</link>
		<dc:creator><![CDATA[Mohamed]]></dc:creator>
		<pubDate>Sun, 23 Jan 2011 09:37:44 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/?p=5507#comment-39275</guid>
		<description><![CDATA[I will submit my very little oracle knowledge to critics
  
We have the following information on line 5 of the explain plan

  Starts = 200,  A-Rows = 200 and Buffers = 402

The Operation 5 has been started 200 times and has produced 200 rows; which means that A-Rows/Starts = 200/200 = 1 row for each execution

Buffers definition : The number of logical reads the operation performed during its executions = 402 almost 402/200 = 2 buffers

Hence, the operation 5 performed 2 consistent gets for each CHI_I1 Index access; so its blevel  = 0

Best Regards]]></description>
		<content:encoded><![CDATA[<p>I will submit my very little oracle knowledge to critics</p>
<p>We have the following information on line 5 of the explain plan</p>
<p>  Starts = 200,  A-Rows = 200 and Buffers = 402</p>
<p>The Operation 5 has been started 200 times and has produced 200 rows; which means that A-Rows/Starts = 200/200 = 1 row for each execution</p>
<p>Buffers definition : The number of logical reads the operation performed during its executions = 402 almost 402/200 = 2 buffers</p>
<p>Hence, the operation 5 performed 2 consistent gets for each CHI_I1 Index access; so its blevel  = 0</p>
<p>Best Regards</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Pavol Babel</title>
		<link>http://jonathanlewis.wordpress.com/2011/01/21/quiz-night-12/#comment-39272</link>
		<dc:creator><![CDATA[Pavol Babel]]></dc:creator>
		<pubDate>Sat, 22 Jan 2011 15:56:05 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/?p=5507#comment-39272</guid>
		<description><![CDATA[Narednra,

Oracle does not have to read index segment header in case of index unique or range scan (It think oracle is able to derive ROOT BLOCK address directly from address of segment header without inspecting segment header block). 

Now I will try to explain my statment once more time. I wrote:  &quot;It will cache it &lt;i&gt; (the ROOT BLOCK) &lt;/i&gt; somehow (I have to admitt I’m not able to describe whole process), &lt;b&gt;spending one extra consistent read &lt;/b&gt;.&quot; . I think the extra consistent read is spent due ROOT BLOCK CACHING, but I&#039;m not sure, just guessing Oracle will create new consistent read version of ROOT BLOCK in BUFFER CACHE, pinned by server process during nested loops join.]]></description>
		<content:encoded><![CDATA[<p>Narednra,</p>
<p>Oracle does not have to read index segment header in case of index unique or range scan (It think oracle is able to derive ROOT BLOCK address directly from address of segment header without inspecting segment header block). </p>
<p>Now I will try to explain my statment once more time. I wrote:  &#8220;It will cache it <i> (the ROOT BLOCK) </i> somehow (I have to admitt I’m not able to describe whole process), <b>spending one extra consistent read </b>.&#8221; . I think the extra consistent read is spent due ROOT BLOCK CACHING, but I&#8217;m not sure, just guessing Oracle will create new consistent read version of ROOT BLOCK in BUFFER CACHE, pinned by server process during nested loops join.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
