{"id":4602,"date":"2015-05-18T07:25:14","date_gmt":"2015-05-18T05:25:14","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/"},"modified":"2015-05-18T07:25:14","modified_gmt":"2015-05-18T05:25:14","slug":"a-migration-pitfall-with-all-column-size-auto","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/","title":{"rendered":"A migration pitfall with ALL COLUMN SIZE AUTO"},"content":{"rendered":"<h2>By Franck Pachot<\/h2>\n<p>.<br \/>\nWhen you migrate, you should be prepared to face some execution plan changing. That&#8217;s not new. But here I&#8217;ll show you a case where you have several bad execution plans because lot of histograms are missing. The version is the same. The system is the same. You&#8217;ve migrated with DataPump importing all statistics. You have the same automatic job to gather statistics with all default options. You have repeated the migration several times on a system where you constantly reproduce the load. Have done a lot of regression tests. Everything was ok.<\/p>\n<p>Then you are ready for the go-live. You migrate production on Sunday. You check everything and you are ready to welcome new connections on Monday.<\/p>\n<p>But on Monday some queries are going bad. Unexpected nested loops &#8211; abnormal CPU usage. Unexpected full table scan &#8211; abnormal I\/O usage. What went wrong? I&#8217;ll reproduce here the case I encountered this morning during a post-migration performance tuning analysis.<\/p>\n<h3>The test case<\/h3>\n<p>In order to show you a reproducible case, I&#8217;ll create the table:<\/p>\n<pre><code>SQL&gt; create table DEMO_SKEW as\n  2  select rownum id , case when mod(rownum,21)!=0 then 0 else 1+mod(rownum,10) end status\n  3  from (select * from dual connect by 1000&gt;=level),(select * from dual connect by 1000&gt;level);\n\nTable created.\n<\/code><\/pre>\n<p>With an index on that STATUS column which is quite skewed (most of status are 0 and a few other status):<\/p>\n<pre><code>SQL&gt; create index DEMO_SKEW_STATUS on DEMO_SKEW(STATUS);\n\nIndex created.\n<\/code><\/pre>\n<p>I calculate statistics in order to have histograms. I could have used a size for the histograms but the method I use here is a clue to help you figure out the issue&#8230;<\/p>\n<pre><code>SQL&gt; exec dbms_stats.gather_table_stats('DEMO','DEMO_SKEW',method_opt=&gt;'for all columns size skewonly');\n\nPL\/SQL procedure successfully completed.\n<\/code><\/pre>\n<p>Ok, so I have frequency histogram with 11 buckets:<\/p>\n<pre><code>SQL&gt; select num_buckets,histogram,last_analyzed from dba_tab_col_statistics where owner='DEMO' and table_name='DEMO_SKEW' and column_name='STATUS';\n\nNUM_BUCKETS HISTOGRAM       LAST_ANA\n----------- --------------- --------\n         11 FREQUENCY       19:34:22\n<\/code><\/pre>\n<h3>Statistic gathering<\/h3>\n<p>Ok, I&#8217;m at the same state as on Sunday where everything is imported with success. Because you know that the physical organization of the tables have changed you run a dbms_stats.gather_database_statistics. You run it with the default options &#8211; exactly as the automatic job did it before, in previous production or in pre-production migration tests.<\/p>\n<p>So let&#8217;s do the same on our test table:<\/p>\n<pre><code>SQL&gt; exec dbms_stats.gather_table_stats('DEMO','DEMO_SKEW',method_opt=&gt;'for all columns size auto');\n\nPL\/SQL procedure successfully completed.\n<\/code><\/pre>\n<p>Then you go home as you want to be at the office when the users will start to connect. Just in case&#8230;<\/p>\n<h3>Then production starts&#8230;<\/h3>\n<p>So here is the kind of queries that I&#8217;ve seen the morning just after a migration.<\/p>\n<pre><code>SQL&gt; alter session set statistics_level=all;\n\nSession altered.\n\nSQL&gt; select count(*) from DEMO_SKEW where status in (1,2,3,4,5);\n\n  COUNT(*)\n----------\n     23809\n\nSQL&gt; select * from table(dbms_xplan.display_cursor(format=&gt;'allstats last'));\n\nPLAN_TABLE_OUTPUT\n-----------------------------------------------------------------------------\nSQL_ID  cbr6yy2vwr6s0, child number 0\n-------------------------------------\nselect count(*) from DEMO_SKEW where status in (1,2,3,4,5)\n\nPlan hash value: 3093139370\n\n-----------------------------------------------------------------------------\n| Id  | Operation          | Name      | Starts | E-Rows | A-Rows | Buffers |\n-----------------------------------------------------------------------------\n|   0 | SELECT STATEMENT   |           |      1 |        |      1 |    1671 |\n|   1 |  SORT AGGREGATE    |           |      1 |      1 |      1 |    1671 |\n|*  2 |   TABLE ACCESS FULL| DEMO_SKEW |      1 |    454K|  23809 |    1671 |\n-----------------------------------------------------------------------------\n\nPredicate Information (identified by operation id):\n---------------------------------------------------\n\n   2 - filter((\"STATUS\"=1 OR \"STATUS\"=2 OR \"STATUS\"=3 OR \"STATUS\"=4 OR\n              \"STATUS\"=5))\n<\/code><\/pre>\n<p>I&#8217;m looking for those very few status and I don&#8217;t expect a full table scan. Each execution here is reading thousand of blocks. Look at the right plan when forcing an index access:<\/p>\n<pre><code>SQL&gt; select \/*+ index(DEMO_SKEW) *\/ count(*) from DEMO_SKEW where status in (1,2,3,4,5);\n\n  COUNT(*)\n----------\n     23809\n\nSQL&gt; select * from table(dbms_xplan.display_cursor(format=&gt;'allstats last'));\n\nPLAN_TABLE_OUTPUT\n------------------------------------------------------------------------------------\nSQL_ID  9nwws35r3vj57, child number 0\n-------------------------------------\nselect \/*+ index(DEMO_SKEW) *\/ count(*) from DEMO_SKEW where status in\n(1,2,3,4,5)\n\nPlan hash value: 3152074358\n\n------------------------------------------------------------------------------------\n| Id  | Operation          | Name             | Starts | E-Rows | A-Rows | Buffers |\n------------------------------------------------------------------------------------\n|   0 | SELECT STATEMENT   |                  |      1 |        |      1 |      58 |\n|   1 |  SORT AGGREGATE    |                  |      1 |      1 |      1 |      58 |\n|   2 |   INLIST ITERATOR  |                  |      1 |        |  23809 |      58 |\n|*  3 |    INDEX RANGE SCAN| DEMO_SKEW_STATUS |      5 |    454K|  23809 |      58 |\n------------------------------------------------------------------------------------\n\nPredicate Information (identified by operation id):\n---------------------------------------------------\n\n   3 - access((\"STATUS\"=1 OR \"STATUS\"=2 OR \"STATUS\"=3 OR \"STATUS\"=4 OR \"STATUS\"=5))\n<\/code><\/pre>\n<p>This is the right plan for those low cardinality status, reading much less blocks. Why did the CBO have chosen a full table scan? Because of cardinality estimation. It estimates to read 454000 rows but actual number of rows is 23000 here.<\/p>\n<h3>Bad estimation comes from missing stats<\/h3>\n<pre><code>SQL&gt; select num_buckets,histogram,last_analyzed from dba_tab_col_statistics where owner='DEMO' and table_name='DEMO_SKEW' and column_name='STATUS';\n\nNUM_BUCKETS HISTOGRAM       LAST_ANA\n----------- --------------- --------\n          1 NONE            19:34:23\n<\/code><\/pre>\n<p>My histograms have disappeared. The CBO estimates as if all status were well distributed among the 10 status:<\/p>\n<pre><code>SQL&gt; select endpoint_number,endpoint_value from dba_tab_histograms where owner='DEMO' and table_name='DEMO_SKEW' and column_name='STATUS';\n\nENDPOINT_NUMBER ENDPOINT_VALUE\n--------------- --------------\n              0              0\n              1             10\n<\/code><\/pre>\n<p>So what was my solution? Gather the statistics:<\/p>\n<pre><code>SQL&gt; exec dbms_stats.gather_table_stats('DEMO','DEMO_SKEW',method_opt=&gt;'for all columns size auto');\n\nPL\/SQL procedure successfully completed.\n<\/code><\/pre>\n<p>And now I have my histograms:<\/p>\n<pre><code>SQL&gt; select num_buckets,histogram,last_analyzed from dba_tab_col_statistics where owner='DEMO' and table_name='DEMO_SKEW' and column_name='STATUS';\n\nNUM_BUCKETS HISTOGRAM       LAST_ANA\n----------- --------------- --------\n         11 FREQUENCY       19:34:24\n\nSQL&gt; select endpoint_number,endpoint_value from dba_tab_histograms where owner='DEMO' and table_name='DEMO_SKEW' and column_name='STATUS';\n\nENDPOINT_NUMBER ENDPOINT_VALUE\n--------------- --------------\n         957142              1\n         961904              2\n         966666              3\n         971428              4\n         976190              5\n         980952              6\n         985714              7\n         990476              8\n         995238              9\n        1000000             10\n         952381              0\n<\/code><\/pre>\n<p>Did you realize that I&#8217;ve gathered statistics with exactly the same options as before? When I&#8217;ve run it just after the migration, my histograms have disappeared. Now running exactly the same they are back. Explanation later&#8230;<\/p>\n<h3>Invalidate cursors<\/h3>\n<p>The statistics gathering was run with the default option &#8211; rolling invalidation. Which means that my bad execution plans &#8211; with full table scan &#8211; are still used. Because I don&#8217;t want too many hard parses at the same time, I invalidate only the plans that I&#8217;ve identified as causing a problem to users:<\/p>\n<pre><code>SQL&gt; exec for c in (select address,hash_value,users_executing,sql_text from v$sqlarea where sql_id='cbr6yy2vwr6s0') loop sys.dbms_shared_pool.purge(c.address||','||c.hash_value,'...'); end loop;\n\nPL\/SQL procedure successfully completed.\n<\/code><\/pre>\n<p>More about that <a href=\"https:\/\/www.dbi-services.com\/index.php\/blog\/entry\/flush-one-sql-statement-to-hard-parse-it-again\">here<\/a>. Then let&#8217;s check the plan &#8211; without hint:<\/p>\n<pre><code>SQL&gt; select count(*) from DEMO_SKEW where status in (1,2,3,4,5);\n\n  COUNT(*)\n----------\n     23809\n\nSQL&gt; select * from table(dbms_xplan.display_cursor(format=&gt;'allstats last'));\n\nPLAN_TABLE_OUTPUT\n------------------------------------------------------------------------------------\nSQL_ID  cbr6yy2vwr6s0, child number 0\n-------------------------------------\nselect count(*) from DEMO_SKEW where status in (1,2,3,4,5)\n\nPlan hash value: 3152074358\n\n------------------------------------------------------------------------------------\n| Id  | Operation          | Name             | Starts | E-Rows | A-Rows | Buffers |\n------------------------------------------------------------------------------------\n|   0 | SELECT STATEMENT   |                  |      1 |        |      1 |      58 |\n|   1 |  SORT AGGREGATE    |                  |      1 |      1 |      1 |      58 |\n|   2 |   INLIST ITERATOR  |                  |      1 |        |  23809 |      58 |\n|*  3 |    INDEX RANGE SCAN| DEMO_SKEW_STATUS |      5 |  23809 |  23809 |      58 |\n------------------------------------------------------------------------------------\n\n\nPredicate Information (identified by operation id):\n---------------------------------------------------\n\n   3 - access((\"STATUS\"=1 OR \"STATUS\"=2 OR \"STATUS\"=3 OR \"STATUS\"=4 OR \"STATUS\"=5))\n<\/code><\/pre>\n<p>Good plan because of good estimations. Now that I have the frequency histogram, the cardinality of each status is known.<\/p>\n<h3>SIZE AUTO<\/h3>\n<p>So what happened with that &#8216;for all columns size auto&#8217; that do not consistently calculate histograms ?<br \/>\nThere are 3 ways to define the histogram size:<\/p>\n<ul>\n<li><strong>SIZE<\/strong> n where you define the number of buckets. 1 means no histograms. &gt;1 means histograms.<\/li>\n<li><strong>SIZE SKEWONLY<\/strong> where Oracle will choose to gather histograms when it sees that values are not evenly distributed &#8211; know as skewed.<\/li>\n<li><strong>SIZE AUTO<\/strong> where histograms are gathered when values are skewed and there were some predicates on that column where histogram may change the plan.<\/li>\n<\/ul>\n<p>So think about it. Just after the import we had brand new objects with skewed values, but no queries yet. No were clause predicates have been recorded. Then the SIZE AUTO did not gather any histograms.<\/p>\n<p>After having run my query once, the usage of columns have been recorded. We can query them:<\/p>\n<pre><code>SQL&gt; select dbms_stats.report_col_usage(user,'DEMO_SKEW') from dual;\n\nDBMS_STATS.REPORT_COL_USAGE(USER,'DEMO_SKEW')\n-------------------------------------------------------------\nLEGEND:\n.......\n\nEQ         : Used in single table EQuality predicate\nRANGE      : Used in single table RANGE predicate\nLIKE       : Used in single table LIKE predicate\nNULL       : Used in single table is (not) NULL predicate\nEQ_JOIN    : Used in EQuality JOIN predicate\nNONEQ_JOIN : Used in NON EQuality JOIN predicate\nFILTER     : Used in single table FILTER predicate\nJOIN       : Used in JOIN predicate\nGROUP_BY   : Used in GROUP BY expression\n............................................................\n\n############################################################\n\nCOLUMN USAGE REPORT FOR DEMO.DEMO_SKEW\n......................................\n\n1. STATUS                              : EQ\n############################################################\n<\/code><\/pre>\n<p>Which simply means that a query having an equality predicate on the STATUS column have been seen. Thus, if values are skewed, dbms_stats will gather histogram for it.<\/p>\n<p>But just after the migration that was empty and no histograms have been gathered.<\/p>\n<h3>Solution (updated May 2017)<\/h3>\n<p>One solution could have been to gather statistics with SKEWONLY, but the risk is to have too many histograms. Another solution could have been to lock statistics for a few days just after the import but they don&#8217;t reflect the new physical organization. Probably the best solution to avoid new plans would have been to use REPEAT instead of AUTO until enough column usage has been gathered (a few days). Note that when migrating from 11g the column usage comes with impdp, and can be manually imported with DBMS_STATS.MERGE_COL_USAGE.<br \/>\nYou should also read <a href=\"https:\/\/sqlmaria.com\/2017\/05\/09\/optimizer-histograms\/\" target=\"_blank\" rel=\"noopener noreferrer\">Maria Colgan blog about histograms<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Franck Pachot . When you migrate, you should be prepared to face some execution plan changing. That&#8217;s not new. But here I&#8217;ll show you a case where you have several bad execution plans because lot of histograms are missing. The version is the same. The system is the same. You&#8217;ve migrated with DataPump importing [&hellip;]<\/p>\n","protected":false},"author":27,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[198,59],"tags":[96],"type_dbi":[],"class_list":["post-4602","post","type-post","status-publish","format-standard","hentry","category-database-management","category-oracle","tag-oracle"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>A migration pitfall with ALL COLUMN SIZE AUTO - dbi Blog<\/title>\n<meta name=\"description\" content=\"Execution plan changing after migration\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A migration pitfall with ALL COLUMN SIZE AUTO\" \/>\n<meta property=\"og:description\" content=\"Execution plan changing after migration\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-05-18T05:25:14+00:00\" \/>\n<meta name=\"author\" content=\"Oracle Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Oracle Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"headline\":\"A migration pitfall with ALL COLUMN SIZE AUTO\",\"datePublished\":\"2015-05-18T05:25:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/\"},\"wordCount\":895,\"commentCount\":0,\"keywords\":[\"Oracle\"],\"articleSection\":[\"Database management\",\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/\",\"name\":\"A migration pitfall with ALL COLUMN SIZE AUTO - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2015-05-18T05:25:14+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"description\":\"Execution plan changing after migration\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A migration pitfall with ALL COLUMN SIZE AUTO\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\",\"name\":\"Oracle Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"caption\":\"Oracle Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"A migration pitfall with ALL COLUMN SIZE AUTO - dbi Blog","description":"Execution plan changing after migration","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/","og_locale":"en_US","og_type":"article","og_title":"A migration pitfall with ALL COLUMN SIZE AUTO","og_description":"Execution plan changing after migration","og_url":"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/","og_site_name":"dbi Blog","article_published_time":"2015-05-18T05:25:14+00:00","author":"Oracle Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Oracle Team","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"headline":"A migration pitfall with ALL COLUMN SIZE AUTO","datePublished":"2015-05-18T05:25:14+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/"},"wordCount":895,"commentCount":0,"keywords":["Oracle"],"articleSection":["Database management","Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/","url":"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/","name":"A migration pitfall with ALL COLUMN SIZE AUTO - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2015-05-18T05:25:14+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"description":"Execution plan changing after migration","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"A migration pitfall with ALL COLUMN SIZE AUTO"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee","name":"Oracle Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","caption":"Oracle Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/4602","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=4602"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/4602\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=4602"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=4602"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=4602"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=4602"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}