
{"id":2353,"date":"2021-10-11T07:09:15","date_gmt":"2021-10-11T07:09:15","guid":{"rendered":"https:\/\/test.opensource-db.in\/wp1\/?p=2353"},"modified":"2021-10-11T07:11:11","modified_gmt":"2021-10-11T07:11:11","slug":"pg-14-new-features-monitoring-improvements-part5","status":"publish","type":"post","link":"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/","title":{"rendered":"PostgreSQL 14 New Features \u2013 Monitoring improvements"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large is-style-default\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"340\" src=\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4-1024x340.png\" alt=\"\" class=\"wp-image-2360\" srcset=\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4-1024x340.png 1024w, https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4-300x100.png 300w, https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4-768x255.png 768w, https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4-1536x511.png 1536w, https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4-2048x681.png 2048w, https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4-298x99.png 298w, https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4-241x80.png 241w, https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4-394x131.png 394w, https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4-915x304.png 915w, https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4-1240x412.png 1240w, https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4-1920x638.png 1920w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Database Monitoring, Database Availability, Data Observability, Data Lineage, Data Provenance\u2026 Wow! way too many things.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As a Database Engineer, database monitoring is the utmost important aspect for any database shop, it lays the foundation of the whole platform. So, I am gonna stick to that in this post.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Database monitoring is a critical part of any platform&#8217;s maintenance. Finding database issues in time can help the platform in many ways. Without solid monitoring in place, database outages can go unnoticed until it&#8217;s too late. Any monitoring system relies on:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Data collection<\/li><li>Granuality of logging<\/li><li>Ease and detail of progress tracking<\/li><li>Reliability and availability <br>(not gonna discuss about the DBRE here, storing it for another day)<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">PostgreSQL 14 adds several new features to help with monitoring and observability. With this data and metrics, Database engineers are provided with all the information they need to identify and solve any database issues that impact the application performance which enables the team to set up high-performing databases.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I&#8217;d like to shed some light on a few of the interesting Monitoring improvements in PostgreSQL 14 with this post. Like:<\/p>\n\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<ul class=\"wp-block-list\"><li>pg_backend_memory_contexts<\/li><li>Tracking WAL activity using pg_stat_wal<\/li><li>Monitor queries with the built-in Postgres query_id<\/li><li>pg_stat_progress_copy<\/li><li>pg_stat_replication_slots<\/li><li>maintenance_io_concurrency<\/li><li>pg_amcheck<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>pg_backend_memory_contexts<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Displays all the memory contexts of the server process attached to the current session. The view contains one row for each memory context. The useful columns are:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I have always been curious to look at a certain postgres backend connection&#8217;s memory consumption. With this new pg_backend_memory_contexts view we can take a close look at what exactly is allocated for a given postgres backend process. Be it looking at the &#8220;user_bytes&#8221; column for calculating the total memory used or looking at the TOP 10 memory utilizing contenders.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Total Memory by session:<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>postgres=# SELECT pg_size_pretty(sum(used_bytes)) AS \"TotalMem by session\" FROM pg_backend_memory_contexts;\n TotalMem by session \n---------------------\n 1112 kB\n(1 row)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><em>TOP 10 memory using entries:<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:10px\"><code>postgres=# SELECT * FROM pg_backend_memory_contexts ORDER BY used_bytes DESC LIMIT 10;\n          name           | ident |      parent      | level | total_bytes | total_nblocks | free_bytes | free_chunks | used_bytes \n-------------------------+-------+------------------+-------+-------------+---------------+------------+-------------+------------\n CacheMemoryContext      |       | TopMemoryContext |     1 |     1048576 |             8 |     479592 |           0 |     568984\n Timezones               |       | TopMemoryContext |     1 |      104128 |             2 |       2584 |           0 |     101544\n TopMemoryContext        |       |                  |     0 |      127216 |             7 |      32816 |          16 |      94400\n MessageContext          |       | TopMemoryContext |     1 |       65536 |             4 |      17272 |           0 |      48264\n ExecutorState           |       | PortalContext    |     3 |       49216 |             4 |       5712 |           2 |      43504\n WAL record construction |       | TopMemoryContext |     1 |       49776 |             2 |       6344 |           0 |      43432\n TupleSort main          |       | ExecutorState    |     4 |       32832 |             2 |       6792 |           0 |      26040\n Type information cache  |       | TopMemoryContext |     1 |       24384 |             2 |       2584 |           0 |      21800\n smgr relation table     |       | TopMemoryContext |     1 |       32768 |             3 |      16768 |           8 |      16000\n Operator lookup cache   |       | TopMemoryContext |     1 |       24576 |             2 |      10712 |           4 |      13864\n(10 rows)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><em>or a little more granular (but complex to understand) way is to:<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>postgres=# SELECT name,pg_size_pretty(sum(used_bytes)) FROM pg_backend_memory_contexts\npostgres-# GROUP BY name;\n           name           | pg_size_pretty \n--------------------------+----------------\n TableSpace cache         | 6144 bytes\n printtup                 | 264 bytes\n Relcache by OID          | 13 kB\n Record information cache | 6656 bytes\n WAL record construction  | 42 kB\n index info               | 119 kB\n LOCALLOCK hash           | 7680 bytes\n Portal hash              | 7680 bytes\n relation rules           | 7728 bytes\n TopTransactionContext    | 472 bytes\n TopPortalContext         | 544 bytes\n Operator lookup cache    | 14 kB\n TransactionAbortContext  | 264 bytes\n ErrorContext             | 264 bytes\n ExprContext              | 6616 bytes\n TopMemoryContext         | 92 kB\n Timezones                | 99 kB\n MessageContext           | 46 kB\n smgr relation table      | 16 kB\n Operator class cache     | 7680 bytes\n CacheMemoryContext       | 556 kB\n PortalContext            | 448 bytes\n Table function arguments | 320 bytes\n Type information cache   | 21 kB\n HashAgg meta context     | 7696 bytes\n RowDescriptionContext    | 1312 bytes\n MdSmgr                   | 776 bytes\n PrivateRefCount          | 5608 bytes\n ExecutorState            | 42 kB\n(29 rows)\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Tracking WAL activity using pg_stat_wal<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Last year, PostgreSQL 13 version introduced a few Write-ahead log (WAL) monitoring capabilities like:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>WAL statistics in EXPLAIN plan<\/li><li>Postgres log file entries of autovacuum to specifically point the WAL usage<\/li><li>WAL statitics gathered via pg_stat_statements<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In continuation to that, the new PostgreSQL 14 release brings a new server-wide catalog view for WAL information, called <strong>pg_stat_wal<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The view helps to monitor WAL writes over time:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>postgres=# SELECT * FROM pg_stat_wal;\n-&#91; RECORD 1 ]----+------------------------------\nwal_records      | 367627\nwal_fpi          | 27636\nwal_bytes        | 1283718067\nwal_buffers_full | 8162\nwal_write        | 13486\nwal_sync         | 5321\nwal_write_time   | 0\nwal_sync_time    | 0\nstats_reset      | 2021-10-06 10:42:37.246554+00\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In situations like how often processes wait to write WAL because WAL buffer is full, it is important to provide the metrics for tuning the size of WAL buffers. DBAs would now love to tune the WAL buffer size for performance improvement using this Summary view.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With this summary information, you can track how many <strong>Full Page Images<\/strong> (FPI) were written to the WAL, insights into when Postgres generated a lot of WAL records due to a checkpoint. We can use the new wal_buffers_full counter to quickly see when the <strong>wal_buffers<\/strong> configuration parameter setting is set too low, which can cause unnecessary I\/O that can be prevented by raising wal_buffers to a higher value.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I see this as a great compliment for DBAs constantly monitoring <strong>pg_stat_bgwriter<\/strong> view.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As mentioned in our <a rel=\"noreferrer noopener\" href=\"https:\/\/test.opensource-db.in\/wp1\/postgresql-14-new-features-conf-params-introduced-part4\/\" data-type=\"URL\" data-id=\"https:\/\/test.opensource-db.in\/wp1\/postgresql-14-new-features-conf-params-introduced-part4\/\" target=\"_blank\">earlier blog about new PG 14 configuration parameters <\/a>&#8211; the new parameter <strong>track_wal_io_timing<\/strong> enables monitoring of WAL write times.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Monitor queries using pg_stat_activity.query_id<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Most of the Database engineers would look at the <strong>pg_stat_activity<\/strong> catalog view every now and then, a new column query_id is added in the PG 14 release.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The calculation of the <strong>query_id<\/strong>, which uniquely identifies a query. If the same query is executed again it will have the same query_id, which enables us to identify workload patterns on the database. This information was only available with pg_stat_statements, which shows aggregate statistics about queries that have finished executing, but now this is available with pg_stat_activity as well as in log files by configuring the logging parameter <strong>log_line_prefix &#8211; %Q<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The parameter default value is auto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To put things into perspective, let&#8217;s look at the following example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>--session #1 for pgbench initialize command\npgbench -i -s 30\n\n--session #2\n\nmypgbench=# SELECT pid,substring(query,1,30) AS query_part,query_id FROM pg_stat_activity WHERE backend_type = 'client backend';\n pid  |           query_part           |       query_id       \n------+--------------------------------+----------------------\n 1324 | SELECT pid,substring(query,1,3 | -8357952155587440210\n(1 row)\n\nmypgbench=# \\watch 1\n             Mon Oct 11 05:47:54 2021 (every 1s)\n\n pid  |           query_part           |       query_id       \n------+--------------------------------+----------------------\n 1324 | SELECT pid,substring(query,1,3 | -8357952155587440210\n(1 row)\n\n--pgbench writing data\n\n             Mon Oct 11 05:47:55 2021 (every 1s)\n\n pid  |           query_part           |       query_id       \n------+--------------------------------+----------------------\n 1728 | copy pgbench_accounts from std |  3002094969003007272\n 1324 | SELECT pid,substring(query,1,3 | -8357952155587440210\n(2 rows)\n...\n           Mon Oct 11 05:48:01 2021 (every 1s)\n\n pid  |           query_part           |       query_id       \n------+--------------------------------+----------------------\n 1728 | copy pgbench_accounts from std |  3002094969003007272\n 1324 | SELECT pid,substring(query,1,3 | -8357952155587440210\n(2 rows)\n\n--pgbench vacuum process\n\n             Mon Oct 11 05:48:02 2021 (every 1s)\n\n pid  |           query_part           |       query_id       \n------+--------------------------------+----------------------\n 1728 | vacuum analyze pgbench_account | -1697985474390439145\n 1324 | SELECT pid,substring(query,1,3 | -8357952155587440210\n(2 rows)\n...\n             Mon Oct 11 05:48:05 2021 (every 1s)\n\n pid  |           query_part           |       query_id       \n------+--------------------------------+----------------------\n 1728 | vacuum analyze pgbench_account | -1697985474390439145\n 1324 | SELECT pid,substring(query,1,3 | -8357952155587440210\n(2 rows)\n\n--pgbench creating primary keys\n\n             Mon Oct 11 05:48:06 2021 (every 1s)\n\n pid  |           query_part           |       query_id       \n------+--------------------------------+----------------------\n 1728 | alter table pgbench_accounts a | -7684589253409855891\n 1324 | SELECT pid,substring(query,1,3 | -8357952155587440210\n(2 rows)\n\n             Mon Oct 11 05:48:07 2021 (every 1s)\n\n pid  |           query_part           |       query_id       \n------+--------------------------------+----------------------\n 1728 | alter table pgbench_accounts a | -7684589253409855891\n 1324 | SELECT pid,substring(query,1,3 | -8357952155587440210\n(2 rows)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The queries &#8211; COPY; VACUUM; ALTER TABLE is the same from the <strong>pgbench<\/strong> utility perspective, but the exact commands are different, making it hard to find patterns in the workload. With the <strong>query_id<\/strong>, we can clearly identify the number of certain kinds of queries and assess performance problems more easily, by just using a GROUP BY clause.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>pg_stat_progress_copy<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">PostgreSQL has the ability to report the progress of certain commands during command execution. Currently, the only commands which support progress reporting are ANALYZE, CLUSTER, CREATE INDEX, VACUUM, COPY, and BASE_BACKUP. CLUSTER and pg_basebackup progress were added in PG13, and COPY progress is the new addition in PG 14.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">COPY can be long, very long depending on the amount of data to load with users having no idea how the operation is going to last. It can be tracked in the new view that returns one row per backend running a COPY. Several fields are tracked in that:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>pid of the backend running COPY<\/li><li>command: COPY FROM, TO<\/li><li>bytes_processed: amount of data processed<\/li><li>bytes_total: total amount of data from the original file of a COPY FROM<\/li><li>and a few more columns<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s take a look at the following example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>--session #1 for pgbench initialize command\npgbench -i -s 30\n\n-session #2\npostgres=# SELECT * FROM pg_stat_progress_copy ;\n(0 rows)\n\npostgres=# \\watch 1\nMon Oct 11 05:58:43 2021 (every 1s)\n\n-&#91; RECORD 1 ]----+----------\npid              | 1874\ndatid            | 12972\ndatname          | postgres\nrelid            | 24691\ncommand          | COPY FROM\ntype             | PIPE\nbytes_processed  | 4129743\nbytes_total      | 0\ntuples_processed | 353403\ntuples_excluded  | 0\n...\nMon Oct 11 05:58:48 2021 (every 1s)\n\n-&#91; RECORD 1 ]----+----------\npid              | 1874\ndatid            | 12972\ndatname          | postgres\nrelid            | 24691\ncommand          | COPY FROM\ntype             | PIPE\nbytes_processed  | 35648896\nbytes_total      | 0\ntuples_processed | 2689999\ntuples_excluded  | 0<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>maintenance_io_concurrency<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Similar to <strong>effective_io_concurrency<\/strong>, but used for maintenance work that is done on behalf of many client sessions. Useful for configuring concurrent disk I\/O operations that PostgreSQL has at its disposal that can be executed simultaneously during maintenance operations. The default is 10. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <strong>pg_settings.context<\/strong> is set to <strong>user<\/strong> for this parameter. So, testing the value shouldn&#8217;t be a tough job. Starting with 20 should be good. This value can be overridden for tables in a particular tablespace by setting the tablespace parameter. Like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>--create a new tablespace\nCREATE TABLESPACE mytbs2 location '\/&lt;location&gt;' WITH (maintenance_io_concurrency=12);\n\n--or ALTER an existing tablespace\nALTER TABLESPACE mytbs SET (maintenance_io_concurrency=12);<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>pg_stat_replication_slots<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A statistics view showing statistics about logical replication slot usage, specifically about transactions spilled to disk from the ReorderBuffer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One of the PG13 parameters we were very happy with around PostgreSQL Native Logical replication is logical_decoding_work_mem. Now, with the new catalog view pg_stat_replication_slots, it is going to make the DBA life easier to monitor logical replication slot usage. Statistics for a particular logical replication slot can be reset by calling the function <strong>pg_stat_reset_replication_slot(slot_name)<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>postgres=# \\d pg_stat_replication_slots\n               View \"pg_catalog.pg_stat_replication_slots\"\n    Column    |           Type           | Collation | Nullable | Default \n--------------+--------------------------+-----------+----------+---------\n slot_name    | text                     |           |          | \n spill_txns   | bigint                   |           |          | \n spill_count  | bigint                   |           |          | \n spill_bytes  | bigint                   |           |          | \n stream_txns  | bigint                   |           |          | \n stream_count | bigint                   |           |          | \n stream_bytes | bigint                   |           |          | \n total_txns   | bigint                   |           |          | \n total_bytes  | bigint                   |           |          | \n stats_reset  | timestamp with time zone |           |          | <\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>pg_amcheck<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We have used <strong>amcheck<\/strong> contrib module in a few scenarios &#8211; amcheck is implemented as an extension providing functions to verify the logical consistency of BTree indexes. It has been there since PG10.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">pg_amcheck is a new command-line utility, effectively a command-line wrapper for the amcheck contrib module. It can be used to run amcheck on all of your databases, tables, and BTree indexes in a convenient way. DBAs can also use its various options &#8211; <strong>&#8211;heapallindexed; &#8211;rootdescend; &#8211;exclude-toast-pointers<\/strong> to name a few, to select just the targets and kinds of checks you want to perform. The utility can run parallel too, use the <strong>-j<\/strong> option.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Note: To leverage the utility, make sure to <strong>CREATE EXTENSION amcheck<\/strong> before using.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>postgres@pg14:~ $ pg_amcheck -d postgres -v\npg_amcheck: including database \"postgres\"\npg_amcheck: in database \"postgres\": using amcheck version \"1.3\" in schema \"public\"\npg_amcheck: checking heap table \"postgres.public.pgbench_accounts\"\npg_amcheck: checking btree index \"postgres.public.pgbench_accounts_pkey\"\n...\npg_amcheck: checking heap table \"postgres.public.foo_blog_post\"\npg_amcheck: checking heap table \"postgres.public.pgbench_history\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">There are many more super cool monitoring improvements available in PG14. For the complete list, take a look at the release note here.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Stay tuned for the PG 14 New features &#8211; <strong>Security<\/strong> tomorrow.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Database Monitoring, Database Availability, Data Observability, Data Lineage, Data Provenance\u2026 Wow! way too many things. As a Database Engineer, database [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[23],"tags":[32,27,29,24],"class_list":["post-2353","post","type-post","status-publish","format-standard","hentry","category-postgresql-14","tag-monitoring","tag-new-features","tag-performance","tag-postgres14"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PostgreSQL 14 New Features \u2013 Monitoring improvements - OpenSource DB<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PostgreSQL 14 New Features \u2013 Monitoring improvements - OpenSource DB\" \/>\n<meta property=\"og:description\" content=\"Database Monitoring, Database Availability, Data Observability, Data Lineage, Data Provenance\u2026 Wow! way too many things. As a Database Engineer, database [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/\" \/>\n<meta property=\"og:site_name\" content=\"OpenSource DB\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/people\/OpenSource-DB\/100072970755470\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-10-11T07:09:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-10-11T07:11:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4-1024x340.png\" \/>\n<meta name=\"author\" content=\"Hari Kiran\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@opensource_db\" \/>\n<meta name=\"twitter:site\" content=\"@opensource_db\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Hari Kiran\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/\"},\"author\":{\"name\":\"Hari Kiran\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/2d16bf6a94c0502f1c5b69e4a36e9a09\"},\"headline\":\"PostgreSQL 14 New Features \u2013 Monitoring improvements\",\"datePublished\":\"2021-10-11T07:09:15+00:00\",\"dateModified\":\"2021-10-11T07:11:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/\"},\"wordCount\":1242,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#organization\"},\"image\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4-1024x340.png\",\"keywords\":[\"monitoring\",\"new-features\",\"performance\",\"postgres14\"],\"articleSection\":[\"PostgreSQL 14\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/\",\"name\":\"PostgreSQL 14 New Features \u2013 Monitoring improvements - OpenSource DB\",\"isPartOf\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4-1024x340.png\",\"datePublished\":\"2021-10-11T07:09:15+00:00\",\"dateModified\":\"2021-10-11T07:11:11+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/#primaryimage\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4.png\",\"contentUrl\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4.png\",\"width\":3200,\"height\":1064},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/test.opensource-db.in\/wp1\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PostgreSQL 14 New Features \u2013 Monitoring improvements\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#website\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/\",\"name\":\"OpenSource DB\",\"description\":\"Your Trusted OpenSource Databases partner\",\"publisher\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/test.opensource-db.in\/wp1\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#organization\",\"name\":\"OPENSOURCE DB PRIVATE LIMITED\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/osdb-logo-tm-2.png\",\"contentUrl\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/osdb-logo-tm-2.png\",\"width\":368,\"height\":120,\"caption\":\"OPENSOURCE DB PRIVATE LIMITED\"},\"image\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/people\/OpenSource-DB\/100072970755470\/\",\"https:\/\/x.com\/opensource_db\",\"https:\/\/www.youtube.com\/channel\/UCmTI5h\",\"https:\/\/www.linkedin.com\/company\/opensource-db\",\"https:\/\/www.instagram.com\/opensource_db\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/2d16bf6a94c0502f1c5b69e4a36e9a09\",\"name\":\"Hari Kiran\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c9afef742ba871448bf401518655463f5e87b02f9fbd0096e88f857c51896822?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c9afef742ba871448bf401518655463f5e87b02f9fbd0096e88f857c51896822?s=96&d=mm&r=g\",\"caption\":\"Hari Kiran\"},\"description\":\"Hari Kiran has over 15 years of extensive experience in areas of operations and managing multiple database technologies. A proven leader with excellent skills in building relationships, positive team dynamics, and decision-making. Hari also has strong Open Source expertise in Professional Services. He has the experience to help you refine your strategy and drive execution.\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/author\/harikiranopensource-db-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PostgreSQL 14 New Features \u2013 Monitoring improvements - OpenSource DB","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"PostgreSQL 14 New Features \u2013 Monitoring improvements - OpenSource DB","og_description":"Database Monitoring, Database Availability, Data Observability, Data Lineage, Data Provenance\u2026 Wow! way too many things. As a Database Engineer, database [&hellip;]","og_url":"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/","og_site_name":"OpenSource DB","article_publisher":"https:\/\/www.facebook.com\/people\/OpenSource-DB\/100072970755470\/","article_published_time":"2021-10-11T07:09:15+00:00","article_modified_time":"2021-10-11T07:11:11+00:00","og_image":[{"url":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4-1024x340.png","type":"","width":"","height":""}],"author":"Hari Kiran","twitter_card":"summary_large_image","twitter_creator":"@opensource_db","twitter_site":"@opensource_db","twitter_misc":{"Written by":"Hari Kiran","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/#article","isPartOf":{"@id":"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/"},"author":{"name":"Hari Kiran","@id":"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/2d16bf6a94c0502f1c5b69e4a36e9a09"},"headline":"PostgreSQL 14 New Features \u2013 Monitoring improvements","datePublished":"2021-10-11T07:09:15+00:00","dateModified":"2021-10-11T07:11:11+00:00","mainEntityOfPage":{"@id":"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/"},"wordCount":1242,"commentCount":0,"publisher":{"@id":"https:\/\/test.opensource-db.in\/wp1\/#organization"},"image":{"@id":"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/#primaryimage"},"thumbnailUrl":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4-1024x340.png","keywords":["monitoring","new-features","performance","postgres14"],"articleSection":["PostgreSQL 14"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/","url":"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/","name":"PostgreSQL 14 New Features \u2013 Monitoring improvements - OpenSource DB","isPartOf":{"@id":"https:\/\/test.opensource-db.in\/wp1\/#website"},"primaryImageOfPage":{"@id":"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/#primaryimage"},"image":{"@id":"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/#primaryimage"},"thumbnailUrl":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4-1024x340.png","datePublished":"2021-10-11T07:09:15+00:00","dateModified":"2021-10-11T07:11:11+00:00","breadcrumb":{"@id":"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/#primaryimage","url":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4.png","contentUrl":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/ps14-blog-4.png","width":3200,"height":1064},{"@type":"BreadcrumbList","@id":"https:\/\/test.opensource-db.in\/wp1\/pg-14-new-features-monitoring-improvements-part5\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/test.opensource-db.in\/wp1\/"},{"@type":"ListItem","position":2,"name":"PostgreSQL 14 New Features \u2013 Monitoring improvements"}]},{"@type":"WebSite","@id":"https:\/\/test.opensource-db.in\/wp1\/#website","url":"https:\/\/test.opensource-db.in\/wp1\/","name":"OpenSource DB","description":"Your Trusted OpenSource Databases partner","publisher":{"@id":"https:\/\/test.opensource-db.in\/wp1\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/test.opensource-db.in\/wp1\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/test.opensource-db.in\/wp1\/#organization","name":"OPENSOURCE DB PRIVATE LIMITED","url":"https:\/\/test.opensource-db.in\/wp1\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/logo\/image\/","url":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/osdb-logo-tm-2.png","contentUrl":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/osdb-logo-tm-2.png","width":368,"height":120,"caption":"OPENSOURCE DB PRIVATE LIMITED"},"image":{"@id":"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/people\/OpenSource-DB\/100072970755470\/","https:\/\/x.com\/opensource_db","https:\/\/www.youtube.com\/channel\/UCmTI5h","https:\/\/www.linkedin.com\/company\/opensource-db","https:\/\/www.instagram.com\/opensource_db\/"]},{"@type":"Person","@id":"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/2d16bf6a94c0502f1c5b69e4a36e9a09","name":"Hari Kiran","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c9afef742ba871448bf401518655463f5e87b02f9fbd0096e88f857c51896822?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c9afef742ba871448bf401518655463f5e87b02f9fbd0096e88f857c51896822?s=96&d=mm&r=g","caption":"Hari Kiran"},"description":"Hari Kiran has over 15 years of extensive experience in areas of operations and managing multiple database technologies. A proven leader with excellent skills in building relationships, positive team dynamics, and decision-making. Hari also has strong Open Source expertise in Professional Services. He has the experience to help you refine your strategy and drive execution.","url":"https:\/\/test.opensource-db.in\/wp1\/author\/harikiranopensource-db-com\/"}]}},"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"Hari Kiran","author_link":"https:\/\/test.opensource-db.in\/wp1\/author\/harikiranopensource-db-com\/"},"rttpg_comment":70,"rttpg_category":"<a href=\"https:\/\/test.opensource-db.in\/wp1\/category\/postgres\/postgresql-14\/\" rel=\"category tag\">PostgreSQL 14<\/a>","rttpg_excerpt":"Database Monitoring, Database Availability, Data Observability, Data Lineage, Data Provenance\u2026 Wow! way too many things. As a Database Engineer, database [&hellip;]","_links":{"self":[{"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/posts\/2353","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/comments?post=2353"}],"version-history":[{"count":18,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/posts\/2353\/revisions"}],"predecessor-version":[{"id":2372,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/posts\/2353\/revisions\/2372"}],"wp:attachment":[{"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/media?parent=2353"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/categories?post=2353"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/tags?post=2353"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}