<?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: Consistently Inconsistent Consistent Gets</title>
	<atom:link href="http://hoopercharles.wordpress.com/2010/03/16/consistently-inconsistent-consistent-gets/feed/" rel="self" type="application/rss+xml" />
	<link>http://hoopercharles.wordpress.com/2010/03/16/consistently-inconsistent-consistent-gets/</link>
	<description>Miscellaneous Random Oracle Topics: Stop, Think, ... Understand</description>
	<lastBuildDate>Thu, 13 Jun 2013 22:46:43 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: Charles Hooper</title>
		<link>http://hoopercharles.wordpress.com/2010/03/16/consistently-inconsistent-consistent-gets/#comment-722</link>
		<dc:creator><![CDATA[Charles Hooper]]></dc:creator>
		<pubDate>Wed, 28 Apr 2010 17:11:41 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=1715#comment-722</guid>
		<description><![CDATA[Coskan,

Thank you for sharing the formula.  That formula is either very close or exactly right - I cannot tell at the moment because I am showing that the table in this database contains 16217 blocks, which based on the formula you provided, suggests that the actual number of blocks in the original test table should be about 16,378 (this is possible, but I cannot check right now).

For those that decide to test the values shown for the fetch array size of 1, keep in mind that the article states: &quot;As you can see from the above, when the fetch array size was set to 1, SQL*Plus actually operated as if the fetch array size was set to 2.&quot;

Thank you for contributing to the article.]]></description>
		<content:encoded><![CDATA[<p>Coskan,</p>
<p>Thank you for sharing the formula.  That formula is either very close or exactly right &#8211; I cannot tell at the moment because I am showing that the table in this database contains 16217 blocks, which based on the formula you provided, suggests that the actual number of blocks in the original test table should be about 16,378 (this is possible, but I cannot check right now).</p>
<p>For those that decide to test the values shown for the fetch array size of 1, keep in mind that the article states: &#8220;As you can see from the above, when the fetch array size was set to 1, SQL*Plus actually operated as if the fetch array size was set to 2.&#8221;</p>
<p>Thank you for contributing to the article.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: coskan</title>
		<link>http://hoopercharles.wordpress.com/2010/03/16/consistently-inconsistent-consistent-gets/#comment-720</link>
		<dc:creator><![CDATA[coskan]]></dc:creator>
		<pubDate>Wed, 28 Apr 2010 14:53:42 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=1715#comment-720</guid>
		<description><![CDATA[I think it can also be nice to add the single table FTS access consistent gets formula in terms of relationship of arraysize  number of blocks and rows 

consistent gets are more or less equal to the formula below for a single full table scan (depends on the tablespace management is auto or manual )

(NUM_ROWS / ARRAYSIZE)+NUM_BLOCKS.

Like &lt;a href=&quot;http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:880343948514&quot; rel=&quot;nofollow&quot;&gt;Tom Kyte&lt;/a&gt; and &lt;a href=&quot;http://viveklsharma.wordpress.com/2010/03/04/consistent-gets-myth/&quot; rel=&quot;nofollow&quot;&gt;&quot;&gt;Vivek  Sharma&lt;/a&gt; explained

I am not sure if it can be formulated for joins but it is nice to know the formula]]></description>
		<content:encoded><![CDATA[<p>I think it can also be nice to add the single table FTS access consistent gets formula in terms of relationship of arraysize  number of blocks and rows </p>
<p>consistent gets are more or less equal to the formula below for a single full table scan (depends on the tablespace management is auto or manual )</p>
<p>(NUM_ROWS / ARRAYSIZE)+NUM_BLOCKS.</p>
<p>Like <a href="http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:880343948514" rel="nofollow">Tom Kyte</a> and <a href="http://viveklsharma.wordpress.com/2010/03/04/consistent-gets-myth/" rel="nofollow">&#8220;&gt;Vivek  Sharma</a> explained</p>
<p>I am not sure if it can be formulated for joins but it is nice to know the formula</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Charles Hooper</title>
		<link>http://hoopercharles.wordpress.com/2010/03/16/consistently-inconsistent-consistent-gets/#comment-626</link>
		<dc:creator><![CDATA[Charles Hooper]]></dc:creator>
		<pubDate>Fri, 09 Apr 2010 18:16:44 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=1715#comment-626</guid>
		<description><![CDATA[Donatello,

Thanks for contributing your test case in this blog article.  It is interesting that removing the unique contraint affects the execution plan.

My test showed that there was only about a 7 second time difference between the fetch array size of 200 and the fetch array size of 2000 (01:29.87 - 01:22.25) on Oracle 11.2.0.1.  On Oracle 11.1.0.6 the difference was only about 2.5 seconds (01:24.48 - 01:21.96).  I noticed that my times were a bit faster than were your times - I wonder if network performance might be a limiting factor that causes your execution time to level off with a fetch array size of 200.  If the client computer was also the server computer (no network involved) it could be that you reached the server&#039;s memory throughput/transfers per second threshold.

I am not sure what the correct answer is for your question.  The answer might depend on the execution plan - whether there are nested loop joins, hash joins, etc.  By reviewing my summarized test case output, the number of consistent gets perform continued to decrease as the array fetch size increased.

You might take a look at the comment made in this thread by Jonathan Lewis:
http://forums.oracle.com/forums/thread.jspa?threadID=973560&amp;start=0&amp;tstart=0
&quot;If the query really is nothing but a UNION ALL of five tablescans, then what it the array fetch size ? If the array fetch size is large enough the number of block visits would be similar to the number of physical block reads. If the arraysize is one then the number of block visits could be close to the number of rows fetched as a block has to be released at the end of each fetch and the reacquired for the next fetch.&quot;]]></description>
		<content:encoded><![CDATA[<p>Donatello,</p>
<p>Thanks for contributing your test case in this blog article.  It is interesting that removing the unique contraint affects the execution plan.</p>
<p>My test showed that there was only about a 7 second time difference between the fetch array size of 200 and the fetch array size of 2000 (01:29.87 &#8211; 01:22.25) on Oracle 11.2.0.1.  On Oracle 11.1.0.6 the difference was only about 2.5 seconds (01:24.48 &#8211; 01:21.96).  I noticed that my times were a bit faster than were your times &#8211; I wonder if network performance might be a limiting factor that causes your execution time to level off with a fetch array size of 200.  If the client computer was also the server computer (no network involved) it could be that you reached the server&#8217;s memory throughput/transfers per second threshold.</p>
<p>I am not sure what the correct answer is for your question.  The answer might depend on the execution plan &#8211; whether there are nested loop joins, hash joins, etc.  By reviewing my summarized test case output, the number of consistent gets perform continued to decrease as the array fetch size increased.</p>
<p>You might take a look at the comment made in this thread by Jonathan Lewis:<br />
<a href="http://forums.oracle.com/forums/thread.jspa?threadID=973560&#038;start=0&#038;tstart=0" rel="nofollow">http://forums.oracle.com/forums/thread.jspa?threadID=973560&#038;start=0&#038;tstart=0</a><br />
&#8220;If the query really is nothing but a UNION ALL of five tablescans, then what it the array fetch size ? If the array fetch size is large enough the number of block visits would be similar to the number of physical block reads. If the arraysize is one then the number of block visits could be close to the number of rows fetched as a block has to be released at the end of each fetch and the reacquired for the next fetch.&#8221;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Donatello Settembrino</title>
		<link>http://hoopercharles.wordpress.com/2010/03/16/consistently-inconsistent-consistent-gets/#comment-624</link>
		<dc:creator><![CDATA[Donatello Settembrino]]></dc:creator>
		<pubDate>Fri, 09 Apr 2010 15:02:22 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=1715#comment-624</guid>
		<description><![CDATA[Hi Charles,
I read your interesting test that I came immediately to mind
a post by Christian Antognini (where to take part on and also mentioned by Gary)
that the &quot;join elimination&quot;. I ran your test
my DB version 11.2.0.1.0, getting your own results 

&lt;pre&gt;
--------------------------------------------------------------------------
&#124; Id  &#124; Operation         &#124; Name &#124; Rows  &#124; Bytes &#124; Cost (%CPU)&#124; Time     &#124;
--------------------------------------------------------------------------
&#124;   0 &#124; SELECT STATEMENT  &#124;      &#124;  1000K&#124;   105M&#124;  2717   (2)&#124; 00:00:39 &#124;
&#124;*  1 &#124;  TABLE ACCESS FULL&#124; T5   &#124;  1000K&#124;   105M&#124;  2717   (2)&#124; 00:00:39 &#124;
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(&quot;T51&quot;.&quot;C1&quot;&gt;=&#039;A 0000000&#039; AND &quot;T51&quot;.&quot;C1&quot;
 
alter table t5 drop constraint SYS_C00807645;
&lt;/pre&gt;

obtain the following execution plan .. hint applies when
the constraint no longer exists ....identical to what you got with version 11.1.0.6 .... 

&lt;pre&gt;
---------------------------------------------------------------------------------
&#124; Id  &#124; Operation                &#124; Name &#124; Rows  &#124; Bytes &#124; Cost (%CPU)&#124; Time     &#124;
---------------------------------------------------------------------------------
&#124;   0 &#124; SELECT STATEMENT         &#124;      &#124;  1000K&#124;   846M&#124;    19G  (2)&#124;999:59:59 &#124;
&#124;   1 &#124;  NESTED LOOPS            &#124;      &#124;  1000K&#124;   846M&#124;    19G  (2)&#124;999:59:59 &#124;
&#124;   2 &#124;   NESTED LOOPS           &#124;      &#124;  1000K&#124;   741M&#124;    16G  (2)&#124;999:59:59 &#124;
&#124;   3 &#124;    NESTED LOOPS          &#124;      &#124;  1000K&#124;   635M&#124;    13G  (2)&#124;999:59:59 &#124;
&#124;   4 &#124;     NESTED LOOPS         &#124;      &#124;  1000K&#124;   529M&#124;    10G  (2)&#124;999:59:59 &#124;
&#124;   5 &#124;      NESTED LOOPS        &#124;      &#124;  1000K&#124;   423M&#124;  8145M  (2)&#124;999:59:59 &#124;
&#124;   6 &#124;       NESTED LOOPS       &#124;      &#124;  1000K&#124;   317M&#124;  5430M  (2)&#124;999:59:59 &#124;
&#124;   7 &#124;        NESTED LOOPS      &#124;      &#124;  1000K&#124;   211M&#124;  2715M  (2)&#124;999:59:59 &#124;
&#124;*  8 &#124;         TABLE ACCESS FULL&#124; T5   &#124;  1000K&#124;   105M&#124;  2717   (2)&#124; 00:00:39 &#124;
&#124;*  9 &#124;         TABLE ACCESS FULL&#124; T5   &#124;     1 &#124;   111 &#124;  2715   (2)&#124; 00:00:39 &#124;
&#124;* 10 &#124;        TABLE ACCESS FULL &#124; T5   &#124;     1 &#124;   111 &#124;  2715   (2)&#124; 00:00:39 &#124;
&#124;* 11 &#124;       TABLE ACCESS FULL  &#124; T5   &#124;     1 &#124;   111 &#124;  2715   (2)&#124; 00:00:39 &#124;
&#124;* 12 &#124;      TABLE ACCESS FULL   &#124; T5   &#124;     1 &#124;   111 &#124;  2715   (2)&#124; 00:00:39 &#124;
&#124;* 13 &#124;     TABLE ACCESS FULL    &#124; T5   &#124;     1 &#124;   111 &#124;  2715   (2)&#124; 00:00:39 &#124;
&#124;* 14 &#124;    TABLE ACCESS FULL     &#124; T5   &#124;     1 &#124;   111 &#124;  2715   (2)&#124; 00:00:39 &#124;
&#124;* 15 &#124;   TABLE ACCESS FULL      &#124; T5   &#124;     1 &#124;   111 &#124;  2715   (2)&#124; 00:00:39 &#124;
---------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   8 - filter(&quot;T51&quot;.&quot;C1&quot;&gt;=&#039;A 0000000&#039; AND &quot;T51&quot;.&quot;C1&quot;=&#039;A 0000000&#039; AND &quot;T52&quot;.&quot;C1&quot;=&#039;A 0000000&#039; AND &quot;T53&quot;.&quot;C1&quot;=&#039;A 0000000&#039; AND &quot;T54&quot;.&quot;C1&quot;=&#039;A 0000000&#039; AND &quot;T55&quot;.&quot;C1&quot;=&#039;A 0000000&#039; AND &quot;T56&quot;.&quot;C1&quot;=&#039;A 0000000&#039; AND &quot;T57&quot;.&quot;C1&quot;=&#039;A 0000000&#039; AND &quot;T58&quot;.&quot;C1&quot;&lt;=&#039;A 1000000&#039; AND
              &quot;T51&quot;.&quot;C1&quot;=&quot;T58&quot;.&quot;C1&quot;)
&lt;/pre&gt;

I would like to ask a question instead on logical reads.
I re-run your tests twice, the first with ArraySize default (if I remember correctly is equal to 15) and the second ArraySize 200. 


&lt;pre&gt;
select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for IBM/AIX RISC System/6000: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

With arraysize 15 (default)


Elapsed: 00:14:41.71

Statistiche
----------------------------------------------------------
          1  recursive calls
          0  db block gets
      74776  consistent gets
          0  physical reads
          0  redo size
   89664222  bytes sent via SQL*Net to client
     466899  bytes received via SQL*Net from client
      66668  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
    1000000  rows processed
&lt;/pre&gt;


With arraysize 200

&lt;pre&gt;
Elapsed: 00:02:52.76

Statistiche
----------------------------------------------------------
          1  recursive calls
          0  db block gets
      13118  consistent gets
          0  physical reads
          0  redo size
   86271849  bytes sent via SQL*Net to client
      35230  bytes received via SQL*Net from client
       5001  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
    1000000  rows processed
&lt;/pre&gt;

whereas in tests carried my table has the following features:.... 

&lt;pre&gt;
select num_rows, blocks, trunc(num_rows/blocks) row_for_block 
from user_tables
where table_name = &#039;T5&#039;;

  NUM_ROWS     BLOCKS     ROW_FOR_BLOCK
---------- ---------- -------------
   1000000       8107           123
&lt;/pre&gt;

I do not get significant benefits by increasing further ArraySize(in my case 200), in fact if I set arraysize at a number greater than the number of rows stored in Each single table blocks, the number of logical reads is close to the number of the table&#039;s
blocks... right? 

Thanks a lot

Regards

Donatello Settembrino]]></description>
		<content:encoded><![CDATA[<p>Hi Charles,<br />
I read your interesting test that I came immediately to mind<br />
a post by Christian Antognini (where to take part on and also mentioned by Gary)<br />
that the &#8220;join elimination&#8221;. I ran your test<br />
my DB version 11.2.0.1.0, getting your own results </p>
<pre>
--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |  1000K|   105M|  2717   (2)| 00:00:39 |
|*  1 |  TABLE ACCESS FULL| T5   |  1000K|   105M|  2717   (2)| 00:00:39 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("T51"."C1"&gt;='A 0000000' AND "T51"."C1"
 
alter table t5 drop constraint SYS_C00807645;
</pre>
<p>obtain the following execution plan .. hint applies when<br />
the constraint no longer exists &#8230;.identical to what you got with version 11.1.0.6 &#8230;. </p>
<pre>
---------------------------------------------------------------------------------
| Id  | Operation                | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------
|   0 | SELECT STATEMENT         |      |  1000K|   846M|    19G  (2)|999:59:59 |
|   1 |  NESTED LOOPS            |      |  1000K|   846M|    19G  (2)|999:59:59 |
|   2 |   NESTED LOOPS           |      |  1000K|   741M|    16G  (2)|999:59:59 |
|   3 |    NESTED LOOPS          |      |  1000K|   635M|    13G  (2)|999:59:59 |
|   4 |     NESTED LOOPS         |      |  1000K|   529M|    10G  (2)|999:59:59 |
|   5 |      NESTED LOOPS        |      |  1000K|   423M|  8145M  (2)|999:59:59 |
|   6 |       NESTED LOOPS       |      |  1000K|   317M|  5430M  (2)|999:59:59 |
|   7 |        NESTED LOOPS      |      |  1000K|   211M|  2715M  (2)|999:59:59 |
|*  8 |         TABLE ACCESS FULL| T5   |  1000K|   105M|  2717   (2)| 00:00:39 |
|*  9 |         TABLE ACCESS FULL| T5   |     1 |   111 |  2715   (2)| 00:00:39 |
|* 10 |        TABLE ACCESS FULL | T5   |     1 |   111 |  2715   (2)| 00:00:39 |
|* 11 |       TABLE ACCESS FULL  | T5   |     1 |   111 |  2715   (2)| 00:00:39 |
|* 12 |      TABLE ACCESS FULL   | T5   |     1 |   111 |  2715   (2)| 00:00:39 |
|* 13 |     TABLE ACCESS FULL    | T5   |     1 |   111 |  2715   (2)| 00:00:39 |
|* 14 |    TABLE ACCESS FULL     | T5   |     1 |   111 |  2715   (2)| 00:00:39 |
|* 15 |   TABLE ACCESS FULL      | T5   |     1 |   111 |  2715   (2)| 00:00:39 |
---------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   8 - filter("T51"."C1"&gt;='A 0000000' AND "T51"."C1"='A 0000000' AND "T52"."C1"='A 0000000' AND "T53"."C1"='A 0000000' AND "T54"."C1"='A 0000000' AND "T55"."C1"='A 0000000' AND "T56"."C1"='A 0000000' AND "T57"."C1"='A 0000000' AND "T58"."C1"&lt;=&#39;A 1000000&#39; AND
              &quot;T51&quot;.&quot;C1&quot;=&quot;T58&quot;.&quot;C1&quot;)
</pre>
<p>I would like to ask a question instead on logical reads.<br />
I re-run your tests twice, the first with ArraySize default (if I remember correctly is equal to 15) and the second ArraySize 200. </p>
<pre>
select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for IBM/AIX RISC System/6000: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

With arraysize 15 (default)


Elapsed: 00:14:41.71

Statistiche
----------------------------------------------------------
          1  recursive calls
          0  db block gets
      74776  consistent gets
          0  physical reads
          0  redo size
   89664222  bytes sent via SQL*Net to client
     466899  bytes received via SQL*Net from client
      66668  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
    1000000  rows processed
</pre>
<p>With arraysize 200</p>
<pre>
Elapsed: 00:02:52.76

Statistiche
----------------------------------------------------------
          1  recursive calls
          0  db block gets
      13118  consistent gets
          0  physical reads
          0  redo size
   86271849  bytes sent via SQL*Net to client
      35230  bytes received via SQL*Net from client
       5001  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
    1000000  rows processed
</pre>
<p>whereas in tests carried my table has the following features:&#8230;. </p>
<pre>
select num_rows, blocks, trunc(num_rows/blocks) row_for_block 
from user_tables
where table_name = &#39;T5&#39;;

  NUM_ROWS     BLOCKS     ROW_FOR_BLOCK
---------- ---------- -------------
   1000000       8107           123
</pre>
<p>I do not get significant benefits by increasing further ArraySize(in my case 200), in fact if I set arraysize at a number greater than the number of rows stored in Each single table blocks, the number of logical reads is close to the number of the table&#39;s<br />
blocks&#8230; right? </p>
<p>Thanks a lot</p>
<p>Regards</p>
<p>Donatello Settembrino</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Fetch as Much as You Can &#171; I&#39;m just a simple DBA on a complex production system</title>
		<link>http://hoopercharles.wordpress.com/2010/03/16/consistently-inconsistent-consistent-gets/#comment-549</link>
		<dc:creator><![CDATA[Fetch as Much as You Can &#171; I&#39;m just a simple DBA on a complex production system]]></dc:creator>
		<pubDate>Wed, 24 Mar 2010 02:18:46 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=1715#comment-549</guid>
		<description><![CDATA[[...] Hooper blogged last week with a new reason to use large fetch sizes: Turns out that it allows Oracle to pin the block for the length of the fetch. He references an OTN [...]]]></description>
		<content:encoded><![CDATA[<p>[...] Hooper blogged last week with a new reason to use large fetch sizes: Turns out that it allows Oracle to pin the block for the length of the fetch. He references an OTN [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Charles Hooper</title>
		<link>http://hoopercharles.wordpress.com/2010/03/16/consistently-inconsistent-consistent-gets/#comment-535</link>
		<dc:creator><![CDATA[Charles Hooper]]></dc:creator>
		<pubDate>Fri, 19 Mar 2010 13:38:31 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=1715#comment-535</guid>
		<description><![CDATA[Hi Gary,

Thanks for providing the link - I agree, his case #2 explains very clearly what happened during my test run on 11.2.0.1.  I thought that the feature was called &lt;a href=&quot;http://optimizermagic.blogspot.com/2008/06/why-are-some-of-tables-in-my-query.html&quot; rel=&quot;nofollow&quot;&gt;table elimination&lt;/a&gt; (where a parent table could be eliminated if a foreign key constraint is present and no columns from the parent are returned), but the 10053 trace shows that it is correctly referred to as join elimination.  

It is impressive to see that this join elimination works with self joins, but I wonder if it would still work if there were different WHERE clause predicates for each of the aliases - for instance an EMPLOYEES table that lists the employee&#039;s supervisor in one column, so a self join would be needed to determine for all of the employees, which employees they supervise.  It might be something interesting to explore.]]></description>
		<content:encoded><![CDATA[<p>Hi Gary,</p>
<p>Thanks for providing the link &#8211; I agree, his case #2 explains very clearly what happened during my test run on 11.2.0.1.  I thought that the feature was called <a href="http://optimizermagic.blogspot.com/2008/06/why-are-some-of-tables-in-my-query.html" rel="nofollow">table elimination</a> (where a parent table could be eliminated if a foreign key constraint is present and no columns from the parent are returned), but the 10053 trace shows that it is correctly referred to as join elimination.  </p>
<p>It is impressive to see that this join elimination works with self joins, but I wonder if it would still work if there were different WHERE clause predicates for each of the aliases &#8211; for instance an EMPLOYEES table that lists the employee&#8217;s supervisor in one column, so a self join would be needed to determine for all of the employees, which employees they supervise.  It might be something interesting to explore.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Gary</title>
		<link>http://hoopercharles.wordpress.com/2010/03/16/consistently-inconsistent-consistent-gets/#comment-532</link>
		<dc:creator><![CDATA[Gary]]></dc:creator>
		<pubDate>Fri, 19 Mar 2010 04:00:41 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=1715#comment-532</guid>
		<description><![CDATA[It seems to fit case#2 in Christian Antognini&#039;s post
http://antognini.ch/2010/01/join-elimination/

Maybe I&#039;d get used to it if I was using 11gR2 as a primary platform.]]></description>
		<content:encoded><![CDATA[<p>It seems to fit case#2 in Christian Antognini&#8217;s post<br />
<a href="http://antognini.ch/2010/01/join-elimination/" rel="nofollow">http://antognini.ch/2010/01/join-elimination/</a></p>
<p>Maybe I&#8217;d get used to it if I was using 11gR2 as a primary platform.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Charles Hooper</title>
		<link>http://hoopercharles.wordpress.com/2010/03/16/consistently-inconsistent-consistent-gets/#comment-516</link>
		<dc:creator><![CDATA[Charles Hooper]]></dc:creator>
		<pubDate>Wed, 17 Mar 2010 11:35:14 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=1715#comment-516</guid>
		<description><![CDATA[Hi Gary,

Thanks for stopping by and providing a comment.  I was thinking the same thing regarding the changes to the ARRAYSIZE setting.  My Faulty Quotes blog article about the &lt;a href=&quot;http://hoopercharles.wordpress.com/2009/12/22/faulty-quotes-4-buffer-cache-hit-ratio-bchr/&quot; rel=&quot;nofollow&quot;&gt;buffer cache hit ratio&lt;/a&gt; metric references &lt;a href=&quot;http://www.jlcomp.demon.co.uk/hit_ratio.rtf&quot; rel=&quot;nofollow&quot;&gt;this document&lt;/a&gt; and &lt;a href=&quot;http://forums.oracle.com/forums/thread.jspa?threadID=973560&amp;tstart=0&quot; rel=&quot;nofollow&quot;&gt;this OTN thread&lt;/a&gt; where Jonathan Lewis described how Oracle is able to grab a block and pin it when the fetch array size is increased, thus reducing the consistent gets statistic.

When I first saw Oracle 11.2.0.1&#039;s consistent gets statistic for this query, I immediately thought that maybe Oracle 11.2.0.1 had greatly improved the block pinning behavior.  I was surprise, shocked, maybe even a little impressed when I saw that the 8 way self-join was collapsed into a single full table scan.]]></description>
		<content:encoded><![CDATA[<p>Hi Gary,</p>
<p>Thanks for stopping by and providing a comment.  I was thinking the same thing regarding the changes to the ARRAYSIZE setting.  My Faulty Quotes blog article about the <a href="http://hoopercharles.wordpress.com/2009/12/22/faulty-quotes-4-buffer-cache-hit-ratio-bchr/" rel="nofollow">buffer cache hit ratio</a> metric references <a href="http://www.jlcomp.demon.co.uk/hit_ratio.rtf" rel="nofollow">this document</a> and <a href="http://forums.oracle.com/forums/thread.jspa?threadID=973560&amp;tstart=0" rel="nofollow">this OTN thread</a> where Jonathan Lewis described how Oracle is able to grab a block and pin it when the fetch array size is increased, thus reducing the consistent gets statistic.</p>
<p>When I first saw Oracle 11.2.0.1&#8242;s consistent gets statistic for this query, I immediately thought that maybe Oracle 11.2.0.1 had greatly improved the block pinning behavior.  I was surprise, shocked, maybe even a little impressed when I saw that the 8 way self-join was collapsed into a single full table scan.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Gary</title>
		<link>http://hoopercharles.wordpress.com/2010/03/16/consistently-inconsistent-consistent-gets/#comment-509</link>
		<dc:creator><![CDATA[Gary]]></dc:creator>
		<pubDate>Tue, 16 Mar 2010 22:09:35 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=1715#comment-509</guid>
		<description><![CDATA[Revisiting blocks would be my guess. If Oracle can get all the information it needs in a single fetch, it only needs to grab the block once.  With a small ARRAYSIZE it will need to go back to the same block several times.]]></description>
		<content:encoded><![CDATA[<p>Revisiting blocks would be my guess. If Oracle can get all the information it needs in a single fetch, it only needs to grab the block once.  With a small ARRAYSIZE it will need to go back to the same block several times.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
