{"id":3732,"date":"2021-03-15T17:08:18","date_gmt":"2021-03-15T17:08:18","guid":{"rendered":"https:\/\/nenadnoveljic.com\/blog\/?p=3732"},"modified":"2021-07-09T16:23:26","modified_gmt":"2021-07-09T16:23:26","slug":"fbar-timer-active-session-history-instrumentation-gap","status":"publish","type":"post","link":"https:\/\/nenadnoveljic.com\/blog\/fbar-timer-active-session-history-instrumentation-gap\/","title":{"rendered":"fbar timer &#8211; Active Session History Instrumentation Gap"},"content":{"rendered":"<h1>Active Session History<\/h1>\n<p>I was almost fooled by missing data while doing a performance analysis based on active session history (ASH).<\/p>\n<p>The application reported a problem on an Oracle 19c database: A PL\/SQL procedure call took an hour and a half instead of 5 minutes to complete.<\/p>\n<p>The active session history looked strange:<\/p>\n<pre><code>@<a href=\"https:\/\/github.com\/tanelpoder\/tpt-oracle\/blob\/master\/ash\/dashtop.sql\">dashtop.sql<\/a> top_level_sql_id,sql_exec_id \"session_id = 997 and session_serial# = 58505\" \"timestamp '2021-02-26 05:36:37'\" \"timestamp '2021-02-26 08:03:09'\"\n    Total\n  Seconds     AAS %This   TOP_LEVEL_SQL SQL_EXEC_ID FIRST_SEEN          LAST_SEEN\n--------- ------- ------- ------------- ----------- ------------------- -------------------\n      290      .0   97%   289q4500mqm43    16777216 2021-02-26 05:36:40 2021-02-26 08:03:06\n\nSQL&gt; @https:\/\/github.com\/tanelpoder\/tpt-oracle\/blob\/master\/awr\/awr_sqlid.sql 289q4500mqm43\n\n      DBID SQL_ID        SQL_TEXT                                                                                                                                                                                                 COMMAND_TYPE   CON_DBID     CON_ID\n---------- ------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------ ---------- ----------\n 771238284 289q4500mqm43 BEGIN package.init_procedure; END;                                                                                                                                                    47  771238284          0<\/code><\/pre>\n<p>If you counted samples for estimating the database time, you could conclude that the session spent only a fraction of the total time in the database (290s out of 87 minutes). But during the whole time period between 05:36:40 and 08:03:06, the session was executing a single PL\/SQL procedure call. Consequently, the time must have been spent in the database, but the ASH samples were missing.<\/p>\n<h1>Flashback Data Archive<\/h1>\n<p>Fortunately, the server dedicated process left some information in its trace. It interacted with the Flashback Data Archive (FBDA) background process:<\/p>\n<pre><code>*** SESSION ID:(997.58505) 2021-02-26T05:36:58.306653+01:00\n...\n*** 2021-02-26T05:37:20.673061+01:00\n...\nktfaTrace: ktfacmtcbk:12071 =Inline Propagate large:19.22.4011802:changes:903, undoblks:17\n...\n*** 2021-02-26T08:03:08.617529+01:00\nktfaTrace: ktfa_slave_schedule:12387 =FBDA Slave called\nktfaTrace: ktfa_slave_schedule:12390 =FDA slave task scheduled\nktfaTrace: ktfa_slave_schedule:12392 =ktfa_slave_schedule:ktsj_status=0<\/code><\/pre>\n<p>I inspected the PL\/SQL procedure, and identified the suspects: truncate and table statistics gathering.<\/p>\n<h1>fbar timer<\/h1>\n<p>I setup a test case with FBDA:<\/p>\n<pre><code>create flashback archive fba1 tablespace tools retention 1 year;\ncreate table t (n integer) flashback archive fba1;<\/code><\/pre>\n<p>First, I suspended the fbda process:<\/p>\n<pre><code>ps -ef | grep fbda | grep DB1\noracle   18082 17800   0   Dec 28 ?           2:23 ora_fbda_DB1<\/code><\/pre>\n<pre><code>oradebug setospid 18082\noradebug suspend<\/code><\/pre>\n<p>Then I ran truncate:<\/p>\n<pre><code>truncate table t ;<\/code><\/pre>\n<p>Truncate was hanging without leaving any samples in ASH:<\/p>\n<pre><code>@<a href=\"https:\/\/github.com\/tanelpoder\/tpt-oracle\/blob\/master\/ash\/ashtop.sql\">ashtop.sql<\/a> event2 session_id=815 &amp;1min\n\nno rows selected<\/code><\/pre>\n<p>So I reproduced a variant of this problem.<\/p>\n<p>But what was the process doing?<\/p>\n<p>It was waiting on fbar timer:<\/p>\n<pre><code>column event format a15\ncolumn wait_class format a15\n\nselect event,wait_class,status,seconds_in_wait from v$session where sid=815 ;\n\nEVENT           WAIT_CLASS      STATUS   SECONDS_IN_WAIT\n--------------- --------------- -------- ---------------\nfbar timer      Idle            ACTIVE               546<\/code><\/pre>\n<p>fbar timer isn&#8217;t documented, but I guessed its meaning by looking at the stack of the server dedicated process hanging in truncate:<\/p>\n<pre><code>pstack 27109\n27109:  oracleDB1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))\n 00007fffa617741a portfs   (5, 4, 7fffbffe3480, 0, 1dcd6500, 7fffbffe34a0)\n 000000000622c44d sskgpwwait () + dd\n 000000000622c033 skgpwwait () + c3\n 000000000642e664 ksliwat () + 9b4\n 000000000642d84f kslwaitctx () + af\n 000000000a7a3a58 ktfa_do_prepare_ddl () + 1b8\n 00000000069d448c ktfa_check_ddl_fda_tables () + 179c\n 0000000006947ce6 opiSem () + 696\n 00000000069cbaaf opiprs () + 11f\n 00000000069ca3ff kksParseChildCursor () + 1ff<\/code><\/pre>\n<p>The server dedicated process is waiting on a message (from fbda). Apparently, there&#8217;s some communication between the server dedicated process and fbda in the case of DDLs. Consequently, if fbda is doing something else and doesn&#8217;t send the message, or the message gets lost, the user session will keep hanging. On top of that, this time isn&#8217;t visible in ASH.<\/p>\n<p>Why is fbar timer not visible in ASH?<\/p>\n<p>Because, it&#8217;s wrongly classified as &#8220;Idle&#8221;:<\/p>\n<pre><code>select wait_class from v$event_name where name = 'fbar timer' ;\n\nWAIT_CLASS\n----------------------------------------------------------------\nIdle<\/code><\/pre>\n<p>In contrast, Tanel Poder&#8217;s <a href=\"https:\/\/github.com\/tanelpoder\/tpt-oracle\/blob\/master\/snapper.sql\">Snapper<\/a> highlights the problem:<\/p>\n<pre><code>@<a href=\"https:\/\/github.com\/tanelpoder\/tpt-oracle\/blob\/master\/snapper.sql\">snapper<\/a> all 10 1 815\nSampling SID 815 with interval 10 seconds, taking 1 snapshots...\n\n-- Session Snapper v4.30 - by Tanel Poder ( http:\/\/blog.tanelpoder.com\/snapper ) - Enjoy the Most Advanced Oracle Troubleshooting Script on the Planet! :)\n\n---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n    SID, USERNAME  , TYPE, STATISTIC                                                 ,         DELTA, HDELTA\/SEC,    %TIME, GRAPH       , NUM_WAITS,  WAITS\/SEC,   AVERAGES\n---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n    815, USER1     , STAT, in call idle wait time                                    ,          1001,      99.53,         ,             ,          ,           ,          ~ per execution\n    815, USER1     , WAIT, fbar timer                                                ,      20002541,      1.99s,   198.9%, [WWWWWWWWWW],         0,          0,        20s average wait\n\n--  End of Stats snap 1, end=2021-03-15 15:39:47, seconds=10.1\n\n    <no active=\"\" sessions=\"\" captured=\"\" during=\"\" the=\"\" sampling=\"\" period=\"\">\n\n--  End of ASH snap 1, end=2021-03-15 15:39:47, seconds=10, samples_taken=92, AAS=0<\/no><\/code><\/pre>\n<p>When truncate completes (after issuing &#8220;oradebug resume&#8221; in this test case) tkprof will display the wait and elapsed time correctly:<\/p>\n<pre><code>truncate table t\n\n\ncall     count       cpu    elapsed       disk      query    current        rows\n------- ------  -------- ---------- ---------- ---------- ----------  ----------\nParse        1      0.82    2757.71          0          0          0           0\nExecute      1      0.00       4.50          0          0          0           0\nFetch        0      0.00       0.00          0          0          0           0\n------- ------  -------- ---------- ---------- ---------- ----------  ----------\ntotal        2      0.82    2762.22          0          0          0           0\n\nMisses in library cache during parse: 1\nOptimizer mode: ALL_ROWS\nParsing user id: 88\n\nElapsed times include waiting on following events:\n  Event waited on                             Times   Max. Wait  Total Waited\n  ----------------------------------------   Waited  ----------  ------------\n  fbar timer                                      6     2757.69       2762.21\n  PGA memory operation                            1        0.00          0.00\n  SQL*Net message to client                       1        0.00          0.00\n  SQL*Net message from client                     1        0.00          0.00\n********************************************************************************<\/code><\/pre>\n<h1>Bugs<\/h1>\n<p>Below is the list of the open bugs which cause the user session to wait on fbar timer:<\/p>\n<ul>\n<li>Bug 31667263 : STATS HANG WAITING AS FINAL BLOCKER FOR &#8216;FBAR TIMER&#8217;<\/li>\n<li>Bug 31625755 : FBDA DISABLE SLOW WAITING FOR &#8216;FBAR TIMER&#8217; FOR HUGE NUMBER OF FBDA TABLES<\/li>\n<li>Bug 31031183 : FBDA: HANG IN &#8216;FBAR TIMER'&lt;=&#8217;ENQ: TX &#8211; CONTENTION&#8217; WITH HIGH GG EXTRACT LOAD<\/li>\n<li>Bug 32587508 : ORA-1 ERROR WHILE MERGING INTO SYS_FBA_TCRV_% TABLE<\/li>\n<\/ul>\n<h1>Summary<\/h1>\n<p>In the case of DDL on a table with a Flashback Data Archive (FBDA), the dedicated server process communicates with the FBDA background process. Waiting on the message is instrumented with the undocumented fbar timer wait event. As this wait event is classified as Idle, it won&#8217;t appear in the active session history. The unaccounted database time is a consequence. Therefore, be careful when estimating database time by counting ASH samples when tables with FBDA are involved. SQL trace or Tanel Poder&#8217;s Snapper will show the correct information once the issue reappears.<\/p>\n<p>There are several open bugs related to fbar timer. Check the bug descriptions to see if they are relevant for your case.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unaccounted database time in ASH caused by fbar timer wait event. <a href=\"https:\/\/nenadnoveljic.com\/blog\/fbar-timer-active-session-history-instrumentation-gap\/\" 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":[44,5],"tags":[],"class_list":["post-3732","post","type-post","status-publish","format-standard","hentry","category-flashback-data-archive","category-oracle"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>fbar timer - Active Session History Instrumentation Gap - All-round Database Topics<\/title>\n<meta name=\"description\" content=\"Unaccounted database time in ASH caused by fbar timer wait event.\" \/>\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\/fbar-timer-active-session-history-instrumentation-gap\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"fbar timer - Active Session History Instrumentation Gap - All-round Database Topics\" \/>\n<meta property=\"og:description\" content=\"Unaccounted database time in ASH caused by fbar timer wait event.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/nenadnoveljic.com\/blog\/fbar-timer-active-session-history-instrumentation-gap\/\" \/>\n<meta property=\"og:site_name\" content=\"All-round Database Topics\" \/>\n<meta property=\"article:published_time\" content=\"2021-03-15T17:08:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-07-09T16:23:26+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\\\/fbar-timer-active-session-history-instrumentation-gap\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/fbar-timer-active-session-history-instrumentation-gap\\\/\"},\"author\":{\"name\":\"Nenad Noveljic\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#\\\/schema\\\/person\\\/51458d9dd86dbbdd19f5add451d44efa\"},\"headline\":\"fbar timer &#8211; Active Session History Instrumentation Gap\",\"datePublished\":\"2021-03-15T17:08:18+00:00\",\"dateModified\":\"2021-07-09T16:23:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/fbar-timer-active-session-history-instrumentation-gap\\\/\"},\"wordCount\":528,\"commentCount\":2,\"articleSection\":[\"fashback data archive\",\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/fbar-timer-active-session-history-instrumentation-gap\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/fbar-timer-active-session-history-instrumentation-gap\\\/\",\"url\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/fbar-timer-active-session-history-instrumentation-gap\\\/\",\"name\":\"fbar timer - Active Session History Instrumentation Gap - All-round Database Topics\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#website\"},\"datePublished\":\"2021-03-15T17:08:18+00:00\",\"dateModified\":\"2021-07-09T16:23:26+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#\\\/schema\\\/person\\\/51458d9dd86dbbdd19f5add451d44efa\"},\"description\":\"Unaccounted database time in ASH caused by fbar timer wait event.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/fbar-timer-active-session-history-instrumentation-gap\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/fbar-timer-active-session-history-instrumentation-gap\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/fbar-timer-active-session-history-instrumentation-gap\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"fbar timer &#8211; Active Session History Instrumentation Gap\"}]},{\"@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":"fbar timer - Active Session History Instrumentation Gap - All-round Database Topics","description":"Unaccounted database time in ASH caused by fbar timer wait event.","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\/fbar-timer-active-session-history-instrumentation-gap\/","og_locale":"en_US","og_type":"article","og_title":"fbar timer - Active Session History Instrumentation Gap - All-round Database Topics","og_description":"Unaccounted database time in ASH caused by fbar timer wait event.","og_url":"https:\/\/nenadnoveljic.com\/blog\/fbar-timer-active-session-history-instrumentation-gap\/","og_site_name":"All-round Database Topics","article_published_time":"2021-03-15T17:08:18+00:00","article_modified_time":"2021-07-09T16:23:26+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\/fbar-timer-active-session-history-instrumentation-gap\/#article","isPartOf":{"@id":"https:\/\/nenadnoveljic.com\/blog\/fbar-timer-active-session-history-instrumentation-gap\/"},"author":{"name":"Nenad Noveljic","@id":"https:\/\/nenadnoveljic.com\/blog\/#\/schema\/person\/51458d9dd86dbbdd19f5add451d44efa"},"headline":"fbar timer &#8211; Active Session History Instrumentation Gap","datePublished":"2021-03-15T17:08:18+00:00","dateModified":"2021-07-09T16:23:26+00:00","mainEntityOfPage":{"@id":"https:\/\/nenadnoveljic.com\/blog\/fbar-timer-active-session-history-instrumentation-gap\/"},"wordCount":528,"commentCount":2,"articleSection":["fashback data archive","Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/nenadnoveljic.com\/blog\/fbar-timer-active-session-history-instrumentation-gap\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/nenadnoveljic.com\/blog\/fbar-timer-active-session-history-instrumentation-gap\/","url":"https:\/\/nenadnoveljic.com\/blog\/fbar-timer-active-session-history-instrumentation-gap\/","name":"fbar timer - Active Session History Instrumentation Gap - All-round Database Topics","isPartOf":{"@id":"https:\/\/nenadnoveljic.com\/blog\/#website"},"datePublished":"2021-03-15T17:08:18+00:00","dateModified":"2021-07-09T16:23:26+00:00","author":{"@id":"https:\/\/nenadnoveljic.com\/blog\/#\/schema\/person\/51458d9dd86dbbdd19f5add451d44efa"},"description":"Unaccounted database time in ASH caused by fbar timer wait event.","breadcrumb":{"@id":"https:\/\/nenadnoveljic.com\/blog\/fbar-timer-active-session-history-instrumentation-gap\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/nenadnoveljic.com\/blog\/fbar-timer-active-session-history-instrumentation-gap\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/nenadnoveljic.com\/blog\/fbar-timer-active-session-history-instrumentation-gap\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/nenadnoveljic.com\/blog\/"},{"@type":"ListItem","position":2,"name":"fbar timer &#8211; Active Session History Instrumentation Gap"}]},{"@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\/3732","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=3732"}],"version-history":[{"count":1,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/posts\/3732\/revisions"}],"predecessor-version":[{"id":3737,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/posts\/3732\/revisions\/3737"}],"wp:attachment":[{"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/media?parent=3732"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/categories?post=3732"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/tags?post=3732"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}