{"id":9455,"date":"2016-11-30T21:33:07","date_gmt":"2016-11-30T20:33:07","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/"},"modified":"2016-11-30T21:33:07","modified_gmt":"2016-11-30T20:33:07","slug":"histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/","title":{"rendered":"Histograms on character strings between 11.2.0.3 and 11.2.0.4"},"content":{"rendered":"<h2>By Franck Pachot<\/h2>\n<p>.<br \/>\nIn short, when have statistics gathered in 11.2.0.3 but the query is now running with the 11.2.0.4 optimizer, you may have wrong cardinality estimation on histograms, leading to sub-optimal plans.<br \/>\n<!--more--><br \/>\nI had a table with a flag that has two values &#8216;Y&#8217; and &#8216;N&#8217; with even distribution between them. It&#8217;s a good case for frequency histograms. I had frequency histograms and expected exact cardinality estimation for a WHERE FLAG=&#8217;Y&#8217; predicate. But that was not the case: very low estimation leading to very bad execution plan. Because the cardinality estimation was far from what we have in histograms and far from what we would have without histograms, I checked a 10053 trace and this is what I&#8217;ve find:<\/p>\n<pre><code> Using prorated density: 0.004557 of col #97 as selectivity of out-of-range\/non-existent value pred<\/code><\/pre>\n<p>This is linear decay because of out-of-range predicate (I&#8217;ll show that next Wednesday at UKOUG TECH16) but I don&#8217;t expect an out-of-range condition when I provide one of the two values that are in the frequency histogram.<\/p>\n<h3>Here is my testcase<\/h3>\n<pre><code>\nSQL&gt; create table DEMO ( flag char);\nTable created.\n&nbsp;\nSQL&gt; select count(*) from DEMO where flag='Y';\n&nbsp;\n  COUNT(*)\n----------\n         0\n&nbsp;\nSQL&gt; insert into DEMO select 'Y' from xmltable('1 to 100000');\n100000 rows created.\n&nbsp;\nSQL&gt; insert into DEMO select 'N' from xmltable('1 to   1000');\n1000 rows created.\n&nbsp;\nSQL&gt; select flag,to_char(ascii(flag),'XX'),count(*) from DEMO group by flag;\n&nbsp;\nFLAG  TO_CHAR(ASCII(FLAG),'XX')  COUNT(*)\n----  -------------------------  --------\nY      59                          100000\nN      4E                            1000\n<\/code><\/pre>\n<p>100000 rows with &#8216;Y&#8217; and 1000 rows with &#8216;N&#8217;.<\/p>\n<h3>11.2.0.3<\/h3>\n<p>I gather statistics in 11.2.0.3<\/p>\n<pre><code>\nSQL&gt; alter session set optimizer_features_enable='11.2.0.3';\nSession altered.\n&nbsp;\nSQL&gt; exec dbms_stats.gather_table_stats(user,'DEMO',no_invalidate=&gt;false);\nPL\/SQL procedure successfully completed.\n<\/code><\/pre>\n<p>And run a query looking for rows where flag is &#8216;Y&#8217;<\/p>\n<pre><code>\nSQL&gt; explain plan for select count(*) from DEMO where flag='Y';\nExplained.\n&nbsp;\nSQL&gt; select * from table(dbms_xplan.display(format=&gt;'basic +rows'));\nPLAN_TABLE_OUTPUT\nPlan hash value: 2180342005\n&nbsp;\n-------------------------------------------\n| Id  | Operation          | Name | Rows  |\n-------------------------------------------\n|   0 | SELECT STATEMENT   |      |     1 |\n|   1 |  SORT AGGREGATE    |      |     1 |\n|   2 |   TABLE ACCESS FULL| DEMO |   100K|\n-------------------------------------------\n<\/code><\/pre>\n<p>The estimate is perfect thanks to the histograms.<\/p>\n<h3>11.2.0.4<\/h3>\n<p>Now the CBO will running in 11.2.0.4 but statistics have not been gathered since 11.2.0.3<\/p>\n<pre><code>\nSQL&gt; alter session set optimizer_features_enable='11.2.0.4';\nSession altered.\n&nbsp;\nSQL&gt; explain plan for select count(*) from DEMO where flag='Y';\nExplained.\n&nbsp;\nSQL&gt; select * from table(dbms_xplan.display(format=&gt;'basic +rows'));\nPLAN_TABLE_OUTPUT\nPlan hash value: 2180342005\n&nbsp;\n-------------------------------------------\n| Id  | Operation          | Name | Rows  |\n-------------------------------------------\n|   0 | SELECT STATEMENT   |      |     1 |\n|   1 |  SORT AGGREGATE    |      |     1 |\n|   2 |   TABLE ACCESS FULL| DEMO |   500 |\n-------------------------------------------\n<\/code><\/pre>\n<p>Bad estimation here. Were those 500 come from?<br \/>\nIt&#8217;s not from the histogram that knows that 100K rows have value &#8216;Y&#8217;<br \/>\nWithout histograms the estimation would be based on 2 distinct values among 101000 so that would be 50500.<br \/>\nCBO trace says:<\/p>\n<pre><code>Access path analysis for DEMO\n***************************************\nSINGLE TABLE ACCESS PATH\n  Single Table Cardinality Estimation for DEMO[DEMO]\n  SPD: Return code in qosdDSDirSetup: NOCTX, estType = TABLE\n&nbsp;\n kkecdn: Single Table Predicate:\"DEMO\".\"FLAG\"='Y'\n  Column (#1):\n    NewDensity:0.004950, OldDensity:0.000005 BktCnt:101000.000000, PopBktCnt:101000.000000, PopValCnt:2, NDV:2\n  Column (#1): FLAG(CHARACTER)\n    AvgLen: 2 NDV: 2 Nulls: 0 Density: 0.004950\n    Histogram: Freq  #Bkts: 2  UncompBkts: 101000  EndPtVals: 2  ActualVal: no\n  Using density: 0.004950 of col #1 as selectivity of pred having unreasonably low value\n  Table: DEMO  Alias: DEMO\n    Card: Original: 101000.000000  Rounded: 500  Computed: 500.000000  Non Adjusted: 500.000000<\/code><\/pre>\n<p>Predicate having unreasonably low value&#8230;<\/p>\n<p>Time to look at the histograms.<\/p>\n<h3>ENDPOINT_VALUE<\/h3>\n<p>You can get the histogram entries. For CHAR datatype (my case here) the endpoint value is hashed through their ASCII representation put in decimal. Or at least with first characters. <\/p>\n<pre><code>SQL&gt; select endpoint_number,endpoint_value\n  2  ,to_char(endpoint_value,rpad('FM',65,'X'))\n  3  ,utl_raw.cast_to_varchar2(hextoraw(to_char(endpoint_value,rpad('FM',65,'X'))))\n  4  from user_histograms h where table_name='DEMO';\nENDPOINT_NUMBER  ENDPOINT_VALUE                        TO_CHAR(ENDPOINT_VALUE,RPAD('FM',65,'X'))  UTL_RAW.CAST_TO_VARCHAR2(HEXTORAW(TO_CHAR(ENDPOINT_VALUE,RPAD('FM',65,'X'))))\n---------------  ------------------------------------  ----------------------------------------- ------------------------------------------------------------------------------\n1000             405650737316592000000000000000000000  4E20202020203A7BB119D5F6000000             N     :{\ufffd\ufffd\n101000           462766002760475000000000000000000000  59202020202034D998FF0B5AE00000             Y     4\u0658\ufffd\n                                                                                                          Z\ufffd\n<\/code><\/pre>\n<p>Looks good. I can see the &#8216;N&#8217; and &#8216;Y&#8217; values here. But obviously the CBO sees that as different than &#8216;Y&#8217;.<\/p>\n<p>Let&#8217;s gather statistics again (I&#8217;m now with 11.2.0.4 CBO):<\/p>\n<pre><code>SQL&gt; exec dbms_stats.gather_table_stats(user,'DEMO',no_invalidate=&gt;false);\nPL\/SQL procedure successfully completed.<\/code><\/pre>\n<p>And look at the difference:<\/p>\n<pre><code>SQL&gt; select endpoint_number,endpoint_value\n  2  ,to_char(endpoint_value,rpad('FM',65,'X'))\n  3  ,utl_raw.cast_to_varchar2(hextoraw(to_char(endpoint_value,rpad('FM',65,'X'))))\n  4  from user_histograms h where table_name='DEMO';\nENDPOINT_NUMBER  ENDPOINT_VALUE                        TO_CHAR(ENDPOINT_VALUE,RPAD('FM',65,'X'))  UTL_RAW.CAST_TO_VARCHAR2(HEXTORAW(TO_CHAR(ENDPOINT_VALUE,RPAD('FM',65,'X'))))\n---------------  ------------------------------------  ----------------------------------------- ------------------------------------------------------------------------------\n1000             404999154965717000000000000000000000  4E0000000000181F436C7BBB200000             NCl{\ufffd\n101000           462114420409600000000000000000000000  590000000000127D2B51B120000000             Y}+Q\ufffd<\/code><\/pre>\n<p>In 11.2.0.3 the characters (&#8216;Y&#8217; is ASCII 0x59) were padded with spaces (ASCII 0x20). But In 11.2.0.4 they are padded with nulls (ASCII 0x00).<br \/>\nThis is the reason why it was considered different. The ENDPOINT_VALUE for &#8216;Y&#8217; calculated by the 11.2.0.4 version of the CDB is different from the one calculated by the 11.2.0.3 dbms_stats. <\/p>\n<p>Now, the estimation is good again:<\/p>\n<pre><code>\nSQL&gt; explain plan for select count(*) from DEMO where flag='Y';\nExplained.\n&nbsp;\nSQL&gt; select * from table(dbms_xplan.display(format=&gt;'basic +rows'));\nPLAN_TABLE_OUTPUT\nPlan hash value: 2180342005\n&nbsp;\n-------------------------------------------\n| Id  | Operation          | Name | Rows  |\n-------------------------------------------\n|   0 | SELECT STATEMENT   |      |     1 |\n|   1 |  SORT AGGREGATE    |      |     1 |\n|   2 |   TABLE ACCESS FULL| DEMO |   100K|\n-------------------------------------------\n<\/code><\/pre>\n<h3>char_value<\/h3>\n<p>The ENDPOINT_VALUE function has been described by Jonathan Lewis in <a href=\"https:\/\/www.amazon.com\/gp\/product\/1590596366\" target=\"_blank\" rel=\"noopener noreferrer\">Cost-Based Oracle Fundamentals<\/a> and the script to encode a character string is downloadable rom <a href=\"\/\/www.jlcomp.demon.co.uk\/cbo_book\/book_cbo_scripts.zip\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/www.jlcomp.demon.co.uk\/cbo_book\/book_cbo_scripts.zip<\/a>. I use it (as an inline function because I&#8217;m running that in 12<em>c<\/em>) to show the values calculated from &#8216;Y&#8217; and &#8216;N&#8217; as well as the values calculated from same strings right-padded with spaces:<\/p>\n<pre><code>\nSQL&gt; with function char_value(i_vc varchar2) return number\n     -- function coming from Jonathan Lewis char_value.sql http:\/\/www.jlcomp.demon.co.uk\/cbo_book\/book_cbo_scripts.zip\n     is\n        m_vc varchar2(15) := substr(rpad(i_vc,15,chr(0)),1,15);\n        m_n number := 0;\n     begin\n        for i in 1..15 loop\n                m_n := m_n + power(256,15-i) * ascii(substr(m_vc,i,1));\n        end loop;\n        m_n := round(m_n, -21);\n        return m_n;\n     end;\n     select flag,char_value(flag),cast(flag as char(32)),char_value(cast(flag as char(32))),count(*) from DEMO.DEMO group by flag\n\/\n&nbsp;\nFLAG  CHAR_VALUE(FLAG)                      CAST(FLAGASCHAR(32))              CHAR_VALUE(CAST(FLAGASCHAR(32)))      COUNT(*)\n----  ------------------------------------  --------------------------------  ------------------------------------  --------\nY     462114420409600000000000000000000000  Y                                 462766002760475000000000000000000000  100000\nN     404999154965717000000000000000000000  N                                 405650737316592000000000000000000000    1000\n<\/code><\/pre>\n<p>Comparing the calculated values with the ENDPOINT_VALUE I had above, we can see that the function has not changed but the input string was padded with spaces before which is not the case anymore.<\/p>\n<h3>So what?<\/h3>\n<p>Be careful when upgrading from &lt;= 11.2.0.3 to higher version. You should re-gather the statistics (but then read <a href=\"http:\/\/dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/\">http:\/\/dbi-services.com\/blog\/a-migration-pitfall-with-all-column-size-auto\/<\/a> as there&#8217;s another pitfall). Don&#039;t set optimizer_features_enable to lower version as the scope is very wide and many things may be different. It is always better to take the time to focus on the features you want to disable. And never give up. The weirdest situations can be troubleshooted. Oracle Database has lot of ways to understand what happens, from the debugging tools provided with the software, and from the excellent literature about it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Franck Pachot . In short, when have statistics gathered in 11.2.0.3 but the query is now running with the 11.2.0.4 optimizer, you may have wrong cardinality estimation on histograms, leading to sub-optimal plans.<\/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":[229],"tags":[1000,96],"type_dbi":[],"class_list":["post-9455","post","type-post","status-publish","format-standard","hentry","category-database-administration-monitoring","tag-cbo-histograms","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>Histograms on character strings between 11.2.0.3 and 11.2.0.4 - dbi Blog<\/title>\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\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Histograms on character strings between 11.2.0.3 and 11.2.0.4\" \/>\n<meta property=\"og:description\" content=\"By Franck Pachot . In short, when have statistics gathered in 11.2.0.3 but the query is now running with the 11.2.0.4 optimizer, you may have wrong cardinality estimation on histograms, leading to sub-optimal plans.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-11-30T20:33:07+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=\"6 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\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"headline\":\"Histograms on character strings between 11.2.0.3 and 11.2.0.4\",\"datePublished\":\"2016-11-30T20:33:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/\"},\"wordCount\":600,\"commentCount\":0,\"keywords\":[\"CBO histograms\",\"Oracle\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/\",\"name\":\"Histograms on character strings between 11.2.0.3 and 11.2.0.4 - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2016-11-30T20:33:07+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Histograms on character strings between 11.2.0.3 and 11.2.0.4\"}]},{\"@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":"Histograms on character strings between 11.2.0.3 and 11.2.0.4 - dbi Blog","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\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/","og_locale":"en_US","og_type":"article","og_title":"Histograms on character strings between 11.2.0.3 and 11.2.0.4","og_description":"By Franck Pachot . In short, when have statistics gathered in 11.2.0.3 but the query is now running with the 11.2.0.4 optimizer, you may have wrong cardinality estimation on histograms, leading to sub-optimal plans.","og_url":"https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/","og_site_name":"dbi Blog","article_published_time":"2016-11-30T20:33:07+00:00","author":"Oracle Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Oracle Team","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"headline":"Histograms on character strings between 11.2.0.3 and 11.2.0.4","datePublished":"2016-11-30T20:33:07+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/"},"wordCount":600,"commentCount":0,"keywords":["CBO histograms","Oracle"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/","url":"https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/","name":"Histograms on character strings between 11.2.0.3 and 11.2.0.4 - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2016-11-30T20:33:07+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/histograms-on-character-strings-between-11-2-0-3-and-11-2-0-4\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Histograms on character strings between 11.2.0.3 and 11.2.0.4"}]},{"@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\/9455","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=9455"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/9455\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=9455"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=9455"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=9455"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=9455"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}