{"id":1562,"date":"2010-02-17T12:00:00","date_gmt":"2010-02-17T12:00:00","guid":{"rendered":"http:\/\/orcldoug.com\/blog\/?p=1562"},"modified":"2010-02-17T12:00:00","modified_gmt":"2010-02-17T12:00:00","slug":"statistics-on-partitioned-tables-part-1","status":"publish","type":"post","link":"http:\/\/orcldoug.com\/blog\/2010\/02\/17\/statistics-on-partitioned-tables-part-1\/","title":{"rendered":"Statistics on Partitioned Tables &#8211; Part 1"},"content":{"rendered":"<p>If you&#8217;ve ever worked on large databases that use partitioned and subpartitioned tables, you&#8217;ll be aware that there are significant challenges in maintaining up-to-date\/appropriate statistics. We&#8217;ve encountered a few problems at work recently and I decided it would be an idea to put together a series of posts covering the basics of what can become quite an involved topic because it&#8217;s not difficult to find yourself going round in circles reading the documentation, Oracle Support Notes, blog posts, forum threads and the rest until you don&#8217;t know whether you&#8217;re coming or going! <\/p>\n<p>I&#8217;ll steer clear of any remotely advanced angle and try to take some time to show simple, practical examples that might be useful to the great unwashed masses (like me). I&#8217;m pretty certain that everything I&#8217;m going to post has already been written about by the likes of <a href=\"http:\/\/jonathanlewis.wordpress.com\/\">Jonathan Lewis<\/a>, <a href=\"http:\/\/antognini.ch\/blog\/\">Christian Antognini<\/a>, <a href=\"http:\/\/oracle-randolf.blogspot.com\/\">Randolf Geist<\/a>, <a href=\"http:\/\/mwidlake.wordpress.com\/\">Martin Widlake<\/a> and others, but I want to write it in my own way that I can understand &#128521; Sometimes I have a feeling when I write certain blog posts that I&#8217;m<br \/>\ngoing to be discussing things which are apparently obvious to<br \/>\nexperienced people but I&#8217;m not convinced most people <em>quite<\/em><br \/>\nunderstand. I&#8217;ve no idea how many parts there might be because there&#8217;s no plan here, but I know it&#8217;s going to end up being too much for one post.<\/p>\n<p><strong>Added later &#8211; whilst digging out a link to Martin&#8217;s blog, I noticed that he&#8217;s <a href=\"http:\/\/mwidlake.wordpress.com\/2010\/02\/16\/stats-need-stats-to-gather-stats\/\">planning a whole DBMS_STATS series soon<\/a>. Sigh. Keep an eye out for that, because it will be as in-depth as always. I&#8217;ll stick to the simple stuff here!<\/strong><\/p>\n<p>This is all on Oracle 10.2.0.4 running on Linux although we have several stats-related patches applied (probably more on those later) and I&#8217;ll probably run the same tests on my own 11.2.0.1 installation later to identify any differences.<\/p>\n<p>All of the examples will be based on the following table definition<\/p>\n<pre>SQL&gt; CREATE TABLE TEST_TAB1\n(\n\u00a0 REPORTING_DATE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 NUMBER\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 NOT NULL,\n\u00a0 SOURCE_SYSTEM\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 VARCHAR2(30 CHAR)\u00a0\u00a0 NOT NULL,\n\u00a0 SEQ_ID\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 NUMBER\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 NOT NULL,\n\u00a0 STATUS\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 VARCHAR2(1 CHAR)\u00a0\u00a0\u00a0 NOT NULL\n)\nPARTITION BY RANGE (REPORTING_DATE)\nSUBPARTITION BY LIST (SOURCE_SYSTEM)\nSUBPARTITION TEMPLATE\n\u00a0 (SUBPARTITION GROT VALUES ('GROT') TABLESPACE TEST_DAT01,\n\u00a0\u00a0 SUBPARTITION JUNE VALUES ('JUNE') TABLESPACE TEST_DAT01,\n\u00a0\u00a0 SUBPARTITION HALO VALUES ('HALO')\u00a0 TABLESPACE TEST_DAT01,\n\u00a0\u00a0 SUBPARTITION OTHERS\u00a0 VALUES (DEFAULT)\u00a0\u00a0 TABLESPACE TEST_DAT01)\n( \u00a0\n\u00a0 PARTITION P_20100131 VALUES LESS THAN (20100201) NOLOGGING NOCOMPRESS, \u00a0\n\u00a0 PARTITION P_20100201 VALUES LESS THAN (20100202) NOLOGGING NOCOMPRESS, \u00a0\n\u00a0 PARTITION P_20100202 VALUES LESS THAN (20100203) NOLOGGING NOCOMPRESS, \u00a0\n\u00a0 PARTITION P_20100203 VALUES LESS THAN (20100204) NOLOGGING NOCOMPRESS, \u00a0\n\u00a0 PARTITION P_20100204 VALUES LESS THAN (20100205) NOLOGGING NOCOMPRESS, \u00a0\n\u00a0 PARTITION P_20100205 VALUES LESS THAN (20100206) NOLOGGING NOCOMPRESS, \u00a0\n\u00a0 PARTITION P_20100206 VALUES LESS THAN (20100207) NOLOGGING NOCOMPRESS, \u00a0\n\u00a0 PARTITION P_20100207 VALUES LESS THAN (20100208) NOLOGGING NOCOMPRESS \u00a0\n)\nNOCOMPRESS \nNOCACHE\nNOPARALLEL\nMONITORING;\n\nTable created.\n\nSQL&gt; CREATE UNIQUE INDEX TEST_TAB1_IX1 ON TEST_TAB1\n(REPORTING_DATE, SOURCE_SYSTEM, SEQ_ID)\n\u00a0 LOCAL NOPARALLEL COMPRESS 1;\n\nIndex created.\n<\/pre>\n<p>So there is a partition per REPORTING_DATE which is sub-partitioned depending on the SOURCE_SYSTEM that sent the data. It&#8217;s probably worth pointing out at this stage that the table definition and test data does not match that used in the system I&#8217;m working on, but is similar enough to illustrate the issues and is pretty similar to several other systems I&#8217;ve seen or worked on in the past. Speaking of test data, I&#8217;d better insert some.<\/p>\n<pre>SQL&gt; INSERT INTO TEST_TAB1 VALUES (20100201, 'GROT', 1000, 'P');\n\n1 row created.\n\nSQL&gt; INSERT INTO TEST_TAB1 VALUES (20100202, 'GROT', 30000, 'P');\n\n1 row created.\n\nSQL&gt; INSERT INTO TEST_TAB1 VALUES (20100203, 'GROT', 2000, 'P');\n\n1 row created.\n\nSQL&gt; INSERT INTO TEST_TAB1 VALUES (20100204, 'GROT', 1000, 'P');\n\n1 row created.\n\nSQL&gt; INSERT INTO TEST_TAB1 VALUES (20100205, 'GROT', 2400, 'P');\n\n1 row created.\n\nSQL&gt; INSERT INTO TEST_TAB1 VALUES (20100201, 'JUNE', 500, 'P');\n\n1 row created.\n\nSQL&gt; INSERT INTO TEST_TAB1 VALUES (20100201, 'HALO', 700, 'P');\n\n1 row created.\n\nSQL&gt; INSERT INTO TEST_TAB1 VALUES (20100202, 'HALO', 1200, 'P');\n\n1 row created.\n\nSQL&gt; INSERT INTO TEST_TAB1 VALUES (20100201, 'WINE', 400, 'P');\n\n1 row created.\n\nSQL&gt; INSERT INTO TEST_TAB1 VALUES (20100206, 'WINE', 600, 'P');\n\n1 row created.\n\nSQL&gt; INSERT INTO TEST_TAB1 VALUES (20100204, 'WINE', 700, 'P');\n\n1 row created.\n\nSQL&gt; COMMIT;\n\nCommit complete.\n<\/pre>\n<p>With table and data created, I&#8217;ll gather some statistics using default options and it&#8217;s probably worth pointing out at this stage that everyone I&#8217;ve spoken to at Oracle is <em>very<\/em> keen that <a href=\"http:\/\/structureddata.org\/2008\/03\/26\/choosing-an-optimal-stats-gathering-strategy\/\">people should start off with the default options<\/a> for reasons that will hopefully become apparent.<\/p>\n<pre>SQL&gt; exec dbms_stats.gather_table_stats('TESTUSER', 'TEST_TAB1', GRANULARITY =&gt; 'DEFAULT');\n\nPL\/SQL procedure successfully completed.\n<\/pre>\n<p>So let&#8217;s see what statistics have been gathered and focus on the simple NUM_ROWS for now.<\/p>\n<pre>SQL&gt; select\u00a0 table_name, global_stats, last_analyzed, num_rows\n\u00a0 2\u00a0 from user_tables\n\u00a0 3\u00a0 where table_name='TEST_TAB1'\n\u00a0 4\u00a0 order by 1, 2, 4 desc nulls last;\n\nTABLE_NAME\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GLO LAST_ANALYZED\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 NUM_ROWS\n------------------------------ --- -------------------- ----------\nTEST_TAB1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 YES 10-FEB-2010 16:31:17\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 11\n\nSQL&gt; select\u00a0 table_name, partition_name, global_stats, last_analyzed, num_rows\n\u00a0 2\u00a0 from user_tab_partitions\n\u00a0 3\u00a0 where table_name='TEST_TAB1'\n\u00a0 4\u00a0 order by 1, 2, 4 desc nulls last;\n\nTABLE_NAME\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PARTITION_NAME\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GLO LAST_ANALYZED\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 NUM_ROWS\n------------------------------ ------------------------------ --- -------------------- ----------\nTEST_TAB1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P_20100131\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 YES 10-FEB-2010 16:31:17\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\nTEST_TAB1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P_20100201\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 YES 10-FEB-2010 16:31:17\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 4\nTEST_TAB1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P_20100202\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 YES 10-FEB-2010 16:31:17\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2\nTEST_TAB1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P_20100203\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 YES 10-FEB-2010 16:31:17\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\nTEST_TAB1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P_20100204\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 YES 10-FEB-2010 16:31:17\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2\nTEST_TAB1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P_20100205\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 YES 10-FEB-2010 16:31:17\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\nTEST_TAB1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P_20100206\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 YES 10-FEB-2010 16:31:17\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\nTEST_TAB1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P_20100207\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 YES 10-FEB-2010 16:31:17\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0 \n\n8 rows selected.\n\nSQL&gt; select\u00a0 table_name, subpartition_name, global_stats, last_analyzed, num_rows\n\u00a0 2\u00a0 from user_tab_subpartitions\n\u00a0 3\u00a0 where table_name='TEST_TAB1'\n\u00a0 4\u00a0 order by 1, 2, 4 desc nulls last;\n\nTABLE_NAME\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SUBPARTITION_NAME\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GLO LAST_ANALYZED\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 NUM_ROWS\n------------------------------ ------------------------------ --- -------------------- ----------\nTEST_TAB1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P_20100131_GROT\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 NO\u00a0\u00a0 \nTEST_TAB1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P_20100131_HALO\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 NO\u00a0\u00a0 \nTEST_TAB1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P_20100131_JUNE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 NO\u00a0\u00a0 \nTEST_TAB1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P_20100131_OTHERS\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 NO\u00a0\u00a0 \nTEST_TAB1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P_20100201_GROT\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 NO\u00a0\u00a0 \nTEST_TAB1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P_20100201_HALO\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 NO\u00a0\u00a0 \n\n&lt;output snipped ....there are a lot of subpartitions, all missing stats!&gt;\n<\/pre>\n<p>So at the moment the row counts look spot-on and there are Global Statistics on both the Table and the Partitions of the table and no statistics at all on the Subpartitions. First, let&#8217;s talk about global statistics. There are several good resources kicking around describing global stats so I&#8217;ll list just a couple here. I always like a documentation reference and although <a href=\"http:\/\/download.oracle.com\/docs\/cd\/E11882_01\/server.112\/e16638\/stats.htm\">this is the 11.2 documentation<\/a> and so some of it isn&#8217;t correct for 10g, I like the very simple mention of global stats given in the first two paragraphs on 13.3.1.3 &#8211; global stats are statistics on the table that describe the table as a whole, in addition to the stats on the underlying partitions. The important point is that sometimes the optimiser will use the global stats, sometimes the partition stats and sometimes both, depending on the query.\u00a0 For those of you with Support access, <a href=\"https:\/\/support.oracle.com\/CSP\/main\/article?cmd=show&amp;type=NOT&amp;id=236935.1\">Note 236935.1<\/a> goes into more detail.<\/p>\n<p>However, our example is complicated by the fact that we have subpartitions too. So at this stage we have global stats that describe the table as a whole (including all of the underlying partitions) and global stats on each partition that describe that partition (and all of its underlying subpartitions). At this stage, let&#8217;s just assume that having global stats is &#8216;a good thing&#8217; which is why Oracle&#8217;s default option is to gather them at the Table and Partition levels. In the next post I&#8217;ll look at why they&#8217;re important.<\/p>\n<p>Why no Subpartition stats, then? Well, the optimiser is only going to use stats on subpartitions when it can guarantee that it&#8217;s going to use a single subpartition and as that&#8217;s probably less likely than you think, Oracle doesn&#8217;t collect those stats by default, but is able to use higher level partition stats to guess what&#8217;s going on at the subpartition level too. However, if you do think your queries are going to be able to drill down to a specific subpartition effectively, you can choose to gather subpartition statistics too. Beware though that, as far as I&#8217;m aware, the optimiser won&#8217;t use subpartition stats at all, prior to 10.2.0.4 so there&#8217;s no benefit to the additional overhead if you&#8217;re running an earlier version.<\/p>\n<p>In the next post I&#8217;ll look at why global stats are both a good and bad thing &#8230;.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you&#8217;ve ever worked on large databases that use partitioned and subpartitioned tables, you&#8217;ll be aware that there are significant challenges in maintaining up-to-date\/appropriate statistics. We&#8217;ve encountered a few problems at work recently and I decided it would be an idea to put together a series of posts covering the basics of what can become&hellip; <a class=\"more-link\" href=\"http:\/\/orcldoug.com\/blog\/2010\/02\/17\/statistics-on-partitioned-tables-part-1\/\">Continue reading <span class=\"screen-reader-text\">Statistics on Partitioned Tables &#8211; Part 1<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1562","post","type-post","status-publish","format-standard","hentry","category-uncategorized","entry"],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":1590,"url":"http:\/\/orcldoug.com\/blog\/2010\/03\/28\/statistics-on-partitioned-tables-contents\/","url_meta":{"origin":1562,"position":0},"title":"Statistics on Partitioned Tables &#8211; Contents","date":"March 28, 2010","format":false,"excerpt":"When Jonathan Lewis decided it was time to post a list of the Partition Stats posts on his blog and Noons suggested I made them easier to track down, I listened. So this post will link to the others and, at least in the short term, I've also included links\u2026","rel":"","context":"Similar post","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1637,"url":"http:\/\/orcldoug.com\/blog\/2013\/05\/15\/statistics-on-partitioned-tables-part-6e-copy_table_stats-bug\/","url_meta":{"origin":1562,"position":1},"title":"Statistics on Partitioned Tables &#8211; Part 6e &#8211; COPY_TABLE_STATS &#8211; Bug","date":"May 15, 2013","format":false,"excerpt":"I'd bet regular readers might have guessed I'd never get back to the stats series, particularly given my extremely limited output this year Well, here goes ... The theme of this post is already covered in the paper and the presentation, so if you've read either of those, then you\u2026","rel":"","context":"With 2 comments","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1596,"url":"http:\/\/orcldoug.com\/blog\/2010\/04\/22\/statistics-on-partitioned-tables-part-6a-copy_table_stats-intro\/","url_meta":{"origin":1562,"position":2},"title":"Statistics on Partitioned Tables &#8211; Part 6a &#8211; COPY_TABLE_STATS &#8211; Intro","date":"April 22, 2010","format":false,"excerpt":"[Phew. At last. The first draft of this was dated more than two weeks ago .... One of the problems with blogging about copying stats was the balance between explaining it and pointing out some of the problems I've encountered. So I've broken up this post, with a little explanation\u2026","rel":"","context":"With 4 comments","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1602,"url":"http:\/\/orcldoug.com\/blog\/2010\/05\/07\/statistics-on-partitioned-tables-part-6d-copy_table_stats-a-light-bulb-moment\/","url_meta":{"origin":1562,"position":3},"title":"Statistics on Partitioned Tables &#8211; Part 6d &#8211; COPY_TABLE_STATS &#8211; A Light-bulb Moment","date":"May 7, 2010","format":false,"excerpt":"I'm pretty self-concious of the amount of waffle that surrounds any technical content here, so let's get the technical bit out of the way first, then the waffling can come later ...I finally tracked down the mistake I didn't make in part 6a, but thought I'd identified and fixed in\u2026","rel":"","context":"Similar post","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1705,"url":"http:\/\/orcldoug.com\/blog\/2013\/09\/02\/10053-trace-files-global-stats-on-partitioned-tables\/","url_meta":{"origin":1562,"position":4},"title":"10053 Trace Files &#8211; Global Stats on Partitioned Tables","date":"September 2, 2013","format":false,"excerpt":"One of the reasons why it's taken a while to get around to the next 10053 trace file post (apart from the more human reasons I talked about here) is that I'd planned to show how 10053 trace files can show whether the CBO has used Global Statistics on Partitioned\u2026","rel":"","context":"Similar post","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1714,"url":"http:\/\/orcldoug.com\/blog\/2014\/01\/29\/recurring-conversations-incremental-statistics-part-1\/","url_meta":{"origin":1562,"position":5},"title":"Recurring Conversations \u2013 Incremental Statistics (Part 1)","date":"January 29, 2014","format":false,"excerpt":"When I first started blogging, most of the material came from issues that I'd run into and how they were solved but, as I've spent most of the last 7 months not logging in to anything much ;-), it occurred to me that another area which I haven't used for\u2026","rel":"","context":"With 1 comment","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"http:\/\/orcldoug.com\/blog\/wp-json\/wp\/v2\/posts\/1562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/orcldoug.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/orcldoug.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/orcldoug.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/orcldoug.com\/blog\/wp-json\/wp\/v2\/comments?post=1562"}],"version-history":[{"count":0,"href":"http:\/\/orcldoug.com\/blog\/wp-json\/wp\/v2\/posts\/1562\/revisions"}],"wp:attachment":[{"href":"http:\/\/orcldoug.com\/blog\/wp-json\/wp\/v2\/media?parent=1562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/orcldoug.com\/blog\/wp-json\/wp\/v2\/categories?post=1562"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/orcldoug.com\/blog\/wp-json\/wp\/v2\/tags?post=1562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}