{"id":3435,"date":"2020-06-25T17:19:49","date_gmt":"2020-06-25T17:19:49","guid":{"rendered":"https:\/\/nenadnoveljic.com\/blog\/?p=3435"},"modified":"2021-09-15T09:36:55","modified_gmt":"2021-09-15T09:36:55","slug":"lateral-view-improvement-in-oracle-19c","status":"publish","type":"post","link":"https:\/\/nenadnoveljic.com\/blog\/lateral-view-improvement-in-oracle-19c\/","title":{"rendered":"Lateral View Improvement in Oracle 19c"},"content":{"rendered":"<h1>12c<\/h1>\n<p>Are you familiar with de-correlated lateral view query transformation (DCL)? If not, I recommend first reading <a href=\"https:\/\/hourim.wordpress.com\/2017\/03\/25\/de-correlated-lateral-view-vw_dcl_mmm\/\">Mohamed Houri&#8217;s article on this topic<\/a>.<\/p>\n<p>The presence of both AND and OR predicates in the join condition is a prerequisite for a lateral correlated subquery. I&#8217;ll be focusing on a very specific case &#8211; when the join predicate contains filters on both outer and inner table. In particular, I&#8217;ll show what has improved in Oracle 19c.<\/p>\n<p>Here&#8217;s the slightly changed query from Mohamed&#8217;s test case:<\/p>\n<pre><code>select t1.flag2, t2.padding\n  from t1 left outer join t2 on\n  (\n    t1.id1 = t2.product_t1 and\n    (\n      <span style=\"color:red\">t2<\/span>.start_date &lt;= sysdate and\n      <span style=\"color:red\">t1<\/span>.flag1 in (1,2)\n    )\n);<\/code><\/pre>\n<p>The plan in 12c is:<\/p>\n<pre><code>----------------------------------------------------------+-----------------------------------+\n| Id  | Operation                        | Name           | Rows  | Bytes | Cost  | Time      |\n----------------------------------------------------------+-----------------------------------+\n| 0   | SELECT STATEMENT                 |                |       |       |   29K |           |\n| 1   |  MERGE JOIN OUTER                |                |   10K |  166K |   29K |  00:06:01 |\n| 2   |   TABLE ACCESS FULL              | T1             |   10K |   98K |    22 |  00:00:01 |\n| 3   |   BUFFER SORT                    |                |     1 |     7 |   29K |  00:06:01 |\n| 4   |    VIEW                          | <span style=\"color:red\">VW_LAT_C83A7ED5<\/span>|     1 |     7 |     3 |  00:00:01 |\n| 5   |     FILTER                       |                |       |       |       |           |\n| 6   |      TABLE ACCESS BY INDEX ROWID | T2             |     1 |    27 |     3 |  00:00:01 |\n| 7   |       INDEX RANGE SCAN           | IDX_T2_USR_1   |     1 |       |     2 |  00:00:01 |\n----------------------------------------------------------+-----------------------------------+\nQuery Block Name \/ Object Alias(identified by operation id):\n------------------------------------------------------------\n 1 - SEL$F7AF7B7D\n 2 - SEL$F7AF7B7D         \/ T1@SEL$1\n <span style=\"color:red\">4 - SEL$BCD4421C         \/ VW_LAT_AE9E49E8@SEL$AE9E49E8<\/span>\n 5 - SEL$BCD4421C\n 6 - SEL$BCD4421C         \/ T2@SEL$1\n 7 - SEL$BCD4421C         \/ T2@SEL$1<\/code><\/pre>\n<p>The optimizer rewrote the inner table as a lateral subquery:<\/p>\n<pre><code>SELECT \"T1\".\"FLAG2\" \"FLAG2\",\"VW_LAT_AE9E49E8\".\"ITEM_4_3\" \"PADDING\" FROM \"VBNOV\".\"T1\" \"T1\", <span style=\"color:red\">LATERAL<\/span>( (SELECT \"T2\".\"PADDING\" \"ITEM_4_3\" FROM \"VBNOV\".\"T2\" \"T2\" WHERE \"T1\".\"ID1\"=\"T2\".\"PRODUCT_T1\" AND \"T2\".\"START_DATE\"&lt;=SYSDATE@! AND (\"T1\".\"FLAG1\"=1 OR \"T1\".\"FLAG1\"=2)))(+) \"<span style=\"color:red\">VW_LAT_AE9E49E8<\/span>\"<\/code><\/pre>\n<p>However, it bypassed the DCL:<\/p>\n<pre><code>DCL: Checking validity of lateral view decorrelation SEL$BCD4421C (#1)\nDCL: Bypassed: view has non-well-formed predicate\nDCL: Failed decorrelation validity for lateral view block SEL$BCD4421C (#1)<\/code><\/pre>\n<p>The entry &#8220;non-well-formed predicate&#8221; appears when we mix outer and inner table predicates in the join clause. But, what&#8217;s the point of producing a lateral subquery which can&#8217;t be transformed? This can have a detrimental impact on performance!<\/p>\n<h1>19c<\/h1>\n<p>The handling has significantly improved in 19c. No lateral subqeries in the execution plan:<\/p>\n<pre><code>------------------------------------------------------------------------------\n| Id  | Operation             | Name | Rows  | Bytes | Cost (%CPU)| Time     |\n------------------------------------------------------------------------------\n|   0 | SELECT STATEMENT      |      | 13751 |  1074K|    42   (3)| 00:00:01 |\n|*  1 |  HASH JOIN RIGHT OUTER|      | 13751 |  1074K|    42   (3)| 00:00:01 |\n|*  2 |   TABLE ACCESS FULL   | T2   |  5001 |   170K|    19   (0)| 00:00:01 |\n|   3 |   TABLE ACCESS FULL   | T1   | 10000 |   439K|    22   (0)| 00:00:01 |\n------------------------------------------------------------------------------<\/code><\/pre>\n<p>The enhancement is implemented with the following bug fix:<\/p>\n<pre><code>select sql_feature,description, optimizer_feature_enable\n  from v$system_fix_control where bugno = 28012754 ;\n\nSQL_FEATURE                                                      DESCRIPTION                                                      OPTIMIZER_FEATURE_ENABLE\n---------------------------------------------------------------- ---------------------------------------------------------------- -------------------------\nQKSFM_TRANSFORMATION_28012754                                    LATERAL view merge enhancement                                   19.1.0<\/code><\/pre>\n<p>There are, unfortunately, some limitations. The improvement is implemented only for stand-alone queries. CTAS and insert\/select perform poorly, like in 12c. <a href=\"https:\/\/orastory.wordpress.com\/2016\/07\/06\/outer-join-with-or-and-lateral-view-decorrelation\/\">The case reported by Dominic Brooks<\/a> doesn&#8217;t benefit from the improvement either.<\/p>\n<h1>Workaround<\/h1>\n<p>The optimizer produces a lateral subquery only if there are both AND and OR predicates in the JOIN clause. We can rewrite the query, so that those prerequisites aren&#8217;t fulfilled, for example:<\/p>\n<pre><code>select t1.flag2, t2.padding\n  from t1 left outer join t2 on\n  (\n    t1.id1 = t2.product_t1 and\n    t2.start_date &lt;= sysdate\n  ) where t1.flag1 in (1,2) \nunion all\nselect t1.flag2, null\n  from t1 \nwhere t1.flag1 not in (1,2) ;\n\n----------------------------------------------------------------------------\n| Id  | Operation           | Name | Rows  | Bytes | Cost (%CPU)| Time     |\n----------------------------------------------------------------------------\n|   0 | SELECT STATEMENT    |      | 14999 |   351K|    63   (0)| 00:00:01 |\n|   1 |  UNION-ALL          |      |       |       |            |          |\n|*  2 |   HASH JOIN OUTER   |      |  9999 |   322K|    41   (0)| 00:00:01 |\n|*  3 |    TABLE ACCESS FULL| T1   |  5001 | 50010 |    22   (0)| 00:00:01 |\n|*  4 |    TABLE ACCESS FULL| T2   | 10000 |   224K|    19   (0)| 00:00:01 |\n|*  5 |   TABLE ACCESS FULL | T1   |  5000 | 30000 |    22   (0)| 00:00:01 |\n----------------------------------------------------------------------------<\/code><\/pre>\n<h1>Summary<\/h1>\n<p>The optimizer sometimes generates a lateral subquery which it can&#8217;t de-correlate. A large query block named VW_LAT_.. might be a sign of a bypassed de-correlation and a poor execution plan. Although the handling has improved in 19c, there are still suboptimal cases. We can rewrite such queries to avoid the preconditions for lateral subqueries.<\/p>\n<h1>Updates<\/h1>\n<h2>August 18, 2020<\/h2>\n<p>Many thanks to <a href=\"https:\/\/twitter.com\/ivicaarsov\">Ivica Arsov<\/a> for identifying the unpublished bug <i>31009032\tFIX FOR BUGS 28012754 AND 30776676 DO NOT WORK FOR DML AND DDL OPERATIONS<\/i> as the root cause. The patch <i>31683181: MERGE ON DATABASE RU 19.7.0.0.0 OF 30776676 31009032<\/i> resolves the issue. Don&#8217;t forget to explicitly enable the bug fix (that&#8217;s not mentioned in the README):<\/p>\n<pre><code>alter system set \"_fix_control\"='31009032:ON';<\/code><\/pre>\n<p>Unfortunately, there&#8217;s a conflict with the patch for another bug affecting the lateral views performance: <i>Bug 30786641 : QUERY PERFORMANCE REGRESSION AFTER UPGRADING FROM 11.2.0.4 TO 19.5<\/i>.<\/p>\n<p>We&#8217;re waiting on the merge request.<\/p>\n<h2>October 15, 2020<\/h2>\n<p>The patch <i>31939459: MERGE ON DATABASE RU 19.7.0.0.0 OF 30786641 31009032<\/i> contains both bug fixes. It works well.<\/p>\n<h2>September 15, 2021: Oracle 21c<\/h2>\n<p>The problem is fixed in 21c.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Suboptimal handling of lateral views has improved in Oracle 19c. <a href=\"https:\/\/nenadnoveljic.com\/blog\/lateral-view-improvement-in-oracle-19c\/\" 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":[36,11,5],"tags":[],"class_list":["post-3435","post","type-post","status-publish","format-standard","hentry","category-19c","category-cost-based-optimizer","category-oracle"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Lateral View Improvement in Oracle 19c - All-round Database Topics<\/title>\n<meta name=\"description\" content=\"Suboptimal handling of lateral views has improved in Oracle 19c.\" \/>\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\/lateral-view-improvement-in-oracle-19c\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Lateral View Improvement in Oracle 19c - All-round Database Topics\" \/>\n<meta property=\"og:description\" content=\"Suboptimal handling of lateral views has improved in Oracle 19c.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/nenadnoveljic.com\/blog\/lateral-view-improvement-in-oracle-19c\/\" \/>\n<meta property=\"og:site_name\" content=\"All-round Database Topics\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-25T17:19:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-09-15T09:36:55+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=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/lateral-view-improvement-in-oracle-19c\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/lateral-view-improvement-in-oracle-19c\\\/\"},\"author\":{\"name\":\"Nenad Noveljic\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#\\\/schema\\\/person\\\/51458d9dd86dbbdd19f5add451d44efa\"},\"headline\":\"Lateral View Improvement in Oracle 19c\",\"datePublished\":\"2020-06-25T17:19:49+00:00\",\"dateModified\":\"2021-09-15T09:36:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/lateral-view-improvement-in-oracle-19c\\\/\"},\"wordCount\":413,\"commentCount\":2,\"articleSection\":[\"19c\",\"cost based optimizer\",\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/lateral-view-improvement-in-oracle-19c\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/lateral-view-improvement-in-oracle-19c\\\/\",\"url\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/lateral-view-improvement-in-oracle-19c\\\/\",\"name\":\"Lateral View Improvement in Oracle 19c - All-round Database Topics\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#website\"},\"datePublished\":\"2020-06-25T17:19:49+00:00\",\"dateModified\":\"2021-09-15T09:36:55+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#\\\/schema\\\/person\\\/51458d9dd86dbbdd19f5add451d44efa\"},\"description\":\"Suboptimal handling of lateral views has improved in Oracle 19c.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/lateral-view-improvement-in-oracle-19c\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/lateral-view-improvement-in-oracle-19c\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/lateral-view-improvement-in-oracle-19c\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Lateral View Improvement in Oracle 19c\"}]},{\"@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":"Lateral View Improvement in Oracle 19c - All-round Database Topics","description":"Suboptimal handling of lateral views has improved in Oracle 19c.","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\/lateral-view-improvement-in-oracle-19c\/","og_locale":"en_US","og_type":"article","og_title":"Lateral View Improvement in Oracle 19c - All-round Database Topics","og_description":"Suboptimal handling of lateral views has improved in Oracle 19c.","og_url":"https:\/\/nenadnoveljic.com\/blog\/lateral-view-improvement-in-oracle-19c\/","og_site_name":"All-round Database Topics","article_published_time":"2020-06-25T17:19:49+00:00","article_modified_time":"2021-09-15T09:36:55+00:00","author":"Nenad Noveljic","twitter_card":"summary_large_image","twitter_creator":"@NenadNoveljic","twitter_misc":{"Written by":"Nenad Noveljic","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/nenadnoveljic.com\/blog\/lateral-view-improvement-in-oracle-19c\/#article","isPartOf":{"@id":"https:\/\/nenadnoveljic.com\/blog\/lateral-view-improvement-in-oracle-19c\/"},"author":{"name":"Nenad Noveljic","@id":"https:\/\/nenadnoveljic.com\/blog\/#\/schema\/person\/51458d9dd86dbbdd19f5add451d44efa"},"headline":"Lateral View Improvement in Oracle 19c","datePublished":"2020-06-25T17:19:49+00:00","dateModified":"2021-09-15T09:36:55+00:00","mainEntityOfPage":{"@id":"https:\/\/nenadnoveljic.com\/blog\/lateral-view-improvement-in-oracle-19c\/"},"wordCount":413,"commentCount":2,"articleSection":["19c","cost based optimizer","Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/nenadnoveljic.com\/blog\/lateral-view-improvement-in-oracle-19c\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/nenadnoveljic.com\/blog\/lateral-view-improvement-in-oracle-19c\/","url":"https:\/\/nenadnoveljic.com\/blog\/lateral-view-improvement-in-oracle-19c\/","name":"Lateral View Improvement in Oracle 19c - All-round Database Topics","isPartOf":{"@id":"https:\/\/nenadnoveljic.com\/blog\/#website"},"datePublished":"2020-06-25T17:19:49+00:00","dateModified":"2021-09-15T09:36:55+00:00","author":{"@id":"https:\/\/nenadnoveljic.com\/blog\/#\/schema\/person\/51458d9dd86dbbdd19f5add451d44efa"},"description":"Suboptimal handling of lateral views has improved in Oracle 19c.","breadcrumb":{"@id":"https:\/\/nenadnoveljic.com\/blog\/lateral-view-improvement-in-oracle-19c\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/nenadnoveljic.com\/blog\/lateral-view-improvement-in-oracle-19c\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/nenadnoveljic.com\/blog\/lateral-view-improvement-in-oracle-19c\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/nenadnoveljic.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Lateral View Improvement in Oracle 19c"}]},{"@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\/3435","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=3435"}],"version-history":[{"count":1,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/posts\/3435\/revisions"}],"predecessor-version":[{"id":3904,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/posts\/3435\/revisions\/3904"}],"wp:attachment":[{"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/media?parent=3435"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/categories?post=3435"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/tags?post=3435"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}