{"id":3735,"date":"2014-11-11T18:49:34","date_gmt":"2014-11-11T17:49:34","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/awr-dont-store-explain-plan-predicates\/"},"modified":"2014-11-11T18:49:34","modified_gmt":"2014-11-11T17:49:34","slug":"awr-dont-store-explain-plan-predicates","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/awr-dont-store-explain-plan-predicates\/","title":{"rendered":"AWR does not store explain plan predicates"},"content":{"rendered":"<h2>By Franck Pachot<\/h2>\n<p>.<br \/>\nWhat is the most important part in an execution plan? It&#8217;s probably the predicate section. It helps to see implicit conversions. It helps to understand why an index is used or not. Or to see additional predicates coming from constraints. When you get an execution plan from shared pool, the dbms_xplan.display_cursor() shows the predicates. But when you retrieve a plan from the past, dbms_xplan.display_awr() does not show them.<\/p>\n<h3>Statspack<\/h3>\n<p>With Statspack, you can store execution plans when you take level 7 snapshot (which I often set as default). But you don&#8217;t have the predicate section, for the simple reason that they are not collected.<\/p>\n<p>Here is what you can find in spcpkg.sql, look at the lines commented out and replaced by 0<\/p>\n<pre><code>\n            insert into stats$sql_plan\n...\n                 , access_predicates\n                 , filter_predicates\n...\n                 , 0 -- should be max(sp.access_predicates) (2254299)\n                 , 0 -- should be max(sp.filter_predicates)\n<\/code><\/pre>\n<h3>AWR<\/h3>\n<p>AWR is not better. Finding the code is a bit more difficult. It&#8217;s optimized, run from the binaries. Let&#8217;s find it:<\/p>\n<pre><code>$ strings $ORACLE_HOME\/bin\/oracle | grep -i \"v[$]sql_plan\"\n&nbsp;\nSELECT \/*+ leading(S) use_nl(P) PARAM('_cursor_plan_unparse_enabled','FALSE') *\/ remarks, operation, options, object_node, object_owner, object_name, object_alias, object_type, optimizer, id, parent_id, depth, position, cost, cardinality, bytes, other_tag, partition_start, partition_stop, partition_id, distribution, cpu_cost, io_cost, temp_space, access_predicates, filter_predicates,projection, time, qblock_name FROM v$sql_plan_statistics_all P, v$sqlarea_plan_hash S WHERE P.sql_id = :1 AND P.plan_hash_value = :2 AND P.con_dbid = :3 AND S.sql_id = :4 AND S.plan_hash_value = :5 AND S.con_dbid = :6 AND P.child_address = s.last_active_child_address<\/code><\/pre>\n<p>The parameter description for _cursor_plan_unparse_enabled is &#8216;enables\/disables using unparse to build projection\/predicates&#8217; which is true by default but is set to false for this query. This, access_predicates ant filter_predicates are null as in Statspack.<\/p>\n<h3>Why?<\/h3>\n<p>It you tried to use those access_predicate and filter_predicates in the days of 9i you probably remember that it finished in ORA-7445 most of the times. Those columns are a bit special. The predicates are not stored as-is. They are &#8216;unparsed&#8217; from the execution plan code. And because of a few bugs, Oracle has probably chosen to avoid automatic collection on them.<\/p>\n<p>I think there are still some bugs still until 11.1 But I query those columns very frequently (directly or through dbms_xplan.display_cursor) and I don&#8217;t think I&#8217;ve seen any problem in current versions. I hope that one day that limitation will be released.<\/p>\n<h3>Workaround<\/h3>\n<p>When I&#8217;ve a plan coming from AWR, the first thing I do is to try to find it in the shared pool with dbms_xplan.display_cursor &#8211; with same sql_id and same plan_hash_value. Then I&#8217;ll have the predicate section.<\/p>\n<p>If it is not present anymore, then I&#8217;ll try to reproduce it with an EXPLAIN PLAN. In order to get the same plan, I retrieve the outlines (&#8216;+OUTLINE&#8217; format) and the bind variable values may help as well (&#8216;+PEEKED_BINDS&#8217; format) and then I reproduce it and check that I&#8217;ve the same plan_hash_value.<\/p>\n<p>Let&#8217;s see on an example<\/p>\n<p>I have the following plan from AWR<\/p>\n<pre><code>SQL&gt; select * from table(dbms_xplan.display_awr('7ws837zynp1zv',3722429161,format=&gt;'basic +predicate'));\n&nbsp;\nPLAN_TABLE_OUTPUT\n--------------------------------------------------------------------------------\nSQL_ID 7ws837zynp1zv\n--------------------\nSELECT CARD_ID, CUSTOMER_ID, CARD_TYPE, CARD_NUMBER, EXPIRY_DATE,\nIS_VALID, SECURITY_CODE FROM CARD_DETAILS WHERE CUSTOMER_ID = :B2 AND\nROWNUM &lt; :B1\n&nbsp;\nPlan hash value: 3722429161\n&nbsp;\n--------------------------------------------------------------------\n| Id  | Operation                            | Name                |\n--------------------------------------------------------------------\n|   0 | SELECT STATEMENT                     |                     |\n|   1 |  COUNT STOPKEY                       |                     |\n|   2 |   TABLE ACCESS BY INDEX ROWID BATCHED| CARD_DETAILS        |\n|   3 |    INDEX RANGE SCAN                  | CARDDETAILS_CUST_IX |\n--------------------------------------------------------------------\n&nbsp;\n17 rows selected.\n<\/code><\/pre>\n<p>There is no predicates here.<\/p>\n<p>Then I try to get the plan with explain plan:<\/p>\n<pre><code>SQL&gt; alter session set current_schema=SOE;\n&nbsp;\nSession altered.\n&nbsp;\nSQL&gt; explain plan for\n  2  SELECT CARD_ID, CUSTOMER_ID, CARD_TYPE, CARD_NUMBER, EXPIRY_DATE,\n  3  IS_VALID, SECURITY_CODE FROM CARD_DETAILS WHERE CUSTOMER_ID = :B2 AND\n  4  ROWNUM  select * from table(dbms_xplan.display(format=&gt;'basic +predicate'));\n&nbsp;\nPLAN_TABLE_OUTPUT\n--------------------------------------------------------------------------------\nPlan hash value: 2597291669\n&nbsp;\n-------------------------------------------\n| Id  | Operation          | Name         |\n-------------------------------------------\n|   0 | SELECT STATEMENT   |              |\n|*  1 |  COUNT STOPKEY     |              |\n|*  2 |   TABLE ACCESS FULL| CARD_DETAILS |\n-------------------------------------------\n&nbsp;\nPredicate Information (identified by operation id):\n---------------------------------------------------\n&nbsp;\n   1 - filter(ROWNUM &lt; TO_NUMBER(:B1))\n   2 - filter(\"CUSTOMER_ID\"=TO_NUMBER(:B2))\n&nbsp;\n15 rows selected.\n<\/code><\/pre>\n<p>The problem is that I&#8217;ve not the same plan. I want the predicates for the index access (plan hash value 3722429161).<\/p>\n<p>So I get the maximum information from the AWR plan, with +OUTLINE and +PEEKED_BINDS:<\/p>\n<pre><code>SQL&gt; select * from table(dbms_xplan.display_awr('7ws837zynp1zv',3722429161,format=&gt;'basic +outline +peeked_binds'));\n&nbsp;\nPLAN_TABLE_OUTPUT\n--------------------------------------------------------------------------------\nSQL_ID 7ws837zynp1zv\n--------------------\nSELECT CARD_ID, CUSTOMER_ID, CARD_TYPE, CARD_NUMBER, EXPIRY_DATE,\nIS_VALID, SECURITY_CODE FROM CARD_DETAILS WHERE CUSTOMER_ID = :B2 AND\nROWNUM &lt; :B1\n&nbsp;\nPlan hash value: 3722429161\n&nbsp;\n--------------------------------------------------------------------\n| Id  | Operation                            | Name                |\n--------------------------------------------------------------------\n|   0 | SELECT STATEMENT                     |                     |\n|   1 |  COUNT STOPKEY                       |                     |\n|   2 |   TABLE ACCESS BY INDEX ROWID BATCHED| CARD_DETAILS        |\n|   3 |    INDEX RANGE SCAN                  | CARDDETAILS_CUST_IX |\n--------------------------------------------------------------------\n&nbsp;\nOutline Data\n-------------\n&nbsp;\n  \/*+\n      BEGIN_OUTLINE_DATA\n      IGNORE_OPTIM_EMBEDDED_HINTS\n      OPTIMIZER_FEATURES_ENABLE('12.1.0.2')\n      DB_VERSION('12.1.0.2')\n      ALL_ROWS\n      OUTLINE_LEAF(@\"SEL$1\")\n      INDEX_RS_ASC(@\"SEL$1\" \"CARD_DETAILS\"@\"SEL$1\"\n              (\"CARD_DETAILS\".\"CUSTOMER_ID\"))\n      BATCH_TABLE_ACCESS_BY_ROWID(@\"SEL$1\" \"CARD_DETAILS\"@\"SEL$1\")\n      END_OUTLINE_DATA\n  *\/\n&nbsp;\nPeeked Binds (identified by position):\n--------------------------------------\n&nbsp;\n   1 - :B2 (NUMBER): 315821\n   2 - :B1 (NUMBER): 15\n&nbsp;\n39 rows selected.\n<\/code><\/pre>\n<p>And I can now do the explain plan with the hints coming from the outlines (I can also replace the variables with the binds if I want to, as they are those that were peeked to optimize the statement):<\/p>\n<pre><code>SQL&gt; explain plan for\n  2  SELECT\n  3    \/*+\n  4        OPTIMIZER_FEATURES_ENABLE('12.1.0.2')\n  5        DB_VERSION('12.1.0.2')\n  6        ALL_ROWS\n  7        OUTLINE_LEAF(@\"SEL$1\")\n  8        INDEX_RS_ASC(@\"SEL$1\" \"CARD_DETAILS\"@\"SEL$1\"\n  9                (\"CARD_DETAILS\".\"CUSTOMER_ID\"))\n 10        BATCH_TABLE_ACCESS_BY_ROWID(@\"SEL$1\" \"CARD_DETAILS\"@\"SEL$1\")\n 11    *\/\n 12  CARD_ID, CUSTOMER_ID, CARD_TYPE, CARD_NUMBER, EXPIRY_DATE,\n 13  IS_VALID, SECURITY_CODE FROM CARD_DETAILS WHERE CUSTOMER_ID = :B2 AND\n 14  ROWNUM  select * from table(dbms_xplan.display(format=&gt;'basic +predicate'));\n&nbsp;\nPLAN_TABLE_OUTPUT\n--------------------------------------------------------------------------------\nPlan hash value: 3722429161\n&nbsp;\n--------------------------------------------------------------------\n| Id  | Operation                            | Name                |\n--------------------------------------------------------------------\n|   0 | SELECT STATEMENT                     |                     |\n|*  1 |  COUNT STOPKEY                       |                     |\n|   2 |   TABLE ACCESS BY INDEX ROWID BATCHED| CARD_DETAILS        |\n|*  3 |    INDEX RANGE SCAN                  | CARDDETAILS_CUST_IX |\n--------------------------------------------------------------------\n&nbsp;\nPredicate Information (identified by operation id):\n---------------------------------------------------\n&nbsp;\n   1 - filter(ROWNUM &lt; TO_NUMBER(:B1))\n   3 - access(\"CUSTOMER_ID\"=TO_NUMBER(:B2))\n&nbsp;\n16 rows selected.\n<\/code><\/pre>\n<p>Bingo, I&#8217;ve now the predicates.<\/p>\n<h3>Time for a Wish<\/h3>\n<p>I wish that one day Oracle will release that limitation so that we can get predicate information from AWR (when in EE + Diagnostic Pack) and Statspack (SE and EE without option).<\/p>\n<p>I&#8217;ve posted the idea on OTN. Please vote for the idea <a href=\"https:\/\/community.oracle.com\/ideas\/2494\">here<\/a><\/p>\n<h3>Update 13-MAY-2020<\/h3>\n<p>Good news about it:<br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/20c-awr-now-stores-explain-plan-predicates\/\">https:\/\/www.dbi-services.com\/blog\/20c-awr-now-stores-explain-plan-predicates\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Franck Pachot . What is the most important part in an execution plan? It&#8217;s probably the predicate section. It helps to see implicit conversions. It helps to understand why an index is used or not. Or to see additional predicates coming from constraints. When you get an execution plan from shared pool, the dbms_xplan.display_cursor() [&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":[349,96,458],"type_dbi":[],"class_list":["post-3735","post","type-post","status-publish","format-standard","hentry","category-database-management","category-oracle","tag-optimizer","tag-oracle","tag-oracle-20c"],"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>AWR does not store explain plan predicates - dbi Blog<\/title>\n<meta name=\"description\" content=\"Why you don&#039;t have predicate information from AWR \/ Statspack execution plans? Reason and workaround.\" \/>\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\/awr-dont-store-explain-plan-predicates\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"AWR does not store explain plan predicates\" \/>\n<meta property=\"og:description\" content=\"Why you don&#039;t have predicate information from AWR \/ Statspack execution plans? Reason and workaround.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/awr-dont-store-explain-plan-predicates\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-11-11T17:49:34+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\/awr-dont-store-explain-plan-predicates\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/awr-dont-store-explain-plan-predicates\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"headline\":\"AWR does not store explain plan predicates\",\"datePublished\":\"2014-11-11T17:49:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/awr-dont-store-explain-plan-predicates\/\"},\"wordCount\":587,\"commentCount\":0,\"keywords\":[\"Optimizer\",\"Oracle\",\"Oracle 20c\"],\"articleSection\":[\"Database management\",\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/awr-dont-store-explain-plan-predicates\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/awr-dont-store-explain-plan-predicates\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/awr-dont-store-explain-plan-predicates\/\",\"name\":\"AWR does not store explain plan predicates - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2014-11-11T17:49:34+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee\"},\"description\":\"Why you don't have predicate information from AWR \/ Statspack execution plans? Reason and workaround.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/awr-dont-store-explain-plan-predicates\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/awr-dont-store-explain-plan-predicates\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/awr-dont-store-explain-plan-predicates\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"AWR does not store explain plan predicates\"}]},{\"@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":"AWR does not store explain plan predicates - dbi Blog","description":"Why you don't have predicate information from AWR \/ Statspack execution plans? Reason and workaround.","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\/awr-dont-store-explain-plan-predicates\/","og_locale":"en_US","og_type":"article","og_title":"AWR does not store explain plan predicates","og_description":"Why you don't have predicate information from AWR \/ Statspack execution plans? Reason and workaround.","og_url":"https:\/\/www.dbi-services.com\/blog\/awr-dont-store-explain-plan-predicates\/","og_site_name":"dbi Blog","article_published_time":"2014-11-11T17:49:34+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\/awr-dont-store-explain-plan-predicates\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/awr-dont-store-explain-plan-predicates\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"headline":"AWR does not store explain plan predicates","datePublished":"2014-11-11T17:49:34+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/awr-dont-store-explain-plan-predicates\/"},"wordCount":587,"commentCount":0,"keywords":["Optimizer","Oracle","Oracle 20c"],"articleSection":["Database management","Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/awr-dont-store-explain-plan-predicates\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/awr-dont-store-explain-plan-predicates\/","url":"https:\/\/www.dbi-services.com\/blog\/awr-dont-store-explain-plan-predicates\/","name":"AWR does not store explain plan predicates - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2014-11-11T17:49:34+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"description":"Why you don't have predicate information from AWR \/ Statspack execution plans? Reason and workaround.","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/awr-dont-store-explain-plan-predicates\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/awr-dont-store-explain-plan-predicates\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/awr-dont-store-explain-plan-predicates\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"AWR does not store explain plan predicates"}]},{"@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\/3735","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=3735"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/3735\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=3735"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=3735"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=3735"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=3735"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}