{"id":4318,"date":"2022-08-26T15:46:31","date_gmt":"2022-08-26T15:46:31","guid":{"rendered":"https:\/\/nenadnoveljic.com\/blog\/?p=4318"},"modified":"2022-08-26T15:46:32","modified_gmt":"2022-08-26T15:46:32","slug":"undocumented-implicit-partition-statistics-gathering","status":"publish","type":"post","link":"https:\/\/nenadnoveljic.com\/blog\/undocumented-implicit-partition-statistics-gathering\/","title":{"rendered":"Undocumented Implicit Partition Statistics Gathering"},"content":{"rendered":"<h1>Statistics granularity<\/h1>\n<p><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/19\/arpls\/DBMS_STATS.html#GUID-CA6A56B9-0540-45E9-B1D7-D78769B7714C\">DBMS_STATS.GATHER_TABLE_STATS<\/a> accepts the argument GRANULARITY. The argument GRANULARITY defines the scope for partitioned tables. For example, GRANULARITY=SUBPARTITION gathers only subpartition statistics. Gathering partition statistics requires another GATHER_TABLE_STATS call with GRANULARITY=PARTITION.<\/p>\n<p>This article describes a condition which leads to undocumented implicit calculation of partition statistics when GRANULARITY=SUBPARTITION. I tested the behavior with the following Oracle releases: 19.7, 19.13, 19.16 and 21.6<\/p>\n<h1>Subpartition statistics<\/h1>\n<p>To demonstrate the anomaly I&#8217;m creating a table with a partition and a subpartition:<\/p>\n<pre><code>\ncreate user u identified by Pasword_1111 ;\n\ngrant dba to u ;\n\nconnect u\/Pasword_1111\n\ndrop table t ;\n\ncreate table t\n  (\n    n1 number,\n\tn2 number\n  )\n  partition by range (n1)\n     subpartition by range (n2)\n     subpartition template\n     (subpartition sp_1  values less than (10))\n  (\n     partition p_1 values less than (5)\n  );\n\nexec dbms_stats.gather_table_stats(null, 'T') ;\n<\/code><\/pre>\n<p>Gathering statistics with GRANULARITY=SUBPARTITION behaves as expected &#8211; only subpartition statistics are gathered:<\/p>\n<pre><code>\nexec dbms_session.sleep(2);\n\nbegin\n  dbms_stats.gather_table_stats(\n    ownname =&gt; 'U', tabname =&gt; 'T', partname =&gt; 'P_1', \n\tgranularity =&gt; 'SUBPARTITION'\n  ) ;\nend ;\n\/\n\nalter session set nls_date_format='dd.mm.yyyy hh24:mi:ss' ;\n\ncolumn partition_name format A4\ncolumn subpartition_name format A10\n\nselect partition_name,subpartition_name,last_analyzed,stale_stats,num_rows \n  from user_tab_statistics \n  where table_name='T' and partition_name = 'P_1' ;\n\nPART SUBPARTITI LAST_ANALYZED       STALE_S   NUM_ROWS\n---- ---------- ------------------- ------- ----------\nP_1             26.08.2022 <span style=\"color:green\">13:53:00<\/span> NO               0\nP_1  P_1_SP_1   26.08.2022 <span style=\"color:green\">13:53:26<\/span> NO               0\n<\/code><\/pre>\n<h1>Implicit partition statistics calculation<\/h1>\n<p>Next, I&#8217;ll create a new partition:<\/p>\n<pre><code>\nexec dbms_session.sleep(2);\n\nalter table t add partition p_2 values less than (10) ;\n\ninsert into t values (6,6);\n<\/code><\/pre>\n<p>The statistics are empty for the new partition:<\/p>\n<pre><code>\nselect partition_name,subpartition_name,last_analyzed,stale_stats,num_rows \n  from user_tab_statistics \n  where table_name='T' and partition_name = 'P_2' ;\n\nPART SUBPARTITI LAST_ANALYZED       STALE_S   NUM_ROWS\n---- ---------- ------------------- ------- ----------\nP_2\nP_2  P_2_SP_1\n<\/code><\/pre>\n<p>The behavior is different for the new partition &#8211; with GRANULARITY=SUBPARTITION also partition statistics are gathered:<\/p>\n<pre><code>\nbegin\n  dbms_stats.gather_table_stats(\n    ownname =&gt; 'U', tabname =&gt; 'T', partname =&gt; 'P_2', \n\tgranularity =&gt; 'SUBPARTITION'\n  ) ;\nend ;\n\/\n\nselect partition_name,subpartition_name,last_analyzed,stale_stats,num_rows \n  from user_tab_statistics where table_name='T' and partition_name = 'P_2' ;\n\nPART SUBPARTITI LAST_ANALYZED       STALE_S   NUM_ROWS\n---- ---------- ------------------- ------- ----------\nP_2             26.08.2022 <span style=\"color:red\">14:02:58 YES<\/span>              1\nP_2  P_2_SP_1   26.08.2022 <span style=\"color:red\">14:02:58<\/span> NO               1\n<\/code><\/pre>\n<p>Interestingly, despite partition statistics were calculated, they are marked as STALE.<\/p>\n<p>This behavior is consistent &#8211; also subsequent subpartition statistics calculations implicitly gather partition statistics:<\/p>\n<pre><code>\nbegin\n  dbms_stats.gather_table_stats(\n    ownname =&gt; 'U', tabname =&gt; 'T', partname =&gt; 'P_2', \n\tgranularity =&gt; 'SUBPARTITION'\n  ) ;\nend ;\n\/\n\nselect partition_name,subpartition_name,last_analyzed,stale_stats,num_rows \n  from user_tab_statistics \n  where table_name='T' and partition_name = 'P_2' ;\n\nPART SUBPARTITI LAST_ANALYZED       STALE_S   NUM_ROWS\n---- ---------- ------------------- ------- ----------\nP_2             26.08.2022 <span style=\"color:red\">14:21:30<\/span> YES              1\nP_2  P_2_SP_1   26.08.2022 <span style=\"color:red\">14:21:30<\/span> NO               1\n<\/code><\/pre>\n<p>The implicit partition statistics gathering stops once and for all after we explicitly collect statistics on the partition or table level:<\/p>\n<pre><code>\nbegin\n  dbms_stats.gather_table_stats(\n    ownname =&gt; 'U', tabname =&gt; 'T', partname =&gt; 'P_2', \n\tgranularity =&gt; '<span style=\"color:green\">PARTITION<\/span>'\n  ) ;\n\n  \/* or \n  dbms_stats.gather_table_stats(\n    ownname =&gt; 'U', tabname =&gt; 'T'\n  ) ;\n  *\/\n  \nend ;\n\/\n\nselect partition_name,subpartition_name,last_analyzed,stale_stats,num_rows \n  from user_tab_statistics \n  where table_name='T' and partition_name = 'P_2' ;\n\nPART SUBPARTITI LAST_ANALYZED       STALE_S   NUM_ROWS\n---- ---------- ------------------- ------- ----------\nP_2             26.08.2022 <span style=\"color:green\">14:25:42<\/span> NO               1\nP_2  P_2_SP_1   26.08.2022 <span style=\"color:green\">14:21:30<\/span> NO               1\n\nbegin\n  dbms_stats.gather_table_stats(\n    ownname =&gt; 'U', tabname =&gt; 'T', partname =&gt; 'P_2', \n\tgranularity =&gt; 'SUBPARTITION'\n  ) ;\nend ;\n\/\n\nselect partition_name,subpartition_name,last_analyzed,stale_stats,num_rows \n  from user_tab_statistics \n  where table_name='T' and partition_name = 'P_2' ;\n\nPART SUBPARTITI LAST_ANALYZED       STALE_S   NUM_ROWS\n---- ---------- ------------------- ------- ----------\nP_2             26.08.2022 <span style=\"color:green\">14:25:42<\/span> NO               1\nP_2  P_2_SP_1   26.08.2022 <span style=\"color:green\">14:26:17<\/span> NO               1\n<\/code><\/pre>\n<h1>Staleness<\/h1>\n<p>Interestingly, table modifications mark the subpartition statistics, though not the partition statistics as stale:<\/p>\n<pre><code>\ninsert into t select 6,6 from dual connect by level &lt;= 1000 ;\n\nselect partition_name,subpartition_name,last_analyzed,stale_stats,num_rows \n  from user_tab_statistics \n  where table_name='T' and partition_name = 'P_2' ;\n\nPART SUBPARTITI LAST_ANALYZED       STALE_S   NUM_ROWS\n---- ---------- ------------------- ------- ----------\nP_2             26.08.2022 14:25:42 <span style=\"color:red\">NO<\/span>               1\nP_2  P_2_SP_1   26.08.2022 14:26:17 <span style=\"color:green\">YES<\/span>              1\n<\/code><\/pre>\n<p>However, the subpartition statistics gathering updates the subpartition statistics and changes the status of the partition statistics to STALE.<\/p>\n<pre><code>\nbegin\n  dbms_stats.gather_table_stats(\n    ownname =&gt; 'U', tabname =&gt; 'T', partname =&gt; 'P_2', \n\tgranularity =&gt; 'SUBPARTITION'\n  ) ;\nend ;\n\/\n\nselect partition_name,subpartition_name,last_analyzed,stale_stats,num_rows \n  from user_tab_statistics \n  where table_name='T' and partition_name = 'P_2' ;\n\nPART SUBPARTITI LAST_ANALYZED       STALE_S   NUM_ROWS\n---- ---------- ------------------- ------- ----------\nP_2             26.08.2022 14:25:42 <span style=\"color:green\">YES<\/span>              1\nP_2  P_2_SP_1   26.08.2022 14:32:14 NO            1001\n<\/code><\/pre>\n<h1>Explicit partition statistics gathering<\/h1>\n<p>The change in behavior is permanent &#8211; the subsequent subpartition statistics jobs don&#8217;t update the partition statistics anymore:<\/p>\n<pre><code>\nbegin\n  dbms_stats.gather_table_stats(\n    ownname =&gt; 'U', tabname =&gt; 'T', partname =&gt; 'P_2', \n\tgranularity =&gt; 'SUBPARTITION'\n  ) ;\nend ;\n\/\n\nselect partition_name,subpartition_name,last_analyzed,stale_stats,num_rows \n  from user_tab_statistics \n  where table_name='T' and partition_name = 'P_2' ;\n\nPART SUBPARTITI LAST_ANALYZED       STALE_S   NUM_ROWS\n---- ---------- ------------------- ------- ----------\nP_2             26.08.2022 <span style=\"color:green\">14:25:42<\/span> YES              1\nP_2  P_2_SP_1   26.08.2022 14:33:23 NO            1001\n<\/code><\/pre>\n<p>Therefore, it needs an explicit partition statistics gather to get the partition statistics up to date:<\/p>\n<pre><code>\nbegin\n  dbms_stats.gather_table_stats(\n    ownname =&gt; 'U', tabname =&gt; 'T', partname =&gt; 'P_2',\n    granularity =&gt; '<span style=\"color:green\">PARTITION<\/span>'\n  ) ;\nend ;\n\/\n\nselect partition_name,subpartition_name,last_analyzed,stale_stats,num_rows \n  from user_tab_statistics \n  where table_name='T' and partition_name = 'P_2' ;\n\nPART SUBPARTITI LAST_ANALYZED       STALE_S   NUM_ROWS\n---- ---------- ------------------- ------- ----------\nP_2             26.08.2022 <span style=\"color:green\">15:31:54 NO<\/span>            1001\nP_2  P_2_SP_1   26.08.2022 15:06:25 NO            1001\n<\/code><\/pre>\n<h1>Conclusion<\/h1>\n<p>In general, subpartition statistics job (GRANULARITY=SUBPARTITION) behaves as documented &#8211; it doesn&#8217;t trigger gathering of partition statistics. Exceptionally, for new partitions, the subpartition statistic job gathers also partition statistics, but only until the statistics are explicitly gathered either on the partition or the table level. Afterwards, subpartition statistics gathering permanently reverts to the normal behavior, i.e. partition statistics aren&#8217;t gathered by the subpartition statistics jobs.<\/p>\n<p>You shouldn&#8217;t rely on this dependency to get accurate partition statistics. Instead, a proper solution consists of two independent calls: one for subpartitions and another for the partition.<\/p>\n<p>Further, on tables with subpartitions, row modifications set STALE_STATS to YES only for subpartitions, but not for partitions. Therefore, if your solution checks the statistics staleness of individual partitions before gathering statistics, it should check the subpartitions first. The subpartition statistics gathering updates STALE_STATS for the partitions to YES if necessary.<\/p>\n<h1>Anecdote<\/h1>\n<p>I discovered this behavior when analyzing a performance problem on a 3rd party application. The vendor was unknowingly relying on subpartition statistics for keeping partition statistics up to date. New partitions were created daily. This worked well because the table statistics weren&#8217;t collected frequently, so the subpartition statistics implicitly calculated partition statistics. But, paradoxically, the performance went south after the application started to gather table statistics more frequently. In a changed schedule, the table statistics were gathered after a new partition was created but still empty. The subpartition statistics were still gathered after the data load, but that didn&#8217;t trigger the partition statistics anymore. The performance slumped, and the temporary tablespace was filled. An explicit partition statistics call resolved the issue.<\/p>\n<p>A lot can be learned by analyzing anomalies like this.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A boundary condition where subpartition statistics gathering can also trigger partition statistics <a href=\"https:\/\/nenadnoveljic.com\/blog\/undocumented-implicit-partition-statistics-gathering\/\" class=\"more-link\">Continue Reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[5,18],"tags":[],"class_list":["post-4318","post","type-post","status-publish","format-standard","hentry","category-oracle","category-statistics"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Undocumented Implicit Partition Statistics Gathering - All-round Database Topics<\/title>\n<meta name=\"description\" content=\"A boundary condition where subpartition statistics gathering can also trigger partition statistics\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/nenadnoveljic.com\/blog\/undocumented-implicit-partition-statistics-gathering\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Undocumented Implicit Partition Statistics Gathering - All-round Database Topics\" \/>\n<meta property=\"og:description\" content=\"A boundary condition where subpartition statistics gathering can also trigger partition statistics\" \/>\n<meta property=\"og:url\" content=\"https:\/\/nenadnoveljic.com\/blog\/undocumented-implicit-partition-statistics-gathering\/\" \/>\n<meta property=\"og:site_name\" content=\"All-round Database Topics\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-26T15:46:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-08-26T15:46:32+00:00\" \/>\n<meta name=\"author\" content=\"Nenad Noveljic\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@NenadNoveljic\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nenad Noveljic\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/undocumented-implicit-partition-statistics-gathering\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/undocumented-implicit-partition-statistics-gathering\\\/\"},\"author\":{\"name\":\"Nenad Noveljic\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#\\\/schema\\\/person\\\/51458d9dd86dbbdd19f5add451d44efa\"},\"headline\":\"Undocumented Implicit Partition Statistics Gathering\",\"datePublished\":\"2022-08-26T15:46:31+00:00\",\"dateModified\":\"2022-08-26T15:46:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/undocumented-implicit-partition-statistics-gathering\\\/\"},\"wordCount\":544,\"commentCount\":1,\"articleSection\":[\"Oracle\",\"Statistics\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/undocumented-implicit-partition-statistics-gathering\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/undocumented-implicit-partition-statistics-gathering\\\/\",\"url\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/undocumented-implicit-partition-statistics-gathering\\\/\",\"name\":\"Undocumented Implicit Partition Statistics Gathering - All-round Database Topics\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#website\"},\"datePublished\":\"2022-08-26T15:46:31+00:00\",\"dateModified\":\"2022-08-26T15:46:32+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#\\\/schema\\\/person\\\/51458d9dd86dbbdd19f5add451d44efa\"},\"description\":\"A boundary condition where subpartition statistics gathering can also trigger partition statistics\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/undocumented-implicit-partition-statistics-gathering\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/undocumented-implicit-partition-statistics-gathering\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/undocumented-implicit-partition-statistics-gathering\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Undocumented Implicit Partition Statistics Gathering\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/\",\"name\":\"All-round Database Topics\",\"description\":\"Nenad Noveljic\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#\\\/schema\\\/person\\\/51458d9dd86dbbdd19f5add451d44efa\",\"name\":\"Nenad Noveljic\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g\",\"caption\":\"Nenad Noveljic\"},\"sameAs\":[\"nenad-noveljic-9b746a6\",\"https:\\\/\\\/x.com\\\/NenadNoveljic\"],\"url\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/author\\\/nenad\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Undocumented Implicit Partition Statistics Gathering - All-round Database Topics","description":"A boundary condition where subpartition statistics gathering can also trigger partition statistics","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:\/\/nenadnoveljic.com\/blog\/undocumented-implicit-partition-statistics-gathering\/","og_locale":"en_US","og_type":"article","og_title":"Undocumented Implicit Partition Statistics Gathering - All-round Database Topics","og_description":"A boundary condition where subpartition statistics gathering can also trigger partition statistics","og_url":"https:\/\/nenadnoveljic.com\/blog\/undocumented-implicit-partition-statistics-gathering\/","og_site_name":"All-round Database Topics","article_published_time":"2022-08-26T15:46:31+00:00","article_modified_time":"2022-08-26T15:46:32+00:00","author":"Nenad Noveljic","twitter_card":"summary_large_image","twitter_creator":"@NenadNoveljic","twitter_misc":{"Written by":"Nenad Noveljic","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/nenadnoveljic.com\/blog\/undocumented-implicit-partition-statistics-gathering\/#article","isPartOf":{"@id":"https:\/\/nenadnoveljic.com\/blog\/undocumented-implicit-partition-statistics-gathering\/"},"author":{"name":"Nenad Noveljic","@id":"https:\/\/nenadnoveljic.com\/blog\/#\/schema\/person\/51458d9dd86dbbdd19f5add451d44efa"},"headline":"Undocumented Implicit Partition Statistics Gathering","datePublished":"2022-08-26T15:46:31+00:00","dateModified":"2022-08-26T15:46:32+00:00","mainEntityOfPage":{"@id":"https:\/\/nenadnoveljic.com\/blog\/undocumented-implicit-partition-statistics-gathering\/"},"wordCount":544,"commentCount":1,"articleSection":["Oracle","Statistics"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/nenadnoveljic.com\/blog\/undocumented-implicit-partition-statistics-gathering\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/nenadnoveljic.com\/blog\/undocumented-implicit-partition-statistics-gathering\/","url":"https:\/\/nenadnoveljic.com\/blog\/undocumented-implicit-partition-statistics-gathering\/","name":"Undocumented Implicit Partition Statistics Gathering - All-round Database Topics","isPartOf":{"@id":"https:\/\/nenadnoveljic.com\/blog\/#website"},"datePublished":"2022-08-26T15:46:31+00:00","dateModified":"2022-08-26T15:46:32+00:00","author":{"@id":"https:\/\/nenadnoveljic.com\/blog\/#\/schema\/person\/51458d9dd86dbbdd19f5add451d44efa"},"description":"A boundary condition where subpartition statistics gathering can also trigger partition statistics","breadcrumb":{"@id":"https:\/\/nenadnoveljic.com\/blog\/undocumented-implicit-partition-statistics-gathering\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/nenadnoveljic.com\/blog\/undocumented-implicit-partition-statistics-gathering\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/nenadnoveljic.com\/blog\/undocumented-implicit-partition-statistics-gathering\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/nenadnoveljic.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Undocumented Implicit Partition Statistics Gathering"}]},{"@type":"WebSite","@id":"https:\/\/nenadnoveljic.com\/blog\/#website","url":"https:\/\/nenadnoveljic.com\/blog\/","name":"All-round Database Topics","description":"Nenad Noveljic","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/nenadnoveljic.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/nenadnoveljic.com\/blog\/#\/schema\/person\/51458d9dd86dbbdd19f5add451d44efa","name":"Nenad Noveljic","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g","caption":"Nenad Noveljic"},"sameAs":["nenad-noveljic-9b746a6","https:\/\/x.com\/NenadNoveljic"],"url":"https:\/\/nenadnoveljic.com\/blog\/author\/nenad\/"}]}},"_links":{"self":[{"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/posts\/4318","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/comments?post=4318"}],"version-history":[{"count":1,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/posts\/4318\/revisions"}],"predecessor-version":[{"id":4335,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/posts\/4318\/revisions\/4335"}],"wp:attachment":[{"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/media?parent=4318"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/categories?post=4318"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/tags?post=4318"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}