{"id":27012,"date":"2023-07-28T10:17:19","date_gmt":"2023-07-28T08:17:19","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=27012"},"modified":"2023-07-28T10:17:22","modified_gmt":"2023-07-28T08:17:22","slug":"postgresql-16-playing-with-pg_stat_io-1-extends","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-1-extends\/","title":{"rendered":"PostgreSQL 16: Playing with pg_stat_io (1) &#8211; extends"},"content":{"rendered":"\n<p>PostgreSQL 16 (<a href=\"https:\/\/www.postgresql.org\/about\/news\/postgresql-16-beta-2-released-2665\/\" target=\"_blank\" rel=\"noreferrer noopener\">currently in beta 2<\/a>) will come with a new view for tracking I\/O related statistics. I&#8217;ve written a very basic blog about <a href=\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-more-i-o-statistics\/\" target=\"_blank\" rel=\"noreferrer noopener\">pg_stat_io<\/a> in the past. In this post and some follow up posts we want to dig a bit deeper into the various statistics this view provides. <\/p>\n\n\n\n<p>The first statistic we want to look at is &#8220;extends&#8221;. Before we do that we need to understand what is meant by &#8220;extends&#8221;. The idea behind that is pretty simple. Consider an empty table like this:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,3]; title: ; notranslate\" title=\"\">\npostgres=# create table t ( a int );\nCREATE TABLE\npostgres=# \\d t\n                 Table &quot;public.t&quot;\n Column |  Type   | Collation | Nullable | Default \n--------+---------+-----------+----------+---------\n a      | integer |           |          | \n<\/pre><\/div>\n\n\n<p>How much disk space does this table currently allocate on disk? One way to get to this information is to ask PostgreSQL:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1]; title: ; notranslate\" title=\"\">\npostgres=# select pg_relation_size(&#039;t&#039;);\n pg_relation_size \n------------------\n                0\n(1 row)\n<\/pre><\/div>\n\n\n<p>This means, currently, the table does not consume any disk space. This can easily be verified like this:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,7]; title: ; notranslate\" title=\"\">\npostgres=# select pg_relation_filepath(&#039;t&#039;);\n pg_relation_filepath \n----------------------\n base\/5\/16438\n(1 row)\n\npostgres=# \\! ls -l $PGDATA\/base\/5\/16438\n-rw------- 1 postgres postgres 0 Jul 27 15:55 \/u02\/pgdata\/PGDEV\/base\/5\/16438\npostgres=# \n<\/pre><\/div>\n\n\n<p>Both, PostgreSQL and the file system report the same size. What happens if we add one row?<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,3,9]; title: ; notranslate\" title=\"\">\npostgres=# insert into t values (1);\nINSERT 0 1\npostgres=# select pg_relation_size(&#039;t&#039;);\n pg_relation_size \n------------------\n             8192\n(1 row)\n\npostgres=# \\! ls -l $PGDATA\/base\/5\/16438\n-rw------- 1 postgres postgres 8192 Jul 27 15:59 \/u02\/pgdata\/PGDEV\/base\/5\/16438\npostgres=# \n<\/pre><\/div>\n\n\n<p>What we see here is 8k, and this is the block size of the cluster:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1]; title: ; notranslate\" title=\"\">\npostgres=# show block_size;\n block_size \n------------\n 8192\n(1 row)\n<\/pre><\/div>\n\n\n<p>Coming back to question: What is an &#8220;extend&#8221;? When PostgreSQL needs to add additional rows into a relation, and there is no free space left in any of the existing blocks, a new block needs to be added. In the example above there was one &#8220;extend&#8221;, which corresponds to 8k, or one block.<\/p>\n\n\n\n<p>These &#8220;extends&#8221; are now tracked in the new pg_stat_io view. Lets do some simple examples to understand those numbers. First of all we start from scratch and truncate the table we already have:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,3]; title: ; notranslate\" title=\"\">\npostgres=# truncate t;\nTRUNCATE TABLE\npostgres=# \\! ls -l $PGDATA\/base\/5\/16438\n-rw------- 1 postgres postgres 0 Jul 27 16:09 \/u02\/pgdata\/PGDEV\/base\/5\/16438\npostgres=# \n<\/pre><\/div>\n\n\n<p>This brings us back to size zero on disk. The pg_stat_io view comes with these columns:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1]; title: ; notranslate\" title=\"\">\npostgres=# \\d pg_stat_io\n                        View &quot;pg_catalog.pg_stat_io&quot;\n     Column     |           Type           | Collation | Nullable | Default \n----------------+--------------------------+-----------+----------+---------\n backend_type   | text                     |           |          | \n object         | text                     |           |          | \n context        | text                     |           |          | \n reads          | bigint                   |           |          | \n read_time      | double precision         |           |          | \n writes         | bigint                   |           |          | \n write_time     | double precision         |           |          | \n writebacks     | bigint                   |           |          | \n writeback_time | double precision         |           |          | \n extends        | bigint                   |           |          | \n extend_time    | double precision         |           |          | \n op_bytes       | bigint                   |           |          | \n hits           | bigint                   |           |          | \n evictions      | bigint                   |           |          | \n reuses         | bigint                   |           |          | \n fsyncs         | bigint                   |           |          | \n fsync_time     | double precision         |           |          | \n stats_reset    | timestamp with time zone |           |          | \n\npostgres=# \n<\/pre><\/div>\n\n\n<p>As we are only interested in our session (no other client sessions are connected to this instance), and we only want to see the statistics about &#8220;extends&#8221;, and we are only interested in statistics for objects of type &#8220;relation&#8221;, this is the query we can use to see the extends we&#8217;ve triggered:<\/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,extends,op_bytes \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  | extends | op_bytes \n----------------+---------+----------\n client backend |       9 |     8192\n(1 row)\n\n<\/pre><\/div>\n\n\n<p>As we already have some statistics let&#8217;s reset the counters:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,7,8,9,10,11]; title: ; notranslate\" title=\"\">\npostgres=# select pg_stat_reset_shared(&#039;io&#039;);\n pg_stat_reset_shared \n----------------------\n \n(1 row)\n\npostgres=# select backend_type,extends,op_bytes \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  | extends | op_bytes \n----------------+---------+----------\n client backend |       0 |     8192\n(1 row)\n\npostgres=#\n<\/pre><\/div>\n\n\n<p>&#8220;op_bytes&#8221; means the number of bytes per unit of I\/O, which can be either &#8220;read&#8221;, &#8220;write&#8221;, or &#8220;extend&#8221;. This again comes down to the block size of 8k.<\/p>\n\n\n\n<p>What happens once we generate 1000 rows in our tiny table &#8220;t&#8221;?<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,3,4,5,6,7]; title: ; notranslate\" title=\"\">\npostgres=# insert into t select * from generate_series(1,1000);\nINSERT 0 1000\npostgres=# select backend_type,extends,op_bytes \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  | extends | op_bytes \n  backend_type  | extends | op_bytes \n----------------+---------+----------\n client backend |       8 |     8192\n(1 row)\n<\/pre><\/div>\n\n\n<p>This gives us 8 extends. When we do the math (8*8192) this results in 65536 bytes. PostgreSQL should report the same size if we ask for the size of the relation:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1]; title: ; notranslate\" title=\"\">\npostgres=# select pg_relation_size(&#039;t&#039;);\n pg_relation_size \n------------------\n            40960\n(1 row)\n<\/pre><\/div>\n\n\n<p>It does not. The size reported by PostgreSQL is not as large as the product of block size and extends we&#8217;ve calculated above. What does the file system report?<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,7]; title: ; notranslate\" title=\"\">\npostgres=# select pg_relation_filepath(&#039;t&#039;);\n pg_relation_filepath \n----------------------\n base\/5\/16441\n(1 row)\n\npostgres=# \\! ls -l $PGDATA\/base\/5\/16441\n-rw------- 1 postgres postgres 40960 Jul 28 07:11 \/u02\/pgdata\/PGDEV\/base\/5\/16441\npostgres=# \n<\/pre><\/div>\n\n\n<p>This again is consistent with PostgreSQL&#8217;s answer, but we still see a difference to what we&#8217;ve calculated out of the statistics from pg_stat_io. Where does this difference come from? The answer is the free space map:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1]; title: ; notranslate\" title=\"\">\npostgres=# \\! ls -l $PGDATA\/base\/5\/16441*\n-rw------- 1 postgres postgres 40960 Jul 28 07:11 \/u02\/pgdata\/PGDEV\/base\/5\/16441\n-rw------- 1 postgres postgres 24576 Jul 28 07:11 \/u02\/pgdata\/PGDEV\/base\/5\/16441_fsm\n<\/pre><\/div>\n\n\n<p>Summing that up (40960+24576) gives exactly the result we want to see: 65536 bytes. Not only the table&#8217;s files need to be extended, but also the free space map, so the total of extends is the sum of both.<\/p>\n\n\n\n<p>To finalize this post, there is an additional statistic when it comes to extends: &#8220;extend_time&#8221;. This is the time in milliseconds that was spend in extending relation files. By default this will always be zero:<\/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,extends,extend_time,op_bytes \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  | extends | extend_time | op_bytes \n----------------+---------+-------------+----------\n client backend |       8 |           0 |     8192\n(1 row)\n<\/pre><\/div>\n\n\n<p>For getting those statistics you need to enable <a href=\"https:\/\/www.postgresql.org\/docs\/16\/runtime-config-statistics.html#GUC-TRACK-IO-TIMING\" target=\"_blank\" rel=\"noreferrer noopener\">track_io_timing<\/a>. That&#8217;s it for now, in the next post we&#8217;ll look at the &#8220;evictions&#8221; statistic.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>PostgreSQL 16 (currently in beta 2) will come with a new view for tracking I\/O related statistics. I&#8217;ve written a very basic blog about pg_stat_io in the past. In this post and some follow up posts we want to dig a bit deeper into the various statistics this view provides. The first statistic we want [&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,198],"tags":[77],"type_dbi":[],"class_list":["post-27012","post","type-post","status-publish","format-standard","hentry","category-database-administration-monitoring","category-database-management","tag-postgresql"],"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 (1) - extends - 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-1-extends\/\" \/>\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 (1) - extends\" \/>\n<meta property=\"og:description\" content=\"PostgreSQL 16 (currently in beta 2) will come with a new view for tracking I\/O related statistics. I&#8217;ve written a very basic blog about pg_stat_io in the past. In this post and some follow up posts we want to dig a bit deeper into the various statistics this view provides. The first statistic we want [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-1-extends\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-28T08:17:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-28T08:17:22+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=\"3 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-1-extends\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-1-extends\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"PostgreSQL 16: Playing with pg_stat_io (1) &#8211; extends\",\"datePublished\":\"2023-07-28T08:17:19+00:00\",\"dateModified\":\"2023-07-28T08:17:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-1-extends\/\"},\"wordCount\":578,\"commentCount\":0,\"keywords\":[\"PostgreSQL\"],\"articleSection\":[\"Database Administration &amp; Monitoring\",\"Database management\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-1-extends\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-1-extends\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-1-extends\/\",\"name\":\"PostgreSQL 16: Playing with pg_stat_io (1) - extends - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2023-07-28T08:17:19+00:00\",\"dateModified\":\"2023-07-28T08:17:22+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-1-extends\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-1-extends\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-1-extends\/#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 (1) &#8211; extends\"}]},{\"@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 (1) - extends - 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-1-extends\/","og_locale":"en_US","og_type":"article","og_title":"PostgreSQL 16: Playing with pg_stat_io (1) - extends","og_description":"PostgreSQL 16 (currently in beta 2) will come with a new view for tracking I\/O related statistics. I&#8217;ve written a very basic blog about pg_stat_io in the past. In this post and some follow up posts we want to dig a bit deeper into the various statistics this view provides. The first statistic we want [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-1-extends\/","og_site_name":"dbi Blog","article_published_time":"2023-07-28T08:17:19+00:00","article_modified_time":"2023-07-28T08:17:22+00:00","author":"Daniel Westermann","twitter_card":"summary_large_image","twitter_creator":"@westermanndanie","twitter_misc":{"Written by":"Daniel Westermann","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-1-extends\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-1-extends\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"PostgreSQL 16: Playing with pg_stat_io (1) &#8211; extends","datePublished":"2023-07-28T08:17:19+00:00","dateModified":"2023-07-28T08:17:22+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-1-extends\/"},"wordCount":578,"commentCount":0,"keywords":["PostgreSQL"],"articleSection":["Database Administration &amp; Monitoring","Database management"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-1-extends\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-1-extends\/","url":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-1-extends\/","name":"PostgreSQL 16: Playing with pg_stat_io (1) - extends - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2023-07-28T08:17:19+00:00","dateModified":"2023-07-28T08:17:22+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-1-extends\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-1-extends\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-playing-with-pg_stat_io-1-extends\/#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 (1) &#8211; extends"}]},{"@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\/27012","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=27012"}],"version-history":[{"count":16,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/27012\/revisions"}],"predecessor-version":[{"id":27028,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/27012\/revisions\/27028"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=27012"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=27012"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=27012"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=27012"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}