{"id":27030,"date":"2023-08-28T11:36:54","date_gmt":"2023-08-28T09:36:54","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=27030"},"modified":"2023-10-12T10:38:53","modified_gmt":"2023-10-12T08:38:53","slug":"postgresql-16-playing-with-pg_stat_io-2-evictions","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-2-evictions\/","title":{"rendered":"PostgreSQL 16: Playing with pg_stat_io (2) \u2013 evictions"},"content":{"rendered":"\n<p>In the <a href=\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-1-extends\/\" target=\"_blank\" rel=\"noreferrer noopener\">last post<\/a> in this little series we&#8217;ve looked at the &#8220;extends&#8221; statistic in <a href=\"https:\/\/www.postgresql.org\/docs\/16\/monitoring-stats.html#MONITORING-PG-STAT-IO-VIEW\" target=\"_blank\" rel=\"noreferrer noopener\">pg_stat_io<\/a>. In this post we&#8217;ll look at the &#8220;eviction&#8221; statistic. Before we go into the details: What is an eviction? Imagine the buffer cache is currently full and PostgreSQL needs to load another block from disk (or the OS cache). For this to work a block which is currently cached in the buffer cache must be evicted (kicked out) to make room for the block to be loaded. And this is what the statistic is about: Tracking the number of evictions. This statistic can help you in identifying if the sizing of your buffer cache (<a href=\"https:\/\/www.postgresql.org\/docs\/16\/runtime-config-resource.html\" target=\"_blank\" rel=\"noreferrer noopener\">shared_buffers<\/a>) is either too small or too large. <\/p>\n\n\n\n<p>The default size of the buffer cache on Linux is 128MB, and this is what we currently have:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1]; title: ; notranslate\" title=\"\">\npostgres=# show shared_buffers;\n shared_buffers \n----------------\n 128MB\n(1 row)\n<\/pre><\/div>\n\n\n<p>Using the <a href=\"https:\/\/www.postgresql.org\/docs\/16\/pgbuffercache.html\" target=\"_blank\" rel=\"noreferrer noopener\">pg_buffercache<\/a> extension we can check how many blocks are currently used right after the instance was started:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1]; title: ; notranslate\" title=\"\">\npostgres=# select count(*) from pg_buffercache where relfilenode is not null;\n count \n-------\n   287\n(1 row)\n\n<\/pre><\/div>\n\n\n<p>This means that 287*8192 (again the block size of the instance) is currently used, which is a bit less than 2.3MB, 2351104 bytes.<\/p>\n\n\n\n<p>This also means that we should not see any evictions in the pg_stat_io view:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,2,3,4,5]; title: ; notranslate\" title=\"\">\npostgres=# select backend_type,evictions \n             from pg_stat_io \n            where backend_type = &#039;client backend&#039;\n              and context = &#039;normal&#039;\n              and object =&#039;relation&#039;;\n  backend_type  | evictions \n----------------+-----------\n client backend |         0\n(1 row)\n<\/pre><\/div>\n\n\n<p>To see any eviction we need to load around 126MB of data, so let&#8217;s do this:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,3,4,6]; title: ; notranslate\" title=\"\">\npostgres=# create table t ( a int, b text, c text, d text );\nCREATE TABLE\npostgres=# insert into t select i,  md5(i::text), md5(i::text), md5(i::text) \n             from generate_series(1,1000000) i;\nINSERT 0 1000000\npostgres=# select pg_size_pretty(pg_relation_size(&#039;t&#039;));\n pg_size_pretty \n----------------\n 128 MB\n(1 row)\n<\/pre><\/div>\n\n\n<p>This should be enough data to already see some evictions:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,2,3,4,5]; title: ; notranslate\" title=\"\">\npostgres=# select backend_type,evictions \n             from pg_stat_io \n            where backend_type = &#039;client backend&#039;\n              and context = &#039;normal&#039;\n              and object =&#039;relation&#039;;\n  backend_type  | evictions \n----------------+-----------\n client backend |       288\n(1 row)\n<\/pre><\/div>\n\n\n<p>Let&#8217;s have a look how much currently is cached for our table:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\npostgres=# select c.relname, count(*) AS buffers\n  from pg_class c\n inner join pg_buffercache b\n       on b.relfilenode=c.relfilenode\n inner join pg_database d\n       on (b.reldatabase=d.oid AND d.datname=current_database())\n where c.relname = &#039;t&#039;\n group by c.relname;\n\n relname | buffers \n---------+---------\n t       |   16237\n(1 row)\n\n<\/pre><\/div>\n\n\n<p>This are (16237*8)\/1024, around 127 MB of data. As the table is 128MB big and around 2MB was already used in the buffer cache some evictions needed to happen. 288 evictions means a bit more than 2MB so this seems to be consistent.<\/p>\n\n\n\n<p>If we create a copy of this table like follows and then again have a look at the evictions but this time for all contexts we&#8217;ll see something like this:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\npostgres=# create table t2 as select * from t;\nSELECT 1000000\npostgres=# select backend_type,evictions,context \n             from pg_stat_io \n            where backend_type = &#039;client backend&#039;\n              and object =&#039;relation&#039;;\n  backend_type  | evictions |  context  \n----------------+-----------+-----------\n client backend |        32 | bulkread\n client backend |      2048 | bulkwrite\n client backend |       323 | normal\n client backend |         0 | vacuum\n<\/pre><\/div>\n\n\n<p>bulkread and bulkwrite means the blocks have been taken out of shared buffers and instead have been placed in a ring buffer for use of bulk I\/O operations. The same is true for vacuum operations:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\npostgres=# update t set d = &#039;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&#039;;\nUPDATE 1000000\npostgres=# vacuum t;\nVACUUM\npostgres=# select backend_type,evictions,context \n             from pg_stat_io \n            where backend_type = &#039;client backend&#039;\n              and object =&#039;relation&#039;;\n  backend_type  | evictions |  context  \n----------------+-----------+-----------\n client backend |     16102 | bulkread\n client backend |      2048 | bulkwrite\n client backend |     18611 | normal\n client backend |        32 | vacuum\n\n<\/pre><\/div>\n\n\n<p>To summarize: When you see many evictions in context &#8220;normal&#8221; this might give you the hint that you buffer cache is too small. Seeing almost no evictions means probably your buffer cache is oversized.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the last post in this little series we&#8217;ve looked at the &#8220;extends&#8221; statistic in pg_stat_io. In this post we&#8217;ll look at the &#8220;eviction&#8221; statistic. Before we go into the details: What is an eviction? Imagine the buffer cache is currently full and PostgreSQL needs to load another block from disk (or the OS cache). [&hellip;]<\/p>\n","protected":false},"author":29,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229],"tags":[2602],"type_dbi":[],"class_list":["post-27030","post","type-post","status-publish","format-standard","hentry","category-database-administration-monitoring","tag-postgresql-2"],"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>PostgreSQL 16: Playing with pg_stat_io (2) \u2013 evictions - 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\/postgresql-16-playing-with-pg_stat_io-2-evictions\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PostgreSQL 16: Playing with pg_stat_io (2) \u2013 evictions\" \/>\n<meta property=\"og:description\" content=\"In the last post in this little series we&#8217;ve looked at the &#8220;extends&#8221; statistic in pg_stat_io. In this post we&#8217;ll look at the &#8220;eviction&#8221; statistic. Before we go into the details: What is an eviction? Imagine the buffer cache is currently full and PostgreSQL needs to load another block from disk (or the OS cache). [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-2-evictions\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-28T09:36:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-12T08:38:53+00:00\" \/>\n<meta name=\"author\" content=\"Daniel Westermann\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@westermanndanie\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Westermann\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 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\/postgresql-16-playing-with-pg_stat_io-2-evictions\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-2-evictions\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"PostgreSQL 16: Playing with pg_stat_io (2) \u2013 evictions\",\"datePublished\":\"2023-08-28T09:36:54+00:00\",\"dateModified\":\"2023-10-12T08:38:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-2-evictions\/\"},\"wordCount\":386,\"commentCount\":0,\"keywords\":[\"postgresql\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-2-evictions\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-2-evictions\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-2-evictions\/\",\"name\":\"PostgreSQL 16: Playing with pg_stat_io (2) \u2013 evictions - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2023-08-28T09:36:54+00:00\",\"dateModified\":\"2023-10-12T08:38:53+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-2-evictions\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-2-evictions\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-2-evictions\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PostgreSQL 16: Playing with pg_stat_io (2) \u2013 evictions\"}]},{\"@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\/8d08e9bd996a89bd75c0286cbabf3c66\",\"name\":\"Daniel Westermann\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"caption\":\"Daniel Westermann\"},\"description\":\"Daniel Westermann is Principal Consultant and Technology Leader Open Infrastructure at dbi services. He has more than 15 years of experience in management, engineering and optimization of databases and infrastructures, especially on Oracle and PostgreSQL. Since the beginning of his career, he has specialized in Oracle Technologies and is Oracle Certified Professional 12c and Oracle Certified Expert RAC\/GridInfra. Over time, Daniel has become increasingly interested in open source technologies, becoming \u201cTechnology Leader Open Infrastructure\u201d and PostgreSQL expert. \u00a0Based on community or EnterpriseDB tools, he develops and installs complex high available solutions with PostgreSQL. He is also a certified PostgreSQL Plus 9.0 Professional and a Postgres Advanced Server 9.4 Professional. He is a regular speaker at PostgreSQL conferences in Switzerland and Europe. Today Daniel is also supporting our customers on AWS services such as AWS RDS, database migrations into the cloud, EC2 and automated infrastructure management with AWS SSM (System Manager). He is a certified AWS Solutions Architect Professional. Prior to dbi services, Daniel was Management System Engineer at LC SYSTEMS-Engineering AG in Basel. Before that, he worked as Oracle Developper &amp;\u00a0Project Manager at Delta Energy Solutions AG in Basel (today Powel AG). Daniel holds a diploma in Business Informatics (DHBW, Germany). His branch-related experience mainly covers the pharma industry, the financial sector, energy, lottery and telecommunications.\",\"sameAs\":[\"https:\/\/x.com\/westermanndanie\"],\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/daniel-westermann\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"PostgreSQL 16: Playing with pg_stat_io (2) \u2013 evictions - 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\/postgresql-16-playing-with-pg_stat_io-2-evictions\/","og_locale":"en_US","og_type":"article","og_title":"PostgreSQL 16: Playing with pg_stat_io (2) \u2013 evictions","og_description":"In the last post in this little series we&#8217;ve looked at the &#8220;extends&#8221; statistic in pg_stat_io. In this post we&#8217;ll look at the &#8220;eviction&#8221; statistic. Before we go into the details: What is an eviction? Imagine the buffer cache is currently full and PostgreSQL needs to load another block from disk (or the OS cache). [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-2-evictions\/","og_site_name":"dbi Blog","article_published_time":"2023-08-28T09:36:54+00:00","article_modified_time":"2023-10-12T08:38:53+00:00","author":"Daniel Westermann","twitter_card":"summary_large_image","twitter_creator":"@westermanndanie","twitter_misc":{"Written by":"Daniel Westermann","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-2-evictions\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-2-evictions\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"PostgreSQL 16: Playing with pg_stat_io (2) \u2013 evictions","datePublished":"2023-08-28T09:36:54+00:00","dateModified":"2023-10-12T08:38:53+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-2-evictions\/"},"wordCount":386,"commentCount":0,"keywords":["postgresql"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-2-evictions\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-2-evictions\/","url":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-2-evictions\/","name":"PostgreSQL 16: Playing with pg_stat_io (2) \u2013 evictions - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2023-08-28T09:36:54+00:00","dateModified":"2023-10-12T08:38:53+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-2-evictions\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-2-evictions\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-2-evictions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PostgreSQL 16: Playing with pg_stat_io (2) \u2013 evictions"}]},{"@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\/8d08e9bd996a89bd75c0286cbabf3c66","name":"Daniel Westermann","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","caption":"Daniel Westermann"},"description":"Daniel Westermann is Principal Consultant and Technology Leader Open Infrastructure at dbi services. He has more than 15 years of experience in management, engineering and optimization of databases and infrastructures, especially on Oracle and PostgreSQL. Since the beginning of his career, he has specialized in Oracle Technologies and is Oracle Certified Professional 12c and Oracle Certified Expert RAC\/GridInfra. Over time, Daniel has become increasingly interested in open source technologies, becoming \u201cTechnology Leader Open Infrastructure\u201d and PostgreSQL expert. \u00a0Based on community or EnterpriseDB tools, he develops and installs complex high available solutions with PostgreSQL. He is also a certified PostgreSQL Plus 9.0 Professional and a Postgres Advanced Server 9.4 Professional. He is a regular speaker at PostgreSQL conferences in Switzerland and Europe. Today Daniel is also supporting our customers on AWS services such as AWS RDS, database migrations into the cloud, EC2 and automated infrastructure management with AWS SSM (System Manager). He is a certified AWS Solutions Architect Professional. Prior to dbi services, Daniel was Management System Engineer at LC SYSTEMS-Engineering AG in Basel. Before that, he worked as Oracle Developper &amp;\u00a0Project Manager at Delta Energy Solutions AG in Basel (today Powel AG). Daniel holds a diploma in Business Informatics (DHBW, Germany). His branch-related experience mainly covers the pharma industry, the financial sector, energy, lottery and telecommunications.","sameAs":["https:\/\/x.com\/westermanndanie"],"url":"https:\/\/www.dbi-services.com\/blog\/author\/daniel-westermann\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/27030","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\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=27030"}],"version-history":[{"count":15,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/27030\/revisions"}],"predecessor-version":[{"id":27501,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/27030\/revisions\/27501"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=27030"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=27030"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=27030"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=27030"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}