From 663ee3ee0d2fb2355660144690b28085c2362952 Mon Sep 17 00:00:00 2001 From: Kyotaro Horiguchi Date: Tue, 14 Feb 2023 15:38:57 +0900 Subject: [PATCH] Support PostgreSQL 15. --- LICENSE | 2 +- Makefile | 2 +- README.md | 2 +- agent/Makefile | 2 +- agent/bin/Makefile | 2 +- agent/bin/archive_pglog.sh | 2 +- agent/bin/autovacuum.c | 235 +++-- agent/bin/checkpoint.c | 2 +- agent/bin/collector.c | 2 +- agent/bin/collector_sql.h | 8 +- agent/bin/collector_wait_sampling.c | 2 +- agent/bin/logger.c | 2 +- agent/bin/logger_common.c | 2 +- agent/bin/logger_in.c | 2 +- agent/bin/logger_out.c | 2 +- agent/bin/logger_send.c | 2 +- agent/bin/maintenance.c | 2 +- agent/bin/pg_control.c | 2 +- agent/bin/pg_statsinfod.c | 4 +- agent/bin/pg_statsinfod.h | 6 +- agent/bin/pg_statsrepo.sql | 285 +++--- agent/bin/pg_statsrepo_alert.sql | 2 +- agent/bin/pgut/pgut-list.c | 2 +- agent/bin/pgut/pgut-list.h | 2 +- agent/bin/pgut/pgut-pthread.c | 2 +- agent/bin/pgut/pgut-pthread.h | 2 +- agent/bin/pgut/pgut.c | 2 +- agent/bin/pgut/pgut.h | 2 +- agent/bin/snapshot.c | 2 +- agent/bin/uninstall_pg_statsrepo.sql | 2 +- agent/bin/writer.c | 2 +- agent/bin/writer_sql.h | 6 +- agent/common.h | 2 +- agent/lib/Makefile | 2 +- agent/lib/last_xact_activity.c | 24 +- agent/lib/libstatsinfo.c | 49 +- agent/lib/libstatsinfo.h | 2 +- agent/lib/pg_control.c | 2 +- agent/lib/pg_statsinfo.sql.in | 2 +- agent/lib/pgut/pgut-be.h | 2 +- agent/lib/pgut/pgut-spi.c | 2 +- agent/lib/pgut/pgut-spi.h | 2 +- agent/lib/port.c | 2 +- agent/lib/rusage.h | 2 +- agent/lib/uninstall_pg_statsinfo.sql | 2 +- agent/lib/wait_sampling.c | 2 +- agent/lib/wait_sampling.h | 2 +- ...=> pg_statsinfo_v15_report_infomation.xls} | Bin 99628 -> 101888 bytes ...g_statsinfo_v15_repository_infomation.xls} | Bin 820276 -> 830464 bytes doc/pg_statsinfo-ja.md | 124 +-- doc/pg_statsinfo.md | 127 +-- reporter/Makefile | 2 +- reporter/control.c | 2 +- reporter/pg_statsinfo.c | 4 +- reporter/pg_statsinfo.h | 2 +- reporter/pgut/pgut-fe.c | 2 +- reporter/pgut/pgut-fe.h | 2 +- reporter/pgut/pgut-list.c | 2 +- reporter/pgut/pgut-list.h | 2 +- reporter/pgut/pgut.c | 2 +- reporter/pgut/pgut.h | 2 +- reporter/report.c | 71 +- reporter/snapshot.c | 2 +- spec/pg_statsinfo.spec | 14 +- test/expected/function-logger.out | 10 +- test/expected/function-report.out | 910 +++++++++--------- test/expected/function-snapshot.out | 13 +- test/script/function-snapshot.sh | 4 +- test/script/inputdata/statsrepo-inputdata.sql | 39 +- 69 files changed, 1129 insertions(+), 902 deletions(-) rename doc/files/{pg_statsinfo_v14_report_infomation.xls => pg_statsinfo_v15_report_infomation.xls} (54%) rename doc/files/{pg_statsinfo_v14_repository_infomation.xls => pg_statsinfo_v15_repository_infomation.xls} (80%) diff --git a/LICENSE b/LICENSE index 296d34d..4e31e67 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION +Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group Portions Copyright (c) 1994, The Regents of the University of California diff --git a/Makefile b/Makefile index e7cd26f..0d84400 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # # pg_statsinfo: Makefile # -# Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION +# Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION # SUBDIRS = agent reporter REGTEST = \ diff --git a/README.md b/README.md index ffe4286..9ffadc2 100644 --- a/README.md +++ b/README.md @@ -8,4 +8,4 @@ PostgreSQL サーバの利用統計情報を定期的に収集・蓄積するこ [English version here](/doc/pg_statsinfo.md) ----- -Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION +Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION diff --git a/agent/Makefile b/agent/Makefile index 087e7ef..680f8ed 100644 --- a/agent/Makefile +++ b/agent/Makefile @@ -1,7 +1,7 @@ # # pg_statsinfo: Makefile # -# Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION +# Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION # SUBDIRS = bin lib diff --git a/agent/bin/Makefile b/agent/bin/Makefile index b4fdf0d..50da97f 100644 --- a/agent/bin/Makefile +++ b/agent/bin/Makefile @@ -1,7 +1,7 @@ # # pg_statsinfo: bin/Makefile # -# Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION +# Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION # SRCS = \ pg_statsinfod.c \ diff --git a/agent/bin/archive_pglog.sh b/agent/bin/archive_pglog.sh index dc6b451..1848aa0 100644 --- a/agent/bin/archive_pglog.sh +++ b/agent/bin/archive_pglog.sh @@ -1,6 +1,6 @@ #!/bin/bash ############################################################################# -# Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION +# Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION ############################################################################# log_directory="${1}" diff --git a/agent/bin/autovacuum.c b/agent/bin/autovacuum.c index acec657..948b464 100644 --- a/agent/bin/autovacuum.c +++ b/agent/bin/autovacuum.c @@ -1,16 +1,16 @@ /* * autovacuum.c : parse auto-vacuum and auto-analyze messages * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "pg_statsinfod.h" #define SQL_INSERT_AUTOVACUUM "\ INSERT INTO statsrepo.autovacuum VALUES \ -($1, $2::timestamptz - interval '1sec' * $21, \ +($1, $2::timestamptz - interval '1sec' * $23, \ $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, \ - $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30, $31, $32)" + $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30, $31, $32, $33, $34, $35, $36, $37, $38)" #define SQL_INSERT_AUTOANALYZE "\ INSERT INTO statsrepo.autoanalyze VALUES \ @@ -28,6 +28,18 @@ INSERT INTO statsrepo.autoanalyze_cancel VALUES \ #define MSG_RUSAGE \ "CPU: user: %f s, system: %f s, elapsed: %f s" +/* tuples_missed (tuples_missed is not localized) */ +#define MSG_TUPLES_MISS \ + "tuples missed: %lld dead from %u pages not removed due to cleanup lock contention\n" + +/* frozen_xid (frozen_xid is not localized) */ +#define MSG_FROZENXID \ + "new relfrozenxid: %u, which is %d XIDs ahead of previous value" + +/* relmin_mxid (relmin_mxid is not localized) */ +#define MSG_MINMXID \ + "new relminmxid: %u, which is %d MXIDs ahead of previous value" + /* index scan (index scan is not localized) */ #define MSG_INDEX_SCAN \ "index scan %s: %u pages from table (%.2f%% of total) %s %lld dead item %s" @@ -53,15 +65,19 @@ INSERT INTO statsrepo.autoanalyze_cancel VALUES \ #define MSG_AUTOVACUUM_CANCEL \ "canceling autovacuum task" -#define NUM_AUTOVACUUM 25 -#define IDX_AUTOVACUUM_RUSAGE 24 -#define IDX_AUTOVACUUM_OPTIONAL 13 +#define NUM_AUTOVACUUM 28 +#define IDX_AUTOVACUUM_TUPLES_MISS 13 +#define IDX_AUTOVACUUM_OPTIONAL 16 +#define IDX_AUTOVACUUM_RUSAGE 27 #define NUM_AUTOANALYZE 12 #define IDX_AUTOANALYZE_RUSAGE 11 #define IDX_AUTOANALYZE_OPTIONAL 3 -#define NUM_INDEXES 5 +#define NUM_TUPLES_MISS 2 +#define NUM_FROZENXID 2 +#define NUM_MINMXID 2 #define NUM_INDEX_SCAN 6 +#define NUM_INDEXES 5 #define NUM_IO_TIMING 2 #define NUM_RUSAGE 3 #define NUM_AUTOVACUUM_CANCEL 5 @@ -122,6 +138,9 @@ parse_autovacuum(const char *message, const char *timestamp) AutovacuumLog *av; List *params; List *usage; + List *tuples_miss = NIL; + List *frozen_xid = NIL; + List *relmin_mxid = NIL; List *index_scan = NIL; List *indexes = NIL; List *io_timing = NIL; @@ -135,43 +154,92 @@ parse_autovacuum(const char *message, const char *timestamp) char *index_names; char *index_pages_total; char *index_pages_new_del; - char *index_pgaes_current_del; + char *index_pages_current_del; char *index_pages_reusable; bool bfirst_index = true; exec = (QueueItemExec) Autovacuum_exec; idx_rusage = IDX_AUTOVACUUM_RUSAGE; + /* Re-parse "tuples missed" in autovacuum messages. */ + str_optional = (char*)list_nth( params, IDX_AUTOVACUUM_TUPLES_MISS ); + if( strlen(str_optional) > 0 ) + { + tuples_miss = capture( str_optional, MSG_TUPLES_MISS, NUM_TUPLES_MISS ); + } + if ( tuples_miss == NIL ) { + /* Empty list with the same number of elements. */ + for( int i=0; ibase.exec = exec; strlcpy(av->finish, timestamp, lengthof(av->finish)); av->params = list_concat(params, usage); + av->params = list_concat(params, tuples_miss); + av->params = list_concat(params, frozen_xid); + av->params = list_concat(params, relmin_mxid); av->params = list_concat(params, index_scan); av->params = list_concat(params, indexes); av->params = list_concat(params, io_timing); @@ -459,51 +535,74 @@ Autovacuum_free(AutovacuumLog *av) static bool Autovacuum_exec(AutovacuumLog *av, PGconn *conn, const char *instid) { - const char *params[32]; + const char *params[38]; + int idx_offset = 0; elog(DEBUG2, "write (autovacuum)"); - Assert(list_length(av->params) == NUM_AUTOVACUUM + NUM_RUSAGE + NUM_INDEX_SCAN + NUM_INDEXES + NUM_IO_TIMING); + Assert(list_length(av->params) == NUM_AUTOVACUUM + NUM_RUSAGE + NUM_TUPLES_MISS + + NUM_FROZENXID + NUM_MINMXID + NUM_INDEX_SCAN + NUM_INDEXES + NUM_IO_TIMING); memset(params, 0, sizeof(params)); - /* - * Note: In PostgreSQL14, the output order of the automatic vacuum log - * has changed and it no longer matches the column order of the - * repository, so the values of the second argument of list_nth() - * are not in order. - */ params[0] = instid; params[1] = av->finish; /* finish */ - params[2] = list_nth(av->params, 1); /* database */ - params[3] = list_nth(av->params, 2); /* schema */ - params[4] = list_nth(av->params, 3); /* table */ - params[5] = list_nth(av->params, 4); /* index_scans */ - params[6] = list_nth(av->params, 5); /* page_removed */ - params[7] = list_nth(av->params, 6); /* page_remain */ - params[8] = list_nth(av->params, 8); /* frozen_skipped_pages */ - params[9] = list_nth(av->params, 9); /* tup_removed */ - params[10] = list_nth(av->params, 10); /* tup_remain */ - params[11] = list_nth(av->params, 11); /* tup_dead */ - params[12] = list_nth(av->params, 18); /* page_hit */ - params[13] = list_nth(av->params, 19); /* page_miss */ - params[14] = list_nth(av->params, 20); /* page_dirty */ - params[15] = list_nth(av->params, 14); /* read_rate */ - params[16] = list_nth(av->params, 16); /* write_rate */ - params[17] = list_nth(av->params, 21); /* wal_records */ - params[18] = list_nth(av->params, 22); /* wal_page_images */ - params[19] = list_nth(av->params, 23); /* wal_bytes */ - params[20] = list_nth(av->params, NUM_AUTOVACUUM + 2); /* duration */ - params[21] = list_nth(av->params, NUM_AUTOVACUUM + NUM_RUSAGE + 0); /* index_scan_ptn */ - params[22] = list_nth(av->params, NUM_AUTOVACUUM + NUM_RUSAGE + 1); /* tbl_scan_pages */ - params[23] = list_nth(av->params, NUM_AUTOVACUUM + NUM_RUSAGE + 2); /* tbl_scan_pages_ratio */ - params[24] = list_nth(av->params, NUM_AUTOVACUUM + NUM_RUSAGE + 4); /* dead_lp */ - params[25] = list_nth(av->params, NUM_AUTOVACUUM + NUM_RUSAGE + NUM_INDEX_SCAN + 0); /* index_names */ - params[26] = list_nth(av->params, NUM_AUTOVACUUM + NUM_RUSAGE + NUM_INDEX_SCAN + 1); /* index_pages_total */ - params[27] = list_nth(av->params, NUM_AUTOVACUUM + NUM_RUSAGE + NUM_INDEX_SCAN + 2); /* index_pages_new_del */ - params[28] = list_nth(av->params, NUM_AUTOVACUUM + NUM_RUSAGE + NUM_INDEX_SCAN + 3); /* index_pgaes_current_del */ - params[29] = list_nth(av->params, NUM_AUTOVACUUM + NUM_RUSAGE + NUM_INDEX_SCAN + 4); /* index_pages_reusable */ - params[30] = list_nth(av->params, NUM_AUTOVACUUM + NUM_RUSAGE + NUM_INDEX_SCAN + NUM_INDEXES + 0); /* io_timings_read */ - params[31] = list_nth(av->params, NUM_AUTOVACUUM + NUM_RUSAGE + NUM_INDEX_SCAN + NUM_INDEXES + 1); /* io_timings_write */ + params[2] = list_nth(av->params, 2); /* database */ + params[3] = list_nth(av->params, 3); /* schema */ + params[4] = list_nth(av->params, 4); /* table */ + params[5] = list_nth(av->params, 5); /* index_scans */ + params[6] = list_nth(av->params, 6); /* page_removed */ + params[7] = list_nth(av->params, 7); /* page_remain */ + params[8] = list_nth(av->params, 8); /* tbl_scan_page */ + params[9] = list_nth(av->params, 9); /* tbl_scan_page_ratio */ + params[10] = list_nth(av->params, 10); /* tup_removed */ + params[11] = list_nth(av->params, 11); /* tup_remain */ + params[12] = list_nth(av->params, 12); /* tup_dead */ + params[13] = list_nth(av->params, 14); /* removable_cutoff */ + params[14] = list_nth(av->params, 17); /* read_rate */ + params[15] = list_nth(av->params, 19); /* write_rate */ + params[16] = list_nth(av->params, 21); /* page_hit */ + params[17] = list_nth(av->params, 22); /* page_miss */ + params[18] = list_nth(av->params, 23); /* page_dirty */ + params[19] = list_nth(av->params, 24); /* wal_records */ + params[20] = list_nth(av->params, 25); /* wal_page_images */ + params[21] = list_nth(av->params, 26); /* wal_bytes */ + + /* Index offset in params : rusage */ + idx_offset = NUM_AUTOVACUUM; + params[22] = list_nth(av->params, idx_offset + 2); /* duration */ + + /* Index offset in params : tuples missed */ + idx_offset = NUM_AUTOVACUUM + NUM_RUSAGE; + params[23] = list_nth(av->params, idx_offset + 0); /* tup_miss_dead */ + params[24] = list_nth(av->params, idx_offset + 1); /* tup_miss_dead_pages */ + + /* Index offset in params : relfrozenxid */ + idx_offset = NUM_AUTOVACUUM + NUM_RUSAGE + NUM_TUPLES_MISS; + params[25] = list_nth(av->params, idx_offset + 0); /* new_relfrozenxid */ + + /* Index offset in params : relminmxid */ + idx_offset = NUM_AUTOVACUUM + NUM_RUSAGE + NUM_TUPLES_MISS + NUM_FROZENXID; + params[26] = list_nth(av->params, idx_offset + 1); /* new_relminmxid */ + + /* Index offset in params : index scan */ + idx_offset = NUM_AUTOVACUUM + NUM_RUSAGE + NUM_TUPLES_MISS + NUM_FROZENXID + NUM_MINMXID; + params[27] = list_nth(av->params, idx_offset + 0); /* index_scan_ptn */ + params[28] = list_nth(av->params, idx_offset + 1); /* dead_lp_pages */ + params[29] = list_nth(av->params, idx_offset + 2); /* dead_lp_pages_ratio */ + params[30] = list_nth(av->params, idx_offset + 4); /* dead_lp */ + + /* Index offset in params : indexes */ + idx_offset = NUM_AUTOVACUUM + NUM_RUSAGE + NUM_TUPLES_MISS + NUM_FROZENXID + NUM_MINMXID + NUM_INDEX_SCAN; + params[31] = list_nth(av->params, idx_offset + 0); /* index_names */ + params[32] = list_nth(av->params, idx_offset + 1); /* index_pages_total */ + params[33] = list_nth(av->params, idx_offset + 2); /* index_pages_new_del */ + params[34] = list_nth(av->params, idx_offset + 3); /* index_pages_current_del */ + params[35] = list_nth(av->params, idx_offset + 4); /* index_pages_reusable */ + + /* Index offset in params : I/O timings */ + idx_offset = NUM_AUTOVACUUM + NUM_RUSAGE + NUM_TUPLES_MISS + NUM_FROZENXID + NUM_MINMXID + NUM_INDEX_SCAN + NUM_INDEXES; + params[36] = list_nth(av->params, idx_offset + 0); /* io_timings_read */ + params[37] = list_nth(av->params, idx_offset + 1); /* io_timings_write */ return pgut_command(conn, SQL_INSERT_AUTOVACUUM, lengthof(params), params) == PGRES_COMMAND_OK; diff --git a/agent/bin/checkpoint.c b/agent/bin/checkpoint.c index 37eae0b..da1bcb9 100644 --- a/agent/bin/checkpoint.c +++ b/agent/bin/checkpoint.c @@ -1,7 +1,7 @@ /* * checkpoint.c * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "pg_statsinfod.h" diff --git a/agent/bin/collector.c b/agent/bin/collector.c index f59b5f7..268e578 100644 --- a/agent/bin/collector.c +++ b/agent/bin/collector.c @@ -1,7 +1,7 @@ /* * collector.c: * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "pg_statsinfod.h" diff --git a/agent/bin/collector_sql.h b/agent/bin/collector_sql.h index a05c756..5d783ea 100644 --- a/agent/bin/collector_sql.h +++ b/agent/bin/collector_sql.h @@ -1,7 +1,7 @@ /* * collector_sql.h * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #ifndef COLLECTOR_SQL_H @@ -102,7 +102,9 @@ SELECT \ s.temp_blks_read, \ s.temp_blks_written, \ s.blk_read_time, \ - s.blk_write_time \ + s.blk_write_time, \ + s.temp_blk_read_time, \ + s.temp_blk_write_time \ FROM \ pg_stat_statements s \ LEFT JOIN pg_roles r ON r.oid = s.userid \ @@ -134,6 +136,8 @@ SELECT \ p.temp_blks_written, \ p.blk_read_time, \ p.blk_write_time, \ + p.temp_blk_read_time, \ + p.temp_blk_write_time, \ p.first_call, \ p.last_call \ FROM \ diff --git a/agent/bin/collector_wait_sampling.c b/agent/bin/collector_wait_sampling.c index f14f595..3c9d1ec 100644 --- a/agent/bin/collector_wait_sampling.c +++ b/agent/bin/collector_wait_sampling.c @@ -1,7 +1,7 @@ /* * collector_wait_sampling.c: * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "pg_statsinfod.h" diff --git a/agent/bin/logger.c b/agent/bin/logger.c index 0c760b0..34f0b88 100644 --- a/agent/bin/logger.c +++ b/agent/bin/logger.c @@ -1,7 +1,7 @@ /* * logger.c * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "pg_statsinfod.h" diff --git a/agent/bin/logger_common.c b/agent/bin/logger_common.c index eb2c4a3..fd1f31e 100644 --- a/agent/bin/logger_common.c +++ b/agent/bin/logger_common.c @@ -1,7 +1,7 @@ /* * logger_common.c * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "pg_statsinfod.h" diff --git a/agent/bin/logger_in.c b/agent/bin/logger_in.c index 1d21abf..a96096d 100644 --- a/agent/bin/logger_in.c +++ b/agent/bin/logger_in.c @@ -1,7 +1,7 @@ /* * logger_in.c : parse csvlog * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "pg_statsinfod.h" diff --git a/agent/bin/logger_out.c b/agent/bin/logger_out.c index 1344cbd..2db48f3 100644 --- a/agent/bin/logger_out.c +++ b/agent/bin/logger_out.c @@ -1,7 +1,7 @@ /* * logger_out.c * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "pg_statsinfod.h" diff --git a/agent/bin/logger_send.c b/agent/bin/logger_send.c index b5404d0..9384560 100644 --- a/agent/bin/logger_send.c +++ b/agent/bin/logger_send.c @@ -1,7 +1,7 @@ /* * logger_send.c * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "pg_statsinfod.h" diff --git a/agent/bin/maintenance.c b/agent/bin/maintenance.c index b1b2987..a6e84e0 100644 --- a/agent/bin/maintenance.c +++ b/agent/bin/maintenance.c @@ -1,7 +1,7 @@ /* * maintenance.c: * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "pg_statsinfod.h" diff --git a/agent/bin/pg_control.c b/agent/bin/pg_control.c index b7b749a..9b274c3 100644 --- a/agent/bin/pg_control.c +++ b/agent/bin/pg_control.c @@ -2,7 +2,7 @@ * * pg_control.c * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION * *------------------------------------------------------------------------- */ diff --git a/agent/bin/pg_statsinfod.c b/agent/bin/pg_statsinfod.c index 5489a0f..15d5268 100644 --- a/agent/bin/pg_statsinfod.c +++ b/agent/bin/pg_statsinfod.c @@ -1,7 +1,7 @@ /* * pg_statsinfod.c * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "pg_statsinfod.h" @@ -9,7 +9,7 @@ #include #include -const char *PROGRAM_VERSION = "14.0"; +const char *PROGRAM_VERSION = "15.0"; const char *PROGRAM_URL = "https://github.com/ossc-db/pg_statsinfo/"; const char *PROGRAM_EMAIL = NULL; diff --git a/agent/bin/pg_statsinfod.h b/agent/bin/pg_statsinfod.h index 46d2c10..3892d73 100644 --- a/agent/bin/pg_statsinfod.h +++ b/agent/bin/pg_statsinfod.h @@ -2,7 +2,7 @@ * * pg_statsinfod.h * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION * *------------------------------------------------------------------------- */ @@ -27,9 +27,9 @@ #define SECS_PER_DAY 86400 /* seconds per day */ #define STATSINFO_CONTROL_FILE "pg_statsinfo.control" -#define STATSINFO_CONTROL_VERSION 140000 +#define STATSINFO_CONTROL_VERSION 150000 -#define STATSREPO_SCHEMA_VERSION 140000 +#define STATSREPO_SCHEMA_VERSION 150000 /* number of columns of csvlog */ #define CSV_COLS 26 diff --git a/agent/bin/pg_statsrepo.sql b/agent/bin/pg_statsrepo.sql index 4bb34c3..abaf56e 100644 --- a/agent/bin/pg_statsrepo.sql +++ b/agent/bin/pg_statsrepo.sql @@ -3,7 +3,7 @@ * * Create a repository schema. * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ -- Adjust this setting to control where the objects get created. @@ -287,6 +287,8 @@ CREATE TABLE statsrepo.statement temp_blks_written bigint, blk_read_time double precision, blk_write_time double precision, + temp_blk_read_time double precision, + temp_blk_write_time double precision, FOREIGN KEY (snapid) REFERENCES statsrepo.snapshot (snapid) ON DELETE CASCADE, FOREIGN KEY (snapid, dbid) REFERENCES statsrepo.database (snapid, dbid) ); @@ -315,6 +317,8 @@ CREATE TABLE statsrepo.plan temp_blks_written bigint, blk_read_time double precision, blk_write_time double precision, + temp_blk_read_time double precision, + temp_blk_write_time double precision, first_call timestamptz, last_call timestamptz, FOREIGN KEY (snapid) REFERENCES statsrepo.snapshot (snapid) ON DELETE CASCADE, @@ -348,27 +352,33 @@ CREATE TABLE statsrepo.autovacuum index_scans integer, page_removed bigint, page_remain bigint, - frozen_skipped_pages bigint, + tbl_scan_pages bigint, + tbl_scan_pages_ratio double precision, tup_removed bigint, tup_remain bigint, tup_dead bigint, + removable_cutoff xid8, + read_rate double precision, + write_rate double precision, page_hit bigint, page_miss bigint, page_dirty bigint, - read_rate double precision, - write_rate double precision, wal_records bigint, wal_page_images bigint, wal_bytes bigint, duration real, + tup_miss_dead bigint, + tup_miss_dead_pages bigint, + new_relfrozenxid xid8, + new_relminmxid xid8, index_scan_ptn integer, - tbl_scan_pages bigint, - tbl_scan_pages_ratio double precision, + dead_lp_pages bigint, + dead_lp_pages_ratio double precision, dead_lp bigint, index_names text[], index_pages_total bigint[], index_pages_new_del bigint[], - index_pgaes_current_del bigint[], + index_pages_current_del bigint[], index_pages_reusable bigint[], io_timings_read double precision, io_timings_write double precision, @@ -840,7 +850,7 @@ LANGUAGE sql; -- get_version() - version of statsrepo schema CREATE FUNCTION statsrepo.get_version() RETURNS text AS -'SELECT CAST(''140000'' AS TEXT)' +'SELECT CAST(''150000'' AS TEXT)' LANGUAGE sql IMMUTABLE; -- tps() - transaction per seconds @@ -2385,25 +2395,32 @@ LANGUAGE sql; -- generate information that corresponds to 'Autovacuum Activity' CREATE FUNCTION statsrepo.get_autovacuum_activity( - IN snapid_begin bigint, - IN snapid_end bigint, - OUT datname text, - OUT nspname text, - OUT relname text, - OUT "count" bigint, - OUT index_scanned bigint, - OUT index_skipped bigint, - OUT avg_tup_removed numeric, - OUT avg_tup_remain numeric, - OUT avg_tup_dead numeric, - OUT scan_pages numeric, - OUT scan_pages_ratio numeric, - OUT removed_lp numeric, - OUT dead_lp numeric, - OUT avg_index_scans numeric, - OUT avg_duration numeric, - OUT max_duration numeric, - OUT cancel bigint + IN snapid_begin bigint, + IN snapid_end bigint, + OUT datname text, + OUT nspname text, + OUT relname text, + OUT "count" bigint, + OUT index_scanned bigint, + OUT index_skipped bigint, + OUT avg_tup_removed numeric, + OUT avg_tup_remain numeric, + OUT avg_tup_dead numeric, + OUT avg_tup_miss_dead numeric, + OUT avg_tup_miss_dead_pages numeric, + OUT tbl_scan_pages numeric, + OUT tbl_scan_pages_ratio numeric, + OUT dead_lp_pages numeric, + OUT dead_lp_pages_ratio numeric, + OUT removed_lp numeric, + OUT dead_lp numeric, + OUT sum_index_scans numeric, + OUT avg_duration numeric, + OUT max_duration numeric, + OUT cancel bigint, + OUT max_cutoff_xid bigint, + OUT max_frozen_xid bigint, + OUT max_relmin_mxid bigint ) RETURNS SETOF record AS $$ WITH @@ -2419,12 +2436,19 @@ $$ v.tup_removed, v.tup_remain, v.tup_dead, + v.tup_miss_dead, + v.tup_miss_dead_pages, v.index_scans, v.duration, v.index_scan_ptn, v.tbl_scan_pages, v.tbl_scan_pages_ratio, - v.dead_lp + v.dead_lp_pages, + v.dead_lp_pages_ratio, + v.dead_lp, + v.removable_cutoff::text::numeric, + v.new_relfrozenxid::text::numeric, + v.new_relminmxid::text::numeric FROM statsrepo.autovacuum v, b, e, i @@ -2458,9 +2482,16 @@ $$ pg_catalog.avg(v.tup_removed) AS avg_tup_removed, pg_catalog.avg(v.tup_remain) AS avg_tup_remain, pg_catalog.avg(v.tup_dead) AS avg_tup_dead, - pg_catalog.avg(v.index_scans) AS avg_index_scans, + pg_catalog.avg(v.tup_miss_dead) AS avg_tup_miss_dead, + pg_catalog.avg(v.tup_miss_dead_pages) AS avg_tup_miss_dead_pages, + pg_catalog.avg(v.tbl_scan_pages) AS tbl_scan_pages, + pg_catalog.avg(v.tbl_scan_pages_ratio) AS tbl_scan_pages_ratio, + pg_catalog.sum(v.index_scans) AS sum_index_scans, pg_catalog.avg(v.duration) AS avg_duration, - pg_catalog.max(v.duration) AS max_duration + pg_catalog.max(v.duration) AS max_duration, + pg_catalog.max(v.removable_cutoff) AS max_cutoff_xid, + pg_catalog.max(v.new_relfrozenxid) AS max_frozen_xid, + pg_catalog.max(v.new_relminmxid) AS max_relmin_mxid FROM vall v GROUP BY @@ -2473,18 +2504,18 @@ $$ v.schema, v.table, pg_catalog.count(*) AS index_scan, - pg_catalog.avg(v.tbl_scan_pages) AS tbl_scan_pages, - pg_catalog.avg(v.tbl_scan_pages_ratio) AS tbl_scan_pages_ratio, - pg_catalog.avg(v.dead_lp) AS remain_lp + pg_catalog.avg(v.dead_lp_pages) AS dead_lp_pages, + pg_catalog.avg(v.dead_lp_pages_ratio) AS dead_lp_pages_ratio, + pg_catalog.avg(v.dead_lp) AS removed_lp FROM vall v WHERE - v.index_scan_ptn in (2) --(TBD) + v.index_scan_ptn in (2) GROUP BY v.database, v.schema, v.table ), vb AS ( - -- Aggregate data that was not index-scanned + -- Aggregate data with index-scan bypassed by failsafes SELECT v.database, v.schema, @@ -2494,7 +2525,7 @@ $$ FROM vall v WHERE - v.index_scan_ptn in (1,3,4) --(TBD) + v.index_scan_ptn in (4) GROUP BY v.database, v.schema, v.table ) @@ -2505,17 +2536,24 @@ $$ COALESCE(tv.count, 0), COALESCE(va.index_scan, 0), COALESCE(vb.index_skip, 0), - pg_catalog.round(COALESCE(tv.avg_tup_removed, 0)::numeric, 3), - pg_catalog.round(COALESCE(tv.avg_tup_remain, 0)::numeric, 3), - pg_catalog.round(COALESCE(tv.avg_tup_dead, 0)::numeric, 3), - pg_catalog.round(COALESCE(va.tbl_scan_pages, 0)::numeric, 3), - pg_catalog.round(COALESCE(va.tbl_scan_pages_ratio, 0)::numeric, 3), - pg_catalog.round(COALESCE(va.remain_lp, 0)::numeric, 3), - pg_catalog.round(COALESCE(vb.dead_lp, 0)::numeric, 3), - pg_catalog.round(COALESCE(tv.avg_index_scans, 0)::numeric, 3), - pg_catalog.round(COALESCE(tv.avg_duration, 0)::numeric, 3), - pg_catalog.round(COALESCE(tv.max_duration, 0)::numeric, 3), - COALESCE(tc.count, 0) + pg_catalog.round(COALESCE(tv.avg_tup_removed, 0)::numeric, 1), + pg_catalog.round(COALESCE(tv.avg_tup_remain, 0)::numeric, 1), + pg_catalog.round(COALESCE(tv.avg_tup_dead, 0)::numeric, 1), + pg_catalog.round(COALESCE(tv.avg_tup_miss_dead, 0)::numeric, 1), + pg_catalog.round(COALESCE(tv.avg_tup_miss_dead_pages, 0)::numeric, 1), + pg_catalog.round(COALESCE(tv.tbl_scan_pages, 0)::numeric, 1), + pg_catalog.round(COALESCE(tv.tbl_scan_pages_ratio, 0)::numeric, 1), + pg_catalog.round(COALESCE(va.dead_lp_pages, 0)::numeric, 1), + pg_catalog.round(COALESCE(va.dead_lp_pages_ratio, 0)::numeric, 1), + pg_catalog.round(COALESCE(va.removed_lp, 0)::numeric, 1), + pg_catalog.round(COALESCE(vb.dead_lp, 0)::numeric, 1), + pg_catalog.round(COALESCE(tv.sum_index_scans, 0)::numeric, 1), + pg_catalog.round(COALESCE(tv.avg_duration, 0)::numeric, 1), + pg_catalog.round(COALESCE(tv.max_duration, 0)::numeric, 1), + COALESCE(tc.count, 0), + tv.max_cutoff_xid, + tv.max_frozen_xid, + tv.max_relmin_mxid FROM tv LEFT JOIN @@ -2691,7 +2729,7 @@ $$ pg_catalog.unnest(v.index_names) AS index, pg_catalog.unnest(v.index_pages_total) AS total, pg_catalog.unnest(v.index_pages_new_del) AS new_del, - pg_catalog.unnest(v.index_pgaes_current_del) AS cur_del, + pg_catalog.unnest(v.index_pages_current_del) AS cur_del, pg_catalog.unnest(v.index_pages_reusable) AS reuse FROM statsrepo.autovacuum v, @@ -2971,64 +3009,21 @@ LANGUAGE sql; -- generate information that corresponds to 'Query Activity (Statements)' CREATE FUNCTION statsrepo.get_query_activity_statements( - IN snapid_begin bigint, - IN snapid_end bigint, - OUT rolname text, - OUT datname name, - OUT query text, - OUT plans bigint, - OUT total_plan_time numeric, - OUT time_per_plan numeric, - OUT calls bigint, - OUT total_exec_time numeric, - OUT time_per_call numeric, - OUT blk_read_time numeric, - OUT blk_write_time numeric, - OUT dbid oid, - OUT userid oid, - OUT queryid bigint, - OUT last bigint -) RETURNS SETOF record AS -$$ -DECLARE - pg_version_num integer; - vmaj integer; - vmin integer; - vrev integer; -BEGIN - -- TODO: needs version info? - SELECT - coalesce(pg_catalog.substring(pg_catalog.split_part(pg_version, '.', 1), '^\d+')::integer, 0), - coalesce(pg_catalog.substring(pg_catalog.split_part(pg_version, '.', 2), '^\d+')::integer, 0), - coalesce(pg_catalog.substring(pg_catalog.split_part(pg_version, '.', 3), '^\d+')::integer, 0) - INTO vmaj, vmin, vrev FROM statsrepo.instance - WHERE instid = (SELECT instid FROM statsrepo.snapshot WHERE snapid = $1); - - IF vmaj >= 10 THEN - pg_version_num := 100 * 100 * vmaj + vmin; - ELSE - pg_version_num := (100 * vmaj + vmin) * 100 + vrev; - END IF; - - RETURN QUERY SELECT * FROM statsrepo.get_query_activity_statemets_body($1, $2); -END; -$$ LANGUAGE plpgsql; - --- internal function for get_query_activity_statements() -CREATE FUNCTION statsrepo.get_query_activity_statemets_body( - IN snapid_begin bigint, - IN snapid_end bigint, - OUT rolname text, - OUT datname name, - OUT query text, - OUT plans bigint, - OUT total_plan_time numeric, - OUT time_per_plan numeric, - OUT calls bigint, - OUT total_exec_time numeric, - OUT time_per_call numeric, - OUT blk_read_time numeric, - OUT blk_write_time numeric, + IN snapid_begin bigint, + IN snapid_end bigint, + OUT rolname text, + OUT datname name, + OUT query text, + OUT plans bigint, + OUT total_plan_time numeric, + OUT time_per_plan numeric, + OUT calls bigint, + OUT total_exec_time numeric, + OUT time_per_call numeric, + OUT blk_read_time numeric, + OUT blk_write_time numeric, + OUT tmp_blk_read_time numeric, + OUT tmp_blk_write_time numeric, OUT dbid oid, OUT userid oid, OUT queryid bigint, @@ -3049,6 +3044,8 @@ $$ WHEN 0 THEN 0 ELSE (t1.total_exec_time / t1.calls)::numeric(1000, 3) END, t1.blk_read_time::numeric(1000, 3), t1.blk_write_time::numeric(1000, 3), + t1.tmp_blk_read_time::numeric(1000, 3), + t1.tmp_blk_write_time::numeric(1000, 3), t1.dbid, t1.userid, t1.queryid, @@ -3067,7 +3064,9 @@ $$ statsrepo.sub(st2.calls, st1.calls) AS calls, statsrepo.sub(st2.total_exec_time, st1.total_exec_time) AS total_exec_time, statsrepo.sub(st2.blk_read_time, st1.blk_read_time) AS blk_read_time, - statsrepo.sub(st2.blk_write_time, st1.blk_write_time) AS blk_write_time + statsrepo.sub(st2.blk_write_time, st1.blk_write_time) AS blk_write_time, + statsrepo.sub(st2.temp_blk_read_time, st1.temp_blk_read_time) AS tmp_blk_read_time, + statsrepo.sub(st2.temp_blk_write_time, st1.temp_blk_write_time) AS tmp_blk_write_time FROM (SELECT s.dbid, @@ -3152,17 +3151,19 @@ LANGUAGE sql; -- generate information that corresponds to 'Query Activity (Plans)' CREATE FUNCTION statsrepo.get_query_activity_plans( - IN snapid_begin bigint, - IN snapid_end bigint, - OUT queryid bigint, - OUT planid bigint, - OUT rolname text, - OUT datname name, - OUT calls bigint, - OUT total_time numeric, - OUT time_per_call numeric, - OUT blk_read_time numeric, - OUT blk_write_time numeric + IN snapid_begin bigint, + IN snapid_end bigint, + OUT queryid bigint, + OUT planid bigint, + OUT rolname text, + OUT datname name, + OUT calls bigint, + OUT total_time numeric, + OUT time_per_call numeric, + OUT blk_read_time numeric, + OUT blk_write_time numeric, + OUT temp_blk_read_time numeric, + OUT temp_blk_write_time numeric ) RETURNS SETOF record AS $$ SELECT @@ -3174,7 +3175,9 @@ $$ t1.total_time::Numeric(1000, 3), (t1.total_time / t1.calls)::numeric(1000, 3), t1.blk_read_time::numeric(1000, 3), - t1.blk_write_time::numeric(1000, 3) + t1.blk_write_time::numeric(1000, 3), + t1.temp_blk_read_time::numeric(1000, 3), + t1.temp_blk_write_time::numeric(1000, 3) FROM (SELECT reg.queryid, @@ -3184,7 +3187,9 @@ $$ statsrepo.sub(pl2.calls, pl1.calls) AS calls, statsrepo.sub(pl2.total_time, pl1.total_time) AS total_time, statsrepo.sub(pl2.blk_read_time, pl1.blk_read_time) AS blk_read_time, - statsrepo.sub(pl2.blk_write_time, pl1.blk_write_time) AS blk_write_time + statsrepo.sub(pl2.blk_write_time, pl1.blk_write_time) AS blk_write_time, + statsrepo.sub(pl2.temp_blk_read_time, pl1.temp_blk_read_time) AS temp_blk_read_time, + statsrepo.sub(pl2.temp_blk_write_time, pl1.temp_blk_write_time) AS temp_blk_write_time FROM (SELECT p.queryid, @@ -3228,23 +3233,25 @@ LANGUAGE sql; -- generate information that corresponds to 'Query Activity (Plans)' for pg_stats_reporter CREATE FUNCTION statsrepo.get_query_activity_plans_report( - IN snapid_begin bigint, - IN snapid_end bigint, - OUT queryid bigint, - OUT planid bigint, - OUT rolname text, - OUT datname name, - OUT calls bigint, - OUT total_time numeric, - OUT time_per_call numeric, - OUT blk_read_time numeric, - OUT blk_write_time numeric, - OUT first_call timestamp, - OUT last_call timestamp, - OUT query text, - OUT snapid bigint, - OUT dbid oid, - OUT userid oid + IN snapid_begin bigint, + IN snapid_end bigint, + OUT queryid bigint, + OUT planid bigint, + OUT rolname text, + OUT datname name, + OUT calls bigint, + OUT total_time numeric, + OUT time_per_call numeric, + OUT blk_read_time numeric, + OUT blk_write_time numeric, + OUT temp_blk_read_time numeric, + OUT temp_blk_write_time numeric, + OUT first_call timestamp, + OUT last_call timestamp, + OUT query text, + OUT snapid bigint, + OUT dbid oid, + OUT userid oid ) RETURNS SETOF record AS $$ SELECT @@ -3257,6 +3264,8 @@ $$ (t1.total_time / t1.calls)::numeric(1000, 3), t1.blk_read_time::numeric(1000, 3), t1.blk_write_time::numeric(1000, 3), + t1.temp_blk_read_time::numeric(1000, 3), + t1.temp_blk_write_time::numeric(1000, 3), t1.first_call::timestamp(0), t1.last_call::timestamp(0), t1.query, @@ -3273,6 +3282,8 @@ $$ statsrepo.sub(pl2.total_time, pl1.total_time) AS total_time, statsrepo.sub(pl2.blk_read_time, pl1.blk_read_time) AS blk_read_time, statsrepo.sub(pl2.blk_write_time, pl1.blk_write_time) AS blk_write_time, + statsrepo.sub(pl2.temp_blk_read_time, pl1.temp_blk_read_time) AS temp_blk_read_time, + statsrepo.sub(pl2.temp_blk_write_time, pl1.temp_blk_write_time) AS temp_blk_write_time, pl2.first_call, pl2.last_call, st.query, diff --git a/agent/bin/pg_statsrepo_alert.sql b/agent/bin/pg_statsrepo_alert.sql index 63b3e35..1947025 100644 --- a/agent/bin/pg_statsrepo_alert.sql +++ b/agent/bin/pg_statsrepo_alert.sql @@ -3,7 +3,7 @@ * * Setup of an alert function. * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ -- Adjust this setting to control where the objects get created. diff --git a/agent/bin/pgut/pgut-list.c b/agent/bin/pgut/pgut-list.c index e1922fe..8b8b9c0 100644 --- a/agent/bin/pgut/pgut-list.c +++ b/agent/bin/pgut/pgut-list.c @@ -2,7 +2,7 @@ * * pgut-list.c : copied from postgres/nodes/list.c * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * diff --git a/agent/bin/pgut/pgut-list.h b/agent/bin/pgut/pgut-list.h index fdc489c..0531a23 100644 --- a/agent/bin/pgut/pgut-list.h +++ b/agent/bin/pgut/pgut-list.h @@ -2,7 +2,7 @@ * * pgut-list.h : copied from postgres/nodes/pg_list.h * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION * *------------------------------------------------------------------------- */ diff --git a/agent/bin/pgut/pgut-pthread.c b/agent/bin/pgut/pgut-pthread.c index efb1aa9..534eca6 100644 --- a/agent/bin/pgut/pgut-pthread.c +++ b/agent/bin/pgut/pgut-pthread.c @@ -2,7 +2,7 @@ * * pgut-pthread.c: Portable pthread implementation and support functions. * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION * *------------------------------------------------------------------------- */ diff --git a/agent/bin/pgut/pgut-pthread.h b/agent/bin/pgut/pgut-pthread.h index 11fad5d..188f4c7 100644 --- a/agent/bin/pgut/pgut-pthread.h +++ b/agent/bin/pgut/pgut-pthread.h @@ -2,7 +2,7 @@ * * pgut-pthread.h * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION * *------------------------------------------------------------------------- */ diff --git a/agent/bin/pgut/pgut.c b/agent/bin/pgut/pgut.c index bb46394..ca682e5 100644 --- a/agent/bin/pgut/pgut.c +++ b/agent/bin/pgut/pgut.c @@ -2,7 +2,7 @@ * * pgut.c * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION * *------------------------------------------------------------------------- */ diff --git a/agent/bin/pgut/pgut.h b/agent/bin/pgut/pgut.h index 2d5724b..cff762e 100644 --- a/agent/bin/pgut/pgut.h +++ b/agent/bin/pgut/pgut.h @@ -2,7 +2,7 @@ * * pgut.h * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION * *------------------------------------------------------------------------- */ diff --git a/agent/bin/snapshot.c b/agent/bin/snapshot.c index a51f3d3..e7f9558 100644 --- a/agent/bin/snapshot.c +++ b/agent/bin/snapshot.c @@ -1,7 +1,7 @@ /* * snapshot.c: * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "pg_statsinfod.h" diff --git a/agent/bin/uninstall_pg_statsrepo.sql b/agent/bin/uninstall_pg_statsrepo.sql index f99787b..1a9b6e5 100644 --- a/agent/bin/uninstall_pg_statsrepo.sql +++ b/agent/bin/uninstall_pg_statsrepo.sql @@ -1,7 +1,7 @@ /* * bin/uninstall_pg_statsrepo.sql * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ DROP SCHEMA IF EXISTS statsrepo CASCADE; diff --git a/agent/bin/writer.c b/agent/bin/writer.c index 9d0ae8f..86a1f91 100644 --- a/agent/bin/writer.c +++ b/agent/bin/writer.c @@ -1,7 +1,7 @@ /* * writer.c: * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "pg_statsinfod.h" diff --git a/agent/bin/writer_sql.h b/agent/bin/writer_sql.h index 2dd4a0d..8f8db46 100644 --- a/agent/bin/writer_sql.h +++ b/agent/bin/writer_sql.h @@ -1,7 +1,7 @@ /* * writer_sql.h * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #ifndef WRITER_SQL_H @@ -33,13 +33,13 @@ INSERT INTO statsrepo.xact VALUES \ #define SQL_INSERT_STATEMENT "\ INSERT INTO statsrepo.statement \ - SELECT (($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22)::statsrepo.statement).* \ + SELECT (($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24)::statsrepo.statement).* \ FROM statsrepo.database d \ WHERE d.snapid = $1 AND d.dbid = $2" #define SQL_INSERT_PLAN "\ INSERT INTO statsrepo.plan \ - SELECT (($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23)::statsrepo.plan).* \ + SELECT (($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25)::statsrepo.plan).* \ FROM statsrepo.database d \ WHERE d.snapid = $1 AND d.dbid = $2" diff --git a/agent/common.h b/agent/common.h index 95fdac4..8d064ba 100644 --- a/agent/common.h +++ b/agent/common.h @@ -2,7 +2,7 @@ * * common.h * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION * *------------------------------------------------------------------------- */ diff --git a/agent/lib/Makefile b/agent/lib/Makefile index 6de030c..d64c91d 100644 --- a/agent/lib/Makefile +++ b/agent/lib/Makefile @@ -1,7 +1,7 @@ # # pg_statsinfo: lib/Makefile # -# Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION +# Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION # SRCS = \ libstatsinfo.c \ diff --git a/agent/lib/last_xact_activity.c b/agent/lib/last_xact_activity.c index 1421cad..5de33a5 100644 --- a/agent/lib/last_xact_activity.c +++ b/agent/lib/last_xact_activity.c @@ -2,7 +2,7 @@ * lib/last_xact_activity.c * Track statement execution in current/last transaction. * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "postgres.h" @@ -219,6 +219,7 @@ static bool free_localdata_on_execend = false; static bool immediate_exit_xact = false; /* Module callbacks */ +void request_last_xact_activity(void); void init_last_xact_activity(void); void fini_last_xact_activity(void); Datum statsinfo_last_xact_activity(PG_FUNCTION_ARGS); @@ -355,12 +356,8 @@ init_last_xact_activity(void) NULL, NULL); - RequestAddinShmemSpace(buffer_size(MaxBackends)); - ru_check_stat_statements(); - RequestAddinShmemSpace(ru_memsize()); - RequestNamedLWLockTranche("pg_statsinfo_rusage", 2); TAKE_HOOK1(shmem_startup); TAKE_HOOK2(planner, myPlanner); @@ -387,6 +384,23 @@ fini_last_xact_activity(void) RESTORE_HOOK(ProcessUtility); } +/* + * request_last_xact_activity() - + * + * Request allocate or attach shared memory + */ +void +request_last_xact_activity(void) +{ + + RequestAddinShmemSpace(buffer_size(MaxBackends)); + + RequestAddinShmemSpace(ru_memsize()); + RequestNamedLWLockTranche("pg_statsinfo_rusage", 2); + + return; +} + /* * shmem_startup() - * diff --git a/agent/lib/libstatsinfo.c b/agent/lib/libstatsinfo.c index 84f17a5..4beec91 100644 --- a/agent/lib/libstatsinfo.c +++ b/agent/lib/libstatsinfo.c @@ -1,7 +1,7 @@ /* * lib/libstatsinfo.c * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "libstatsinfo.h" @@ -95,9 +95,11 @@ /* log_autovacuum_min_duration: vacuum */ #define MSG_AUTOVACUUM \ - "automatic %s of table \"%s.%s.%s\": index scans: %d\n" \ - "pages: %u removed, %u remain, %u skipped due to pins, %u skipped frozen\n" \ - "tuples: %lld removed, %lld remain, %lld are dead but not yet removable, oldest xmin: %u\n" \ + "%s vacuum%s \"%s.%s.%s\": index scans: %d\n" \ + "pages: %u removed, %u remain, %u scanned (%.2f%% of total)\n" \ + "tuples: %lld removed, %lld remain, %lld are dead but not yet removable\n" \ + "%s" \ + "removable cutoff: %u, which was %d XIDs old when operation ended\n" \ "%s" \ "avg read rate: %.3f %s, avg write rate: %.3f %s\n" \ "buffer usage: %lld hits, %lld misses, %lld dirtied\n" \ @@ -350,6 +352,7 @@ extern Datum PGUT_EXPORT statsinfo_meminfo(PG_FUNCTION_ARGS); extern PGUT_EXPORT void _PG_init(void); extern PGUT_EXPORT void _PG_fini(void); +extern PGUT_EXPORT void request_last_xact_activity(void); extern PGUT_EXPORT void init_last_xact_activity(void); extern PGUT_EXPORT void fini_last_xact_activity(void); extern PGUT_EXPORT void init_wait_sampling(void); @@ -496,10 +499,12 @@ static bool check_maintenance_time(char **newval, void **extra, GucSource source static void pg_statsinfo_emit_log_hook(ErrorData *edata); static bool is_log_level_output(int elevel, int log_min_level); static emit_log_hook_type prev_emit_log_hook = NULL; +static void pg_statsinfo_shmem_request_hook(void); static void pg_statsinfo_shmem_startup_hook(void); static void silShmemInit(void); static Size silShmemSize(void); static void lookup_sil_state(void); +static shmem_request_hook_type prev_shmem_request_hook = NULL; static shmem_startup_hook_type prev_shmem_startup_hook = NULL; static Activity activity = { 0, 0, 0, 0, 0, 0 }; @@ -1745,7 +1750,7 @@ _PG_init(void) NULL, NULL); - EmitWarningsOnPlaceholders("pg_statsinfo"); + MarkGUCPrefixReserved("pg_statsinfo"); if (IsUnderPostmaster) return; @@ -1793,21 +1798,18 @@ _PG_init(void) PGC_POSTMASTER, PGC_S_OVERRIDE); #endif /* ADJUST_NON_CRITICAL_SETTINGS */ - /* Install xact_last_activity */ - init_last_xact_activity(); - /* Install wait_sampling */ - init_wait_sampling(); - /* Install emit_log_hook */ TAKE_HOOK(emit_log, pg_statsinfo_emit_log_hook); /* Request additional shared resources */ - RequestAddinShmemSpace(silShmemSize()); - RequestNamedLWLockTranche("pg_statsinfo", 1); + TAKE_HOOK(shmem_request, pg_statsinfo_shmem_request_hook); /* Install shmem_startup_hook */ TAKE_HOOK(shmem_startup, pg_statsinfo_shmem_startup_hook); + /* Install xact_last_activity */ + init_last_xact_activity(); + /* * spawn pg_statsinfo launcher process if the first call */ @@ -1829,6 +1831,8 @@ _PG_fini(void) RESTORE_HOOK(emit_log); /* Uninstall shmem_startup_hook */ RESTORE_HOOK(shmem_startup); + /* Uninstall shmem_request_hook */ + RESTORE_HOOK(shmem_request); } /* @@ -4282,6 +4286,27 @@ is_log_level_output(int elevel, int log_min_level) return false; } +/* + * pg_statsinfo_shmem_request_hook - allocate or attach to shared memory + */ +static void +pg_statsinfo_shmem_request_hook(void) +{ + if (prev_shmem_request_hook) + prev_shmem_request_hook(); + + /* Install wait_sampling */ + init_wait_sampling(); + + /* Install last_xact_activity */ + request_last_xact_activity(); + + RequestAddinShmemSpace(silShmemSize()); + RequestNamedLWLockTranche("pg_statsinfo", 1); + + return; +} + /* * pg_statsinfo_shmem_startup_hook - allocate or attach to shared memory */ diff --git a/agent/lib/libstatsinfo.h b/agent/lib/libstatsinfo.h index f305175..1d8a07e 100644 --- a/agent/lib/libstatsinfo.h +++ b/agent/lib/libstatsinfo.h @@ -1,7 +1,7 @@ /* * lib/libstatsinfo.h * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #ifndef LIBSTATSINFO_H diff --git a/agent/lib/pg_control.c b/agent/lib/pg_control.c index b7b749a..9b274c3 100644 --- a/agent/lib/pg_control.c +++ b/agent/lib/pg_control.c @@ -2,7 +2,7 @@ * * pg_control.c * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION * *------------------------------------------------------------------------- */ diff --git a/agent/lib/pg_statsinfo.sql.in b/agent/lib/pg_statsinfo.sql.in index e302850..829e6b4 100644 --- a/agent/lib/pg_statsinfo.sql.in +++ b/agent/lib/pg_statsinfo.sql.in @@ -1,7 +1,7 @@ /* * lib/pg_statsinfo.sql.in * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ -- Adjust this setting to control where the objects get created. diff --git a/agent/lib/pgut/pgut-be.h b/agent/lib/pgut/pgut-be.h index 51c1c6e..940ca1c 100644 --- a/agent/lib/pgut/pgut-be.h +++ b/agent/lib/pgut/pgut-be.h @@ -2,7 +2,7 @@ * * pgut-be.h * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION * *------------------------------------------------------------------------- */ diff --git a/agent/lib/pgut/pgut-spi.c b/agent/lib/pgut/pgut-spi.c index 285f7ee..754bc67 100644 --- a/agent/lib/pgut/pgut-spi.c +++ b/agent/lib/pgut/pgut-spi.c @@ -2,7 +2,7 @@ * * pgut-spi.c * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION * *------------------------------------------------------------------------- */ diff --git a/agent/lib/pgut/pgut-spi.h b/agent/lib/pgut/pgut-spi.h index 1e99ddd..7649ff4 100644 --- a/agent/lib/pgut/pgut-spi.h +++ b/agent/lib/pgut/pgut-spi.h @@ -2,7 +2,7 @@ * * pgut-spi.h * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION * *------------------------------------------------------------------------- */ diff --git a/agent/lib/port.c b/agent/lib/port.c index c4561d1..05ff13b 100644 --- a/agent/lib/port.c +++ b/agent/lib/port.c @@ -1,7 +1,7 @@ /* * lib/port.c * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "libstatsinfo.h" diff --git a/agent/lib/rusage.h b/agent/lib/rusage.h index 15dfdaf..80c818d 100644 --- a/agent/lib/rusage.h +++ b/agent/lib/rusage.h @@ -1,7 +1,7 @@ /* * lib/rusage.h * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ diff --git a/agent/lib/uninstall_pg_statsinfo.sql b/agent/lib/uninstall_pg_statsinfo.sql index 4edf9bc..ab9c5ef 100644 --- a/agent/lib/uninstall_pg_statsinfo.sql +++ b/agent/lib/uninstall_pg_statsinfo.sql @@ -1,7 +1,7 @@ /* * lib/uninstall_pg_statsinfo.sql * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ DROP SCHEMA IF EXISTS statsinfo CASCADE; diff --git a/agent/lib/wait_sampling.c b/agent/lib/wait_sampling.c index daa0c84..bab8050 100644 --- a/agent/lib/wait_sampling.c +++ b/agent/lib/wait_sampling.c @@ -2,7 +2,7 @@ * lib/wait_sampling.c * Collect statistics of wait sample. * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "postgres.h" diff --git a/agent/lib/wait_sampling.h b/agent/lib/wait_sampling.h index da8f1ec..d5cd207 100644 --- a/agent/lib/wait_sampling.h +++ b/agent/lib/wait_sampling.h @@ -1,7 +1,7 @@ /* * lib/wait_sampling.h * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ /* diff --git a/doc/files/pg_statsinfo_v14_report_infomation.xls b/doc/files/pg_statsinfo_v15_report_infomation.xls similarity index 54% rename from doc/files/pg_statsinfo_v14_report_infomation.xls rename to doc/files/pg_statsinfo_v15_report_infomation.xls index d92bf19e4e4fc19c02a3e3f0dca39c53d0f4052f..cff86567c92e330b311c3296ac033f4dc9023d6f 100644 GIT binary patch delta 26704 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 delta 25088 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 diff --git a/doc/files/pg_statsinfo_v14_repository_infomation.xls b/doc/files/pg_statsinfo_v15_repository_infomation.xls similarity index 80% rename from doc/files/pg_statsinfo_v14_repository_infomation.xls rename to doc/files/pg_statsinfo_v15_repository_infomation.xls index 8e66038901c92dda82338259a7a849015f441307..7fb98f299974d0c785e444c2b8f235ba98c51d5f 100644 GIT binary patch delta 88694 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 delta 85096 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 -# pg_statsinfo 14 +# pg_statsinfo 15 ## pg_statsinfoとは @@ -43,7 +43,7 @@ PostgreSQL サーバの利用統計情報を定期的に収集・蓄積するこ 性能劣化などの兆候や問題発生時の原因の把握等)に役立つツールです。 起動や終了、パラメータの設定は PostgreSQL と密に連携しており、手間をかけずに導入可能です。 -pg_statsinfo 14 の変更点は[こちら](#pg_statsinfo13からの変更点)をご覧ください。 +pg_statsinfo 15 の変更点は[こちら](#pg_statsinfo14からの変更点)をご覧ください。 pg_statsinfo 14 以降は GitHub にて公開しています。pg_statsinfo 13 以前の情報については、[SourceForge](http://pgstatsinfo.sourceforge.net/index_ja.html)をご覧ください。 @@ -94,7 +94,7 @@ pg_statsinfo のシステム構成例と動作概要のイメージ図を以下 スナップショットとして以下の統計情報を収集します。 - - [統計情報コレクタ](https://www.postgresql.jp/document/14/html/monitoring-stats.html)が収集する全ての情報。挿入 + - [統計情報コレクタ](https://www.postgresql.jp/document/15/html/monitoring-stats.html)が収集する全ての情報。挿入 / 更新 / 削除行数やバッファアクセス回数。 - テーブルスペース、WAL領域、アーカイブログ領域のディスク使用量。 - ロングトランザクション化しているクエリ。 @@ -117,8 +117,8 @@ pg_statsinfo のシステム構成例と動作概要のイメージ図を以下 #### リポジトリDBのテーブル構成 -リポジトリDBのテーブル構成に関しては、「[pg_statsinfo v14 -リポジトリDB構成](https://github.com/ossc-db/pg_statsinfo/blob/14.0/doc/files/pg_statsinfo_v14_report_infomation.xls)」を参照してください。 +リポジトリDBのテーブル構成に関しては、「[pg_statsinfo v15 +リポジトリDB構成](https://github.com/ossc-db/pg_statsinfo/blob/15.0/doc/files/pg_statsinfo_v15_report_infomation.xls)」を参照してください。 ### サーバログ分配機能 @@ -165,8 +165,8 @@ PostgreSQL が出力するサーバログを収集し、リポジトリDBに蓄 (*1) テーブルの相関係数は、クラスタ化テーブル(クラスタインデックスが存在するテーブル)を対象に判定が行われます。 -各アラート項目のアラートメッセージの内容については「[pg_statsinfo v14 -レポート項目一覧](https://github.com/ossc-db/pg_statsinfo/blob/14.0/doc/files/pg_statsinfo_v14_report_infomation.xls)」をご覧ください。 +各アラート項目のアラートメッセージの内容については「[pg_statsinfo v15 +レポート項目一覧](https://github.com/ossc-db/pg_statsinfo/blob/15.0/doc/files/pg_statsinfo_v15_report_infomation.xls)」をご覧ください。 アラート機能の設定方法は[こちら](#アラート機能の設定方法)をご覧ください。 @@ -184,8 +184,8 @@ PostgreSQL が出力するサーバログを収集し、リポジトリDBに蓄 - スナップショットの合計サイズの表示 -簡易レポート機能が出力するレポートの項目については「[pg_statsinfo v14 -レポート項目一覧](https://github.com/ossc-db/pg_statsinfo/blob/14.0/doc/files/pg_statsinfo_v14_report_infomation.xls)」をご覧ください。 +簡易レポート機能が出力するレポートの項目については「[pg_statsinfo v15 +レポート項目一覧](https://github.com/ossc-db/pg_statsinfo/blob/15.0/doc/files/pg_statsinfo_v15_report_infomation.xls)」をご覧ください。 なお、簡易レポート機能が出力するレポートの項目は [pg_stats_reporter](https://github.com/ossc-db/pg_stats_reporter) と同等です。 @@ -229,10 +229,10 @@ pg_statsinfo ### 動作環境 - PostgreSQL - バージョン 14 + バージョン 15 - 動作検証済みOS RHEL 7.x (x86_64), CentOS 7.x (x86_64) - RHEL 8.x (x86_64), CentOS 8.x (x86_64) + RHEL 8.x (x86_64), Rocky Linux 8.x (x86_64) ### インストール手順 @@ -240,17 +240,17 @@ pg_statsinfo ##### RHEL 7 -以下はPostgreSQL14のRHEL7のx86\64用のrpmをインストールする例です。 +以下はPostgreSQL15のRHEL7のx86\64用のrpmをインストールする例です。 $ su - # yum install pg_statsinfo-14.0-1.pg14.rhel7.x86_64.rpm + # yum install pg_statsinfo-15.0-1.pg15.rhel7.x86_64.rpm ##### RHEL 8 -以下はPostgreSQL14のRHEL8のx86_64用のrpmをインストールする例です。 +以下はPostgreSQL15のRHEL8のx86_64用のrpmをインストールする例です。 $ su - # dnf install pg_statsinfo-14.0-1.pg14.rhel8.x86_64.rpm + # dnf install pg_statsinfo-15.0-1.pg15.rhel8.x86_64.rpm #### source @@ -259,8 +259,8 @@ pg_statsinfo 監視対象インスタンス、リポジトリDB共に、初回起動時に必要に応じて エージェントがスキーマを自動的にインストールします。 - $ tar xzvf pg_statsinfo-14.0.tar.gz - $ cd pg_statsinfo-14.0 + $ tar xzvf pg_statsinfo-15.0.tar.gz + $ cd pg_statsinfo-15.0 $ make USE_PGXS=1 $ su # make USE_PGXS=1 install @@ -317,7 +317,7 @@ pg_statsinfo は以下の設定を強制的に上書きすることに注意し PostgreSQL 起動ユーザでの localhost からのアクセスではパスワードの入力が不要になるよう設定します。 この際の認証には ident 方式を推奨します。 一般的によく利用される「OSユーザ名 = DB管理者名 = -postgres」の場合には、[pg_hba.conf](https://www.postgresql.jp/document/14/html/auth-pg-hba-conf.html) +postgres」の場合には、[pg_hba.conf](https://www.postgresql.jp/document/15/html/auth-pg-hba-conf.html) に以下を追加します。 他の認証方式よりも優先するため、ファイルの最初のほうに書く必要があることに注意してください。 UNIX 環境では TYPE=local の ident 認証を使うのが手軽です。 @@ -328,7 +328,7 @@ TYPE=local の ident #### クエリの統計情報の取得設定 監視対象インスタンスの postgres データベースに -[pg_stat_statements](https://www.postgresql.jp/document/14/html/pgstatstatements.html) +[pg_stat_statements](https://www.postgresql.jp/document/15/html/pgstatstatements.html) をインストールすることで、クエリの統計情報もスナップショットとして収集できるようになります。 利用する場合には、postgresql.conf の shared_preload_libraries に pg_stat_statements を追加し、初回起動時に以下の手順で登録してください。 @@ -442,7 +442,7 @@ pg_statsinfo には PostgreSQL のサーバログをフィルタリングによ - CSVログ (*.csv) (例: postgresql-2013-10-01_000000.csv) CSVログとは、PostgreSQL - が出力する生のログとなります。(CSVログの詳細は[こちら](https://www.postgresql.jp/document/14/html/runtime-config-logging.html#RUNTIME-CONFIG-LOGGING-CSVLOG)をご覧ください) + が出力する生のログとなります。(CSVログの詳細は[こちら](https://www.postgresql.jp/document/15/html/runtime-config-logging.html#RUNTIME-CONFIG-LOGGING-CSVLOG)をご覧ください) pg_statsinfo は本ログの情報を元に加工したログの出力を行いますが、本ログに関しては全く加工を行いません。 - テキストログ (pg_statsinfo.log) テキストログとは、PostgreSQL が出力したログ(CSVログ)の情報を元に pg_statsinfo @@ -453,6 +453,7 @@ pg_statsinfo には PostgreSQL のサーバログをフィルタリングによ - テキストログのファイル名を設定することができます。 - 特定のユーザのログを除外した内容で出力することができます。 - 特定のSQLSTATEを持つログのメッセージレベルを変更した内容で出力することができます。 + テキストログの書式、ファイル名およびファイルアクセス権限は、設定ファイルの下記のパラメータで指定します。(詳細は[こちら](#設定ファイル)をご覧ください) - pg_statsinfo.textlog_line_prefix - pg_statsinfo.textlog_permission @@ -490,15 +491,19 @@ pg_statsinfo には PostgreSQL のサーバログをフィルタリングによ 特定のメッセージレベルは、設定ファイル(postgresql.conf)の下記のパラメータで指定します。 設定の詳細については、[設定ファイル](#設定ファイル)をご覧ください。 - pg_statsinfo.textlog_min_messages + 設定例: warning 以上のメッセージレベルのログをテキストログに出力する + pg_statsinfo.textlog_min_messages = warning - 特定ユーザのセッションのログの出力制御 特定ユーザのセッションのログをテキストログに出力しないようにフィルタリングします。 特定ユーザは、設定ファイル(postgresql.conf)の下記のパラメータで指定します。 設定の詳細については、[設定ファイル](#設定ファイル)をご覧ください。 - pg_statsinfo.textlog_nologging_users + 設定例: postgres ユーザのセッションのログをテキストログに出力しない + pg_statsinfo.textlog_nologging_users = 'postgres' - メッセージレベルの変更 特定のSQLSTATEを持つログのメッセージレベルを任意のメッセージレベルに変更します。 @@ -511,12 +516,14 @@ pg_statsinfo には PostgreSQL のサーバログをフィルタリングによ - pg_statsinfo.adjust_log_error - pg_statsinfo.adjust_log_log - pg_statsinfo.adjust_log_fatal + 設定例: SQLSTATEが '42P01' のログのメッセージレベルを 'INFO' に変更する + pg_statsinfo.adjust_log_level = on pg_statsinfo.adjust_log_info = '42P01' - -(注1) メッセージレベルの変更は、サーバログ分配とサーバログ蓄積で共通です。 -(注2) メッセージレベルの変更をサーバログ分配とサーバログ蓄積で個別に設定することはできません。 + + (注1) メッセージレベルの変更は、サーバログ分配とサーバログ蓄積で共通です。 + (注2) メッセージレベルの変更をサーバログ分配とサーバログ蓄積で個別に設定することはできません。 #### 自動メンテナンス機能によるログファイル整理 @@ -537,18 +544,27 @@ pg_statsinfo には PostgreSQL のサーバログをフィルタリングによ 制限するメッセージレベルは、設定ファイル(postgresql.conf)の下記のパラメータで指定します。 設定の詳細については、[設定ファイル](#設定ファイル)をご覧ください。 - pg_statsinfo.repolog_min_messages + 設定例: warning 以上のメッセージレベルのログを蓄積する + pg_statsinfo.repolog_min_messages = warning + なお、当該パラメータに "disable" を指定することでサーバログの蓄積を無効化することができます。 + 設定例: サーバログの蓄積を無効化する + pg_statsinfo.repolog_min_messages = disable + - 特定ユーザのログの蓄積制限 特定ユーザのセッションのログを蓄積しないように制限します。 特定ユーザは、設定ファイル(postgresql.conf)の下記のパラメータで指定します。 設定の詳細については、[設定ファイル](#設定ファイル)をご覧ください。 - pg_statsinfo.repolog_nologging_users + 設定例: postgres ユーザのセッションのログを蓄積しない + pg_statsinfo.repolog_nologging_users = 'postgres' + - メッセージレベルの変更 特定のSQLSTATEを持つログのメッセージレベルを任意のメッセージレベルに変更します。 メッセージレベルの変更は、サーバログ分配とサーバログ蓄積で共通です。 @@ -636,8 +652,8 @@ enable_alert カラムで行います。デフォルト値はpg_statsinfo.enable - -r, --report=REPORTID レポート種別IDを指定します。 レポート種別IDに指定できる値は以下のとおりです。 - レポート種別IDとレポートの内容についての対応は「[pg_statsinfo v14 - レポート項目一覧](https://github.com/ossc-db/pg_statsinfo/blob/14.0/doc/files/pg_statsinfo_v14_report_infomation.xls)」をご覧ください。 + レポート種別IDとレポートの内容についての対応は「[pg_statsinfo v15 + レポート項目一覧](https://github.com/ossc-db/pg_statsinfo/blob/15.0/doc/files/pg_statsinfo_v15_report_infomation.xls)」をご覧ください。 - Summary - Alert - DatabaseStatistics @@ -655,6 +671,7 @@ enable_alert カラムで行います。デフォルト値はpg_statsinfo.enable - SchemaInformation - Profiles - All + レポート種別IDは、頭文字からの最短一致での指定を許容し、大文字と小文字を区別しません。 - \-i, --instid=INSTANCEID レポート対象とする監視対象インスタンスの識別子を指定します。 @@ -988,26 +1005,26 @@ pg_statsinfo を利用するために確認が推奨されるパラメータは - ##### 1_設定ファイル_メッセージレベル 以下の値が指定でき、そのレベルと、それより上位のレベルのメッセージが記録されます。 全く記録しない場合には disable を指定します。 独自に disable, alert レベルが追加されていることと、debug - を区別しないことを除き、[log_min_messages](https://www.postgresql.jp/document/14/html/runtime-config-logging.html#RUNTIME-CONFIG-LOGGING-WHEN) + を区別しないことを除き、[log_min_messages](https://www.postgresql.jp/document/15/html/runtime-config-logging.html#RUNTIME-CONFIG-LOGGING-WHEN) と同じ優先順位です。 disable \> alert \> panic \> fatal \> log \> error \> warning \> notice \> info \> debug - ##### 2_設定ファイル_書式指定 設定パラメータ - [log_line_prefix](https://www.postgresql.jp/document/14/html/runtime-config-logging.html#GUC-LOG-LINE-PREFIX) + [log_line_prefix](https://www.postgresql.jp/document/15/html/runtime-config-logging.html#GUC-LOG-LINE-PREFIX) と同じ形式で指定します。 log_line_prefix の値そのものは無視されることに注意して下さい。 - ##### 3_設定ファイル_時間指定 単位として d(日)、h(時)、min(分)、s(秒) を指定できます。指定無しの場合は秒単位とみなします。 - ##### 4_設定ファイル_接続文字列 例えば 'host=127.0.0.1 port=5432 dbname=mydb user=postgres' といったlibpq形式の接続情報文字列です。 - 詳細は[データベース接続制御関数](https://www.postgresql.jp/document/14/html/libpq-connect.html)のPQconnectdbを参照して下さい。 + 詳細は[データベース接続制御関数](https://www.postgresql.jp/document/15/html/libpq-connect.html)のPQconnectdbを参照して下さい。 この他、libpq - が使用する環境変数の影響を受けますので、「[環境変数](https://www.postgresql.jp/document/14/html/libpq-envars.html)」も参照して下さい。 + が使用する環境変数の影響を受けますので、「[環境変数](https://www.postgresql.jp/document/15/html/libpq-envars.html)」も参照して下さい。 パスワードの入力待ちにならないようにする必要があります。 パスワード認証が必要な場合には、PostgreSQL インスタンス起動ユーザに - [.pgpass](https://www.postgresql.jp/document/14/html/libpq-pgpass.html) + [.pgpass](https://www.postgresql.jp/document/15/html/libpq-pgpass.html) を設定し、パスワードの入力を自動化してください。 この際には、host を指定しない場合は hostaddr - がホスト名として参照されます。詳細は「[パラメータキーワード](https://www.postgresql.jp/document/14/html/libpq-connect.html#LIBPQ-PARAMKEYWORDS)」を参照してください。 + がホスト名として参照されます。詳細は「[パラメータキーワード](https://www.postgresql.jp/document/15/html/libpq-connect.html#LIBPQ-PARAMKEYWORDS)」を参照してください。 - ##### 5_設定ファイル_SQLSTATE指定 SQLSTATE はSQL標準で規定される5文字の記号で、"42P01" のような形式の文字列です。複数のSQLSTATEを指定したい場合には、カンマ区切りで指定します。 @@ -1158,7 +1175,7 @@ pg_statsinfo を使用する際には、以下の使用上の注意と制約が CST は3つの時間帯に関連付けられておりデフォルトではUS/Central(CST-6) となっているため、この関連付けの設定を変更せずに運用するとlog_timezone を - 中国(PRC=CST+8)に設定したサーバーからのログの時刻がリポジトリDBでは14時間進んで解釈されることになります。リポジトリDBで以下のように入力と異なる時刻が表示された場合には設定が必要です。設定方法は[こちら](https://www.postgresql.jp/document/14/html/datetime-config-files.html)を参照してください。 + 中国(PRC=CST+8)に設定したサーバーからのログの時刻がリポジトリDBでは14時間進んで解釈されることになります。リポジトリDBで以下のように入力と異なる時刻が表示された場合には設定が必要です。設定方法は[こちら](https://www.postgresql.jp/document/15/html/datetime-config-files.html)を参照してください。 repository=$ SET TIME ZONE 'PRC'; select '2014/1/1 0:0:0 CST'::timestamptz; timestamptz @@ -1266,7 +1283,7 @@ pg_statsinfo の統計情報の取得機能は、その時点の統計情報を レポート対象となる情報がスナップショットに存在しない可能性があります。 - Schema Information 一部のデータベースのスキーマ情報が含まれてない場合は、該当のデータベースに接続できる設定になっているか - [クライアント認証](https://www.postgresql.jp/document/14/html/client-authentication.html) + [クライアント認証](https://www.postgresql.jp/document/15/html/client-authentication.html) などを確認してください。また一部の情報(TablesのColumnやIndexes)が取得されていない場合、pg_statsinfo.collect_column、pg_statsinfo.collect_indexが無効にされていないかを確認してください。 #### Q8. pg_store_plans をインストールしているのにレポートでプランの統計情報が出てきません。 @@ -1295,23 +1312,18 @@ pg_statsinfo -## pg_statsinfo13からの変更点 +## pg_statsinfo14からの変更点 -pg_statsinfo 13 からの変更点は以下の通りです。 +pg_statsinfo 14 からの変更点は以下の通りです。 - - PostgreSQL 14に対応 (pg_statsinfo 14は PostgreSQL 14のみをサポートします) - - デフォルトでアラート機能を無効にしました。pg_statsinfo.enable_alertオプションはデフォルトでoffになりました。アラート機能を使う場合、このオプションを明示的にonまたはtrueへ変更してください。 - - 待機イベント情報取得用の専用コレクタースレッドが稼働するようになりました。このスレッドは監視対象のインスタンスのpostgresデータベースで常時サンプリングを実施しています。またこのコレクターの制御用に新規パラメータが追加されました。 - - クエリ単位のOSリソース情報を取得できるようになりました。pg_stat_statementsと同様にHook機能を使い、クエリ処理中のCPU時間や実IOの情報を収集します。また収集対象の制御用に新規パラメータが追加されました。 - - パラメータで列情報、インデックス情報の収集を無効化できるようになりました。これらの情報があまり有用でないケースで、スナップショットサイズを削減したい場合に利用できます。 + - PostgreSQL 15に対応 (pg_statsinfo 15は PostgreSQL 15のみをサポートします) - 収集する性能情報が増えました。 - - pg_stat_walの情報を収集します。WALの読み書き量や時間などをレポートします。 - - トランザクションIDの消費数を収集します。単位時間あたりのトランザクションID消費数をレポートします。 - - autovacuumのログ情報から、WALの生成量に関する情報やIndex部分のVACUUM詳細情報を収集します。VACUUM時に書き込まれたWALの量やインデックスのVACUUM時にスキャンしたページ数や削除・回収したページ数をレポートします。 - - pg_stat_replication_slotsの情報を収集します。ロジカルレプリケーションを利用している場合に伝搬されたデータ量やwal_senderが一時的に消費したディスクIO量をレポートします。 - - CPUとメモリの情報を収集します。OSから見えるCPU数やクロック数、メモリサイズをレポートします。 - - 待機イベント情報を収集します。インスタンス毎、DB毎、クエリ毎の3つで支配要因となっている待機イベントをレポートします。 - - クエリが消費したOSリソース情報を収集します。DB毎、クエリ毎に実IO(read, write)やCPU時間(user, sys)をレポートします。 + - autovacuumのログ情報から、クリーンアップロックの競合の詳細情報を収集します。VACUUM時にクリーンアップロックの競合で回収されなかった行数とページ数をレポートします。 + - autovacuumのログ情報から、スキャンしたインデックスの詳細情報を収集します。VACUUM時にスキャンしたページ数と割合の平均値をレポートします。 + - autovacuumのログ情報から、VACUUMに関与するトランザクションIDを収集します。VACUUM時のカットオフトランザクションID、凍結されたトランザクションID、最小マルチトランザクションIDをレポートします。 + - pg_stat_statementsから、一時ファイルのブロックIO情報を収集します。クエリごとにIO(read,write)時間をレポートします。 + - pg_store_plansから、一時ファイルのブロックIO情報を収集します。実行計画毎にIO(read,write)時間をレポートします。 + ## 詳細情報 @@ -1331,7 +1343,7 @@ pg_statsinfo 13 からの変更点は以下の通りです。 リポジトリDBは各監視対象インスタンスから上記で設定したデータベースにパスワード入力なしに接続できる必要があります。 各監視対象インスタンスからリポジトリDBにパスワード入力なしに接続できるよう -[クライアント認証](https://www.postgresql.jp/document/14/html/client-authentication.html) +[クライアント認証](https://www.postgresql.jp/document/15/html/client-authentication.html) を設定してください。 #### 注意事項 @@ -1417,12 +1429,12 @@ pg_statsinfo](https://www.pgcon.org/2010/schedule/events/216.en.html) ### PostgreSQLドキュメント -[pg_ctl](https://www.postgresql.jp/document/14/html/app-pg-ctl.html), -[psql](https://www.postgresql.jp/document/14/html/app-psql.html), -[サーバの構成](https://www.postgresql.jp/document/14/html/runtime-config.html), -[統計情報コレクタ](https://www.postgresql.jp/document/14/html/monitoring-stats.html), -[システムカタログ](https://www.postgresql.jp/document/14/html/catalogs.html), -[pg_stat_statements](https://www.postgresql.jp/document/14/html/pgstatstatements.html), +[pg_ctl](https://www.postgresql.jp/document/15/html/app-pg-ctl.html), +[psql](https://www.postgresql.jp/document/15/html/app-psql.html), +[サーバの構成](https://www.postgresql.jp/document/15/html/runtime-config.html), +[統計情報コレクタ](https://www.postgresql.jp/document/15/html/monitoring-stats.html), +[システムカタログ](https://www.postgresql.jp/document/15/html/catalogs.html), +[pg_stat_statements](https://www.postgresql.jp/document/15/html/pgstatstatements.html), [pg_stats_reporter](https://github.com/ossc-db/pg_stats_reporter) ----- @@ -1433,7 +1445,7 @@ pg_statsinfo](https://www.pgcon.org/2010/schedule/events/216.en.html)
-Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION +Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION
diff --git a/doc/pg_statsinfo.md b/doc/pg_statsinfo.md index 3ae497a..480dc1a 100644 --- a/doc/pg_statsinfo.md +++ b/doc/pg_statsinfo.md @@ -24,7 +24,7 @@ 5. [Uninstallation](#Uninstallation) 6. [Restrictions](#restrictions) 7. [Q&A](#qa) -8. [Changes From pg_statsinfo13](#changes-from-pg_statsinfo13) +8. [Changes From pg_statsinfo14](#changes-from-pg_statsinfo14) 9. [Detailed Information](#Detailed-Information) 1. [Sharing Repository Database](#Sharing-Repository-Database) 2. [Fall-Back Mode](#Fall-Back-Mode) @@ -34,7 +34,7 @@ -# pg_statsinfo 14 +# pg_statsinfo 15 ## What is pg_statsinfo @@ -98,7 +98,7 @@ manually. Every snapshots holds the following information: - All of the information collected by [the statistics - collector](http://www.postgresql.org/docs/14/static/monitoring-stats.html). + collector](http://www.postgresql.org/docs/15/static/monitoring-stats.html). For example, numbers of INSERT/UPDATE/DELETEs and buffer access counters. - Disk usage per tablespace, WAL, and archive log directory. @@ -127,7 +127,7 @@ monitored database is roughly estimated to be 120 - 150MB. You can see the structure of the tables in pg_statsinfo's repository database in -[this](/doc/files/pg_statsinfo_v14_report_infomation.xls) +[this](/doc/files/pg_statsinfo_v15_report_infomation.xls) document. (MS Excel document in Japanese). ### Server Log Filter @@ -185,7 +185,7 @@ are the tables having clustering index. The contents of alert message of each alert item is shown in ["report item list of pg_statsinfo -v14".](/doc/files/pg_statsinfo_v14_report_infomation.xls) +v15".](/doc/files/pg_statsinfo_v15_report_infomation.xls) (.xls in Japanese). You can see setup instructions [here](#Alert-Function). @@ -206,7 +206,7 @@ format. Following kinds of information are available. The comprehensive list of report items is shown in ["report item list of pg_statsinfo -v14".](/doc/files/pg_statsinfo_v14_report_infomation.xls) +v15".](/doc/files/pg_statsinfo_v15_report_infomation.xls) (.xls in Japanese) Report items are equivalent with [pg_stats_reporter](https://github.com/ossc-db/pg_stats_reporter). @@ -249,10 +249,10 @@ Setup reference of this feature is [here](#Automatic-Maintenance). ### Requirement - PostgreSQL versions - PostgreSQL 14 + PostgreSQL 15 - OS RHEL 7.x (x86_64), CentOS 7.x (x86_64) - RHEL 8.x (x86_64), CentOS 8.x (x86_64) + RHEL 8.x (x86_64), Rocky Linux 8.x (x86_64) ### Installation @@ -263,14 +263,14 @@ Setup reference of this feature is [here](#Automatic-Maintenance). The following steps install pg_statsinfo using rpm. $ su - # yum install pg_statsinfo-14.0-1.pg14.rhel7.x86_64.rpm + # yum install pg_statsinfo-15.0-1.pg15.rhel7.x86_64.rpm ##### RHEL 8 The following steps install pg_statsinfo using rpm. $ su - # dnf install pg_statsinfo-14.0-1.pg14.rhel8.x86_64.rpm + # dnf install pg_statsinfo-15.0-1.pg15.rhel8.x86_64.rpm #### Installing from source @@ -279,8 +279,8 @@ Setting up of repository database will be done automatically at first run. $ cd pg_statsinfo - $ tar xzvf pg_statsinfo-14.0.tar.gz - $ cd pg_statsinfo-14.0 + $ tar xzvf pg_statsinfo-15.0.tar.gz + $ cd pg_statsinfo-15.0 $ make USE_PGXS=1 $ su # make USE_PGXS=1 install @@ -332,7 +332,7 @@ Setup to allow the owner of the PostgreSQL process to log in the PostgreSQL server from localhost without password. "ident" is recommended method for authentication. In order to do that, add the following line to -[pg_hba.conf](http://www.postgresql.org/docs/14/static/auth-pg-hba-conf.html) +[pg_hba.conf](http://www.postgresql.org/docs/15/static/auth-pg-hba-conf.html) when "OS-user = DB-superuser = postgres" which is the most common case. Note that only the first line that matches the condition will be in effect. The "ident" authentication method with TYPE=local would be @@ -345,7 +345,7 @@ convenient on #### Configuration for involving query statistics You can have snapshots involving query statistics using -[pg_stat_statements](http://www.postgresql.org/docs/14/static/pgstatstatements.html). +[pg_stat_statements](http://www.postgresql.org/docs/15/static/pgstatstatements.html). pg_statsinfo automatically detects pg_stat_statements and use it. Installation of pg_stat_statements would be done in the following steps after adding it to shared_preload_libraries in postgresql.conf. @@ -473,7 +473,7 @@ filtering is described below. CSV log file is the source of the PostgreSQL log messages pg_statsinfo processes. (Detailed explanation for CSV log file is seen - [Here](http://www.postgresql.org/docs/14/static/runtime-config-logging.html#RUNTIME-CONFIG-LOGGING-CSVLOG)) + [Here](http://www.postgresql.org/docs/15/static/runtime-config-logging.html#RUNTIME-CONFIG-LOGGING-CSVLOG)) - Text log files (specifically that with the name of "pg_statsinfo.log") @@ -536,21 +536,27 @@ filtering is described below. threshold which is defined by the following configuration parameter in postgresql.conf. - pg_statsinfo.textlog_min_messages + For more information about configuration, refer the [Configuration File](#Configuration-File) section. e.g. Following setup let only log messages whose level is greater than or equal to "warning" be emitted. + pg_statsinfo.textlog_min_messages = warning + - Filter by user name Log messages with particular user names can be filtered out. The excluding user names are specified by the following configuration parameter in postgresql.conf. - pg_statsinfo.textlog_nologging_users + For more information about configuration, refer the [Configuration File](#Configuration-File) section. e.g. Output only log messages with the user name other than 'postgres'. + pg_statsinfo.textlog_nologging_users = 'postgres' + - Change message level Error level can be reassigned in the log messages with particular SQLSTATE codes. @@ -566,12 +572,14 @@ filtering is described below. - pg_statsinfo.adjust_log_error - pg_statsinfo.adjust_log_log - pg_statsinfo.adjust_log_fatal + For more information about configuration, refer the [Configuration File](#Configuration-File) section. - e.g. Changing the message level to 'INFO' for logs with the SQLSTATE - of '42P01'. + e.g. Changing the message level to 'INFO' for logs with the SQLSTATE of '42P01'. + pg_statsinfo.adjust_log_level = on pg_statsinfo.adjust_log_info = '42P01' + Note: This configuration is shared between log file and repository-accumulated logs. They cannot have individual settings. @@ -702,7 +710,7 @@ Available options are described below, Generates a report of the type specified by REPORTID. The following REPORTID are available. More details are shown in [Items of a report in pg_statsinfo - v14](/doc/files/pg_statsinfo_v14_report_infomation.xls)(Both + v15](/doc/files/pg_statsinfo_v15_report_infomation.xls)(Both filename and contents are only in Japanese). - Summary - Alert @@ -721,6 +729,7 @@ Available options are described below, - SchemaInformation - Profiles - All + REPORTID will be completed if it matches only one ID by case insensitive suffix comparison. - \-i, --instid=INSTANCEID @@ -1052,13 +1061,13 @@ optional parameters with the specified level or more severe level are recorded in the logs. "disable" discards all log entries. Severity order is the same as - [log_min_messages](http://www.postgresql.org/docs/14/static/runtime-config-logging.html#RUNTIME-CONFIG-LOGGING-WHEN) + [log_min_messages](http://www.postgresql.org/docs/15/static/runtime-config-logging.html#RUNTIME-CONFIG-LOGGING-WHEN) except additional levels "disable", "alert" and "debug". That is, disable \> alert \> panic \> fatal \> log \> error \> warning \> notice \> info \> debug - ##### 2_Config:Prefix Format Same format with configuration parameter - [log_line_prefix](http://www.postgresql.org/docs/14/static/runtime-config-logging.html#GUC-LOG-LINE-PREFIX). + [log_line_prefix](http://www.postgresql.org/docs/15/static/runtime-config-logging.html#GUC-LOG-LINE-PREFIX). Note that log_line_prefix itself is ignored when pg_statsinfo is enabled. - ##### 3_Config:Time Format @@ -1069,17 +1078,17 @@ optional parameters A keyword/value style connection string. For example, 'hostaddr=127.0.0.1 port=5432 dbname=mydb user=postgres'. See also PQconnectdb in "[Database Connection Control - Functions](http://www.postgresql.org/docs/14/static/libpq-connect.html)" + Functions](http://www.postgresql.org/docs/15/static/libpq-connect.html)" for details. [environment - variables](http://www.postgresql.org/docs/14/static/libpq-envars.html) + variables](http://www.postgresql.org/docs/15/static/libpq-envars.html) describes the effect of environment variables. Password prompt should be avoided on connecting to the repository. Use - [.pgpass](http://www.postgresql.org/docs/14/static/libpq-pgpass.html) + [.pgpass](http://www.postgresql.org/docs/15/static/libpq-pgpass.html) file for providing passwords if needed. Note that hostaddr is taken as a host name when host is omitted in a connection string. See ["Parameter - Keywords"](https://www.postgresql.org/docs/14/static/libpq-connect.html#LIBPQ-PARAMKEYWORDS) + Keywords"](https://www.postgresql.org/docs/15/static/libpq-connect.html#LIBPQ-PARAMKEYWORDS) for the details. - ##### 5_Config:SQLSTATE An SQLSTATE is a five-digit code looks like '42P01' defined in the @@ -1228,7 +1237,7 @@ There are still some restrictions and limitations in pg_statsinfo. China(PRC = CST+8) are wrongly advanced by 14 hours on a repository where no additional setup is made about time zone abbreviations. You need [additional - setup](http://www.postgresql.org/docs/14/static/datetime-config-files.html) + setup](http://www.postgresql.org/docs/15/static/datetime-config-files.html) if you get a wrong result as follows on repository database for the time zone on your system. @@ -1269,7 +1278,7 @@ format. For those who wants to see them in graphical interface, [pg_stats_reporter](https://github.com/ossc-db/pg_stats_reporter) provides sortable tables with pager and manipulative graphs. An operable sample is available -[here](http://pgstatsinfo.sourceforge.net/documents/reporter14/html/files/report_sample.html). +[here](http://pgstatsinfo.sourceforge.net/documents/reporter15/html/files/report_sample.html). #### Q3. Auto maintenance seems not cleaning up snapshots. @@ -1341,7 +1350,7 @@ restrictions. - Schema Information Make sure the settings so that all target instances can be connected without prompting for password. See - [here](http://www.postgresql.org/docs/14/static/client-authentication.html) + [here](http://www.postgresql.org/docs/15/static/client-authentication.html) for details. And make sure that pg_statsinfo.collect_column, pg_statsinfo.collect_index are not disabled if some portion of the information (Column of Tables, Indexes) @@ -1378,47 +1387,17 @@ Currently there is no available means of preventing this occurring. -## Changes from pg_statsinfo13 - -Following changes have been made after pg_statsinfo 13. - - - Supports PostgreSQL 14 (pg_statsinfo 14 supports only PostgreSQL - 14). - - Default setting of alert function become disabled. - Default value of pg_statsinfo.enable_alert is off. - Change to on or true explicitly if use this alert function. - - Launch a thread for collecting wait events. - This thread always collect samples at postgres database of the instance that is monitored. - And added brand new parameters to control it. - - Added a feature of acquiring OS resource information by each query. - Using Hook function same as pg_stat_statements, - collect CPU time, and actual I/O information. - And added brand new parameters to control them. - - Allow parameters to disable collecting column information, and - index information. - The parameters help to reduce the size of snapshot if these information - are not so useful. +## Changes from pg_statsinfo14 + +Following changes have been made after pg_statsinfo 14. + + - Supports PostgreSQL 15 (pg_statsinfo 15 supports only PostgreSQL 15). - More performance information - - Collect information of pg_stat_wal. Report the amount of WAL read/write, - required time to read/write, and so on. - - Collect the number of consuming transaction IDs. - Report the number of consuming transaction IDs within unit time period. - - Collect the information about WAL generation and - detailed information about vacuum on indexes. - Report the amount of WAL write while vacuuming, - the number of scanned, removed, and recycled pages while vacuuming on indexes. - - Collect the information of pg_stat_replication_slots. - Report the amount of transfered data when logical replication is used - and disk I/O which wal_sender consume temporalily. - - Collect CPU and memory information. - Report the number of CPU cores, clock frequency, memory usage - which OS taught us. - - Collect wait event information. - Report the dominant factor of wait events in three fields: - by instance, by database, and by each query. - - Collect OS resource information the query consume. - Report actual I/O (read, write) and CPU time (user, sys) - by database, or by each query. + - Collect detailed information about cleanup lock contention from autovacuum log information. Reports the number of rows and pages not reclaimed due to cleanup lock contention during VACUUM. + - Collect detailed information about scanned indexes from autovacuum log information. Reports the average number and percentage of pages scanned during VACUUM. + - Collect the transaction IDs involved in VACUUM from the autovacuum log information. Reports cutoff transaction IDs, frozen transaction IDs, and minimum multi-transaction IDs during VACUUM. + - Collect block IO information for temporary files from pg_stat_statements. Reports IO(read,write) time per query. + - Collect block IO information for temporary files from pg_store_plans. Reports IO(read,write) time per execution plan. ## Detailed information @@ -1529,14 +1508,14 @@ this from occurring for this case. ## See Also -[pg_ctl](http://www.postgresql.org/docs/14/static/app-pg-ctl.html), -[psql](http://www.postgresql.org/docs/14/static/app-psql.html), [Server -Configuration](http://www.postgresql.org/docs/14/static/runtime-config.html), +[pg_ctl](http://www.postgresql.org/docs/15/static/app-pg-ctl.html), +[psql](http://www.postgresql.org/docs/15/static/app-psql.html), [Server +Configuration](http://www.postgresql.org/docs/15/static/runtime-config.html), [The Statistics -Collector](http://www.postgresql.org/docs/14/static/monitoring-stats.html), +Collector](http://www.postgresql.org/docs/15/static/monitoring-stats.html), [System -Catalogs](http://www.postgresql.org/docs/14/static/catalogs.html), -[pg_stat_statements](http://www.postgresql.org/docs/14/static/pgstatstatements.html), +Catalogs](http://www.postgresql.org/docs/15/static/catalogs.html), +[pg_stat_statements](http://www.postgresql.org/docs/15/static/pgstatstatements.html), [pg_stats_reporter](https://github.com/ossc-db/pg_stats_reporter) ----- @@ -1547,7 +1526,7 @@ Catalogs](http://www.postgresql.org/docs/14/static/catalogs.html),
-Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION +Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION
diff --git a/reporter/Makefile b/reporter/Makefile index 562ca91..7ad8bb2 100644 --- a/reporter/Makefile +++ b/reporter/Makefile @@ -1,7 +1,7 @@ # # pg_statsinfo: Makefile # -# Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION +# Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION # SRCS = \ pg_statsinfo.c \ diff --git a/reporter/control.c b/reporter/control.c index b0f8c4b..d338007 100644 --- a/reporter/control.c +++ b/reporter/control.c @@ -1,7 +1,7 @@ /* * control.c * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "pg_statsinfo.h" diff --git a/reporter/pg_statsinfo.c b/reporter/pg_statsinfo.c index cbd56b6..581aed9 100644 --- a/reporter/pg_statsinfo.c +++ b/reporter/pg_statsinfo.c @@ -1,12 +1,12 @@ /* * pg_statsinfo.c * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "pg_statsinfo.h" -const char *PROGRAM_VERSION = "14.0"; +const char *PROGRAM_VERSION = "15.0"; const char *PROGRAM_URL = "https://github.com/ossc-db/pg_statsinfo/"; const char *PROGRAM_EMAIL = NULL; diff --git a/reporter/pg_statsinfo.h b/reporter/pg_statsinfo.h index 697caab..7e50784 100644 --- a/reporter/pg_statsinfo.h +++ b/reporter/pg_statsinfo.h @@ -2,7 +2,7 @@ * * pg_statsinfo.h * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION * *------------------------------------------------------------------------- */ diff --git a/reporter/pgut/pgut-fe.c b/reporter/pgut/pgut-fe.c index 47714e2..5051b11 100644 --- a/reporter/pgut/pgut-fe.c +++ b/reporter/pgut/pgut-fe.c @@ -2,7 +2,7 @@ * * pgut-fe.c * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION * *------------------------------------------------------------------------- */ diff --git a/reporter/pgut/pgut-fe.h b/reporter/pgut/pgut-fe.h index 17baf6c..4a0b3a0 100644 --- a/reporter/pgut/pgut-fe.h +++ b/reporter/pgut/pgut-fe.h @@ -2,7 +2,7 @@ * * pgut-fe.h * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION * *------------------------------------------------------------------------- */ diff --git a/reporter/pgut/pgut-list.c b/reporter/pgut/pgut-list.c index e1922fe..8b8b9c0 100644 --- a/reporter/pgut/pgut-list.c +++ b/reporter/pgut/pgut-list.c @@ -2,7 +2,7 @@ * * pgut-list.c : copied from postgres/nodes/list.c * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * diff --git a/reporter/pgut/pgut-list.h b/reporter/pgut/pgut-list.h index fdc489c..0531a23 100644 --- a/reporter/pgut/pgut-list.h +++ b/reporter/pgut/pgut-list.h @@ -2,7 +2,7 @@ * * pgut-list.h : copied from postgres/nodes/pg_list.h * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION * *------------------------------------------------------------------------- */ diff --git a/reporter/pgut/pgut.c b/reporter/pgut/pgut.c index 13a4c91..f230786 100644 --- a/reporter/pgut/pgut.c +++ b/reporter/pgut/pgut.c @@ -2,7 +2,7 @@ * * pgut.c * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION * *------------------------------------------------------------------------- */ diff --git a/reporter/pgut/pgut.h b/reporter/pgut/pgut.h index 755d41f..353b40b 100644 --- a/reporter/pgut/pgut.h +++ b/reporter/pgut/pgut.h @@ -2,7 +2,7 @@ * * pgut.h * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION * *------------------------------------------------------------------------- */ diff --git a/reporter/report.c b/reporter/report.c index c34f20b..ad206b6 100644 --- a/reporter/report.c +++ b/reporter/report.c @@ -1,7 +1,7 @@ /* * report.c * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "pg_statsinfo.h" @@ -86,14 +86,21 @@ SELECT \ avg_tup_removed, \ avg_tup_remain, \ avg_tup_dead, \ - scan_pages, \ - scan_pages_ratio, \ + avg_tup_miss_dead, \ + avg_tup_miss_dead_pages, \ + tbl_scan_pages, \ + tbl_scan_pages_ratio, \ + dead_lp_pages, \ + dead_lp_pages_ratio, \ removed_lp, \ dead_lp, \ - avg_index_scans, \ + sum_index_scans, \ avg_duration, \ max_duration, \ - cancel \ + cancel, \ + max_cutoff_xid, \ + max_frozen_xid, \ + max_relmin_mxid \ FROM \ statsrepo.get_autovacuum_activity($1, $2)" #define SQL_SELECT_AUTOVACUUM_ACTIVITY2 "\ @@ -1062,16 +1069,18 @@ report_autovacuum_activity(PGconn *conn, ReportScope *scope, FILE *out) fprintf(out, "/** Vacuum Basic Statistics (Average) **/\n"); fprintf(out, "-----------------------------------\n"); - fprintf(out, "%-40s %8s %13s %13s %12s %12s %12s %10s %16s %10s %10s %12s %12s %13s %7s\n", - "Table", "Count", "Index Scanned", "Index Skipped", "Removed Rows", "Remain Rows", "Remain Dead", - "Scan Pages", "Scan Pages Ratio", "Removed Lp", "Dead Lp", - "Index Scans", "Duration", "Duration(Max)", "Cancels"); - fprintf(out, "--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n"); + fprintf(out, "%-40s|%8s|%8s|%8s|%9s|%10s|%10s|%17s|%16s|%16s|%8s|%8s|%8s|%8s|%8s|%8s|%13s|%13s|%13s\n", + "", "", "#Index", "#Index", "Removed", "Remain", "Remain", "Missed Dead", "Table Scan", "Dead Tuple", + "Removed", "Dead", "#Index", "", "Duration", "", "Removable", "New Rel", "New Rel"); + fprintf(out, "%-40s|%8s|%8s|%8s|%9s|%10s|%10s|%8s|%8s|%16s|%16s|%8s|%8s|%8s|%8s|%8s|%8s|%13s|%13s|%13s\n", + "Table", "#Count", "Scanned", "Skipped", "Rows", "Rows", "Dead", "Rows", "Pages", "Pages(Ratio)", " Pages(Ratio)", + "Lp", "Lp", "Scans", "Duration", "(Max)", "#Cancels", "CutOff Xid", "Frozen Xid", "Min Mxid"); + fprintf(out, "-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n"); res = pgut_execute(conn, SQL_SELECT_AUTOVACUUM_ACTIVITY, lengthof(params), params); for(i = 0; i < PQntuples(res); i++) { - fprintf(out, "%-40s %8s %13s %13s %12s %12s %12s %10s %16s %10s %10s %12s %10s s %11s s %7s\n", + fprintf(out, "%-40s %8s %8s %8s %9s %10s %10s %8s %8s %8s(%5s%%) %8s(%5s%%) %8s %8s %8s %6s s %6s s %8s %13s %13s %13s\n", PQgetvalue(res, i, 0), PQgetvalue(res, i, 1), PQgetvalue(res, i, 2), @@ -1086,7 +1095,14 @@ report_autovacuum_activity(PGconn *conn, ReportScope *scope, FILE *out) PQgetvalue(res, i, 11), PQgetvalue(res, i, 12), PQgetvalue(res, i, 13), - PQgetvalue(res, i, 14)); + PQgetvalue(res, i, 14), + PQgetvalue(res, i, 15), + PQgetvalue(res, i, 16), + PQgetvalue(res, i, 17), + PQgetvalue(res, i, 18), + PQgetvalue(res, i, 19), + PQgetvalue(res, i, 20), + PQgetvalue(res, i, 21)); } fprintf(out, "\n"); PQclear(res); @@ -1217,10 +1233,12 @@ report_query_activity(PGconn *conn, ReportScope *scope, FILE *out) fprintf(out, "/** Statements **/\n"); fprintf(out, "-----------------------------------\n"); - fprintf(out, "%-16s %-16s %8s %14s %13s %15s %16s %-s\n", + fprintf(out, "%-16s %-16s %8s %14s %13s %11s %11s %11s %11s %-s\n", + "", "", "", "", "", "Block", "Block", "Temp Block", "Temp Block", ""); + fprintf(out, "%-16s %-16s %8s %14s %13s %11s %11s %11s %11s %-s\n", "User", "Database", "Calls", "Total Time", "Time/Call", - "Block Read Time", "Block Write Time", "Query"); - fprintf(out, "------------------------------------------------------------------------------------------------------------------------\n"); + "Read Time", "Write Time", "Read Time", "Write Time", "Query"); + fprintf(out, "-----------------------------------------------------------------------------------------------------------------------------------------\n"); res = pgut_execute(conn, SQL_SELECT_QUERY_ACTIVITY_STATEMENTS, lengthof(params), params); for(i = 0; i < PQntuples(res); i++) @@ -1230,8 +1248,10 @@ report_query_activity(PGconn *conn, ReportScope *scope, FILE *out) fprintf(out, "%8s ", PQgetvalue(res, i, 6)); fprintf(out, "%10s sec ", PQgetvalue(res, i, 7)); fprintf(out, "%9s sec ", PQgetvalue(res, i, 8)); - fprintf(out, "%12s ms ", PQgetvalue(res, i, 9)); - fprintf(out, "%13s ms ", PQgetvalue(res, i, 10)); + fprintf(out, "%8s ms ", PQgetvalue(res, i, 9)); + fprintf(out, "%8s ms ", PQgetvalue(res, i, 10)); + fprintf(out, "%8s ms ", PQgetvalue(res, i, 11)); + fprintf(out, "%8s ms ", PQgetvalue(res, i, 12)); fprintf(out, "%-s\n", PQgetvalue(res, i, 2)); } fprintf(out, "\n"); @@ -1266,23 +1286,28 @@ report_query_activity(PGconn *conn, ReportScope *scope, FILE *out) fprintf(out, "/** Plans **/\n"); fprintf(out, "-----------------------------------\n"); - fprintf(out, "%-10s %-10s %-16s %-16s %8s %14s %13s %15s %16s\n", + fprintf(out, "%20s %10s %-16s %-16s %8s %14s %13s %12s %12s %12s %12s\n", + "", "", "", "", "", "", + "", "Block", "Block", "Temp Block", "Temp Block"); + fprintf(out, "%20s %10s %-16s %-16s %8s %14s %13s %12s %12s %12s %12s\n", "Query ID", "Plan ID", "User", "Database", "Calls", "Total Time", - "Time/Call", "Block Read Time", "Block Write Time"); - fprintf(out, "-----------------------------------------------------------------------------------------------------------------------------------------\n"); + "Time/Call", "Read Time", "Write Time", "Read Time", "Write Time"); + fprintf(out, "------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n"); res = pgut_execute(conn, SQL_SELECT_QUERY_ACTIVITY_PLANS, lengthof(params), params); for(i = 0; i < PQntuples(res); i++) { - fprintf(out, "%10s ", PQgetvalue(res, i, 0)); + fprintf(out, "%20s ", PQgetvalue(res, i, 0)); fprintf(out, "%10s ", PQgetvalue(res, i, 1)); fprintf(out, "%-16s ", PQgetvalue(res, i, 2)); fprintf(out, "%-16s ", PQgetvalue(res, i, 3)); fprintf(out, "%8s ", PQgetvalue(res, i, 4)); fprintf(out, "%10s sec ", PQgetvalue(res, i, 5)); fprintf(out, "%9s sec ", PQgetvalue(res, i, 6)); - fprintf(out, "%12s ms ", PQgetvalue(res, i, 7)); - fprintf(out, "%13s ms\n", PQgetvalue(res, i, 8)); + fprintf(out, "%9s ms ", PQgetvalue(res, i, 7)); + fprintf(out, "%9s ms ", PQgetvalue(res, i, 8)); + fprintf(out, "%9s ms ", PQgetvalue(res, i, 9)); + fprintf(out, "%9s ms\n", PQgetvalue(res, i, 10)); } fprintf(out, "\n"); PQclear(res); diff --git a/reporter/snapshot.c b/reporter/snapshot.c index 66c2d85..b89c9f6 100644 --- a/reporter/snapshot.c +++ b/reporter/snapshot.c @@ -1,7 +1,7 @@ /* * snapshot.c * - * Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION + * Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION */ #include "pg_statsinfo.h" diff --git a/spec/pg_statsinfo.spec b/spec/pg_statsinfo.spec index 4c4b43b..9e6295e 100644 --- a/spec/pg_statsinfo.spec +++ b/spec/pg_statsinfo.spec @@ -1,16 +1,16 @@ # SPEC file for pg_statsinfo -# Copyright (c) 2009-2022, NIPPON TELEGRAPH AND TELEPHONE CORPORATION +# Copyright (c) 2009-2023, NIPPON TELEGRAPH AND TELEPHONE CORPORATION # Original declaration for pg_statsinfo rpmbuild # -%define _pgdir /usr/pgsql-14 +%define _pgdir /usr/pgsql-15 %define _bindir %{_pgdir}/bin %define _libdir %{_pgdir}/lib %define _datadir %{_pgdir}/share ## Set general information for pg_statsinfo. Name: pg_statsinfo -Version: 14.0 +Version: 15.0 Release: 1%{?dist} Summary: Performance monitoring tool for PostgreSQL Group: Applications/Databases @@ -20,7 +20,7 @@ Source0: %{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-%(%{__id_u} -n) ## We use postgresql-devel package -BuildRequires: postgresql14-devel +BuildRequires: postgresql15-devel %if %{rhel} == 7 BuildRequires: llvm-toolset-7 llvm5.0 %endif @@ -33,7 +33,7 @@ pg_statsinfo monitors an instance of PostgreSQL server and gather the statistics and activities of the server as snapshots. %package llvmjit -Requires: postgresql14-llvmjit +Requires: postgresql15-llvmjit Requires: pg_statsinfo = %{version} Summary: Just-in-time compilation support for pg_statsinfo @@ -121,8 +121,10 @@ EOF fi fi -# History of pg_statsinfo-v14 RPM. +# History of pg_statsinfo-v15 RPM. %changelog +* Wed Feb 1 2023 - NTT OSS Center 15.0-1 +- pg_statsinfo 15.0 released * Tue Feb 1 2022 - NTT OSS Center 14.0-1 - pg_statsinfo 14.0 released * Mon Dec 14 2020 - NTT OSS Center 13.0-1 diff --git a/test/expected/function-logger.out b/test/expected/function-logger.out index fd16431..86dbaef 100644 --- a/test/expected/function-logger.out +++ b/test/expected/function-logger.out @@ -68,16 +68,18 @@ DELETE 4001 (1 row) /**--- Collect the AUTOVACUUM information ---**/ - instid | database | schema | table | start | index_scans | page_removed | page_remain | tup_removed | tup_remain | tup_dead | page_hit | page_miss | page_dirty | read_rate | write_rate | duration ---------+----------+--------+-------+-------+-------------+--------------+-------------+-------------+------------+----------+----------+-----------+------------+-----------+------------+---------- - 1 | postgres | public | tbl01 | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx -(1 row) + instid | database | schema | table | start | index_scans | page_removed | page_remain | tup_removed | tup_remain | tup_dead | page_hit | page_miss | page_dirty | read_rate | write_rate | duration +--------+-----------+------------+-----------+-------+-------------+--------------+-------------+-------------+------------+----------+----------+-----------+------------+-----------+------------+---------- + 1 | postgres | public | tbl01 | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx + 1 | template1 | pg_catalog | pg_depend | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx +(2 rows) /**--- Collect the cancelled AUTOVACUUM information ---**/ server signaled TRUNCATE TABLE INSERT 0 100000 DELETE 100000 +BEGIN LOCK TABLE instid | timestamp | database | schema | table | query --------+-----------+----------+--------+-------+------------------------- diff --git a/test/expected/function-report.out b/test/expected/function-report.out index 83ec834..e10a2c3 100644 --- a/test/expected/function-report.out +++ b/test/expected/function-report.out @@ -1740,44 +1740,46 @@ STATSINFO Report (host: statsinfo, port: 5432) /** Vacuum Basic Statistics (Average) **/ ----------------------------------- -Table Count Index Scanned Index Skipped Removed Rows Remain Rows Remain Dead Scan Pages Scan Pages Ratio Removed Lp Dead Lp Index Scans Duration Duration(Max) Cancels --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 3 0 50000.000 55532.333 0.000 424.667 50.027 66574.667 0.000 1.000 0.067 s 0.080 s 0 -template1.pg_catalog.pg_statistic 1 1 0 116.000 406.000 0.000 16.000 57.140 212.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.pg_catalog.pg_statistic 1 1 0 56.000 441.000 0.000 17.000 56.670 206.000 0.000 1.000 0.000 s 0.000 s 0 -si_db_01.pg_catalog.pg_statistic 1 1 0 52.000 411.000 0.000 16.000 55.170 204.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.statsrepo.column_20210618 1 0 1 0.000 1069.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 0 -postgres.public.pgbench_branches 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 2 -postgres.public.pgbench_accounts 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 1 + | | #Index| #Index| Removed| Remain| Remain| Missed Dead| Table Scan| Dead Tuple| Removed| Dead| #Index| |Duration| | Removable| New Rel| New Rel +Table | #Count| Scanned| Skipped| Rows| Rows| Dead| Rows| Pages| Pages(Ratio)| Pages(Ratio)| Lp| Lp| Scans|Duration| (Max)|#Cancels| CutOff Xid| Frozen Xid| Min Mxid +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +template1.pg_catalog.pg_statistic 1 1 0 129.0 404.0 0.0 0.0 0.0 28.0(100.0%) 16.0( 57.1%) 178.0 0.0 1.0 0.0 s 0.0 s 0 811 811 +postgres.public.pgbench_branches 1 0 1 113.0 10.0 0.0 0.0 0.0 1.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 2 11768 11744 +postgres.pg_catalog.pg_statistic 2 2 0 41.5 499.0 0.0 0.0 0.0 30.5(100.0%) 16.0( 52.8%) 158.0 0.0 2.0 0.0 s 0.0 s 0 27293 +postgres.pg_catalog.pg_attribute 1 1 0 2.0 4678.0 0.0 0.0 0.0 51.0( 58.0%) 3.0( 3.4%) 88.0 0.0 1.0 0.0 s 0.0 s 0 825 800 +postgres.public.pgbench_accounts 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0( 0.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 1 +postgres.public.pgbench_history 1 0 1 0.0 10920.0 0.0 0.0 0.0 70.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 845 +postgres.statsrepo.column_20221219 1 0 1 0.0 1225.0 0.0 0.0 0.0 22.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 810 /** Vacuum I/O Statistics (Average) **/ ----------------------------------- Table Page Hit Page Miss Page Dirty Read Rate Write Rate Read Duration Write Duration --------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3239.667 1.000 1.000 0.093 MiB/s 0.093 MiB/s 0.013 s 0.000 s -postgres.pg_catalog.pg_statistic 110.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -template1.pg_catalog.pg_statistic 105.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -si_db_01.pg_catalog.pg_statistic 90.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -postgres.statsrepo.column_20210618 82.000 2.000 3.000 34.041 MiB/s 51.062 MiB/s 0.018 s 0.000 s +postgres.pg_catalog.pg_attribute 145.000 14.000 0.000 122.070 MiB/s 0.000 MiB/s 0.118 s 0.000 s +postgres.public.pgbench_history 145.000 2.000 4.000 8.351 MiB/s 16.702 MiB/s 0.012 s 0.000 s +postgres.pg_catalog.pg_statistic 105.500 1.500 3.000 9.405 MiB/s 18.810 MiB/s 0.043 s 0.000 s +postgres.statsrepo.column_20221219 76.000 2.000 3.000 54.825 MiB/s 82.237 MiB/s 0.012 s 0.000 s +template1.pg_catalog.pg_statistic 63.000 39.000 37.000 64.910 MiB/s 61.581 MiB/s 0.214 s 0.000 s +postgres.public.pgbench_branches 22.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s /** Vacuum WAL Statistics (Average) **/ ----------------------------------- Table Count WAL Records WAL FPIs WAL bytes ----------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 2055.000 0.000 612186.000 -template1.pg_catalog.pg_statistic 1 94.000 0.000 11401.000 -postgres.statsrepo.column_20210618 1 20.000 1.000 9506.000 -postgres.pg_catalog.pg_statistic 1 62.000 0.000 4690.000 -si_db_01.pg_catalog.pg_statistic 1 62.000 0.000 4665.000 +template1.pg_catalog.pg_statistic 1 92.000 34.000 185836.000 +postgres.pg_catalog.pg_statistic 2 57.500 7.500 37157.500 +postgres.public.pgbench_history 1 71.000 1.000 12515.000 +postgres.pg_catalog.pg_attribute 1 44.000 1.000 11696.000 +postgres.statsrepo.column_20221219 1 23.000 1.000 9683.000 +postgres.public.pgbench_branches 1 3.000 0.000 608.000 /** Vacuum Index Statistics (Average) **/ ----------------------------------- Table Index Count Page Total Page New Del Page Curr Del Page Reuse --------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_1 3 275.000 0.000 0.000 0.000 -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_2 3 256.667 96.333 201.000 104.667 -postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 -si_db_01.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnam_index 1 22.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnum_index 1 15.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 2 5.000 0.000 0.000 0.000 template1.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 /** Analyze Statistics **/ @@ -1799,44 +1801,46 @@ STATSINFO Report (host: statsinfo, port: 5433) /** Vacuum Basic Statistics (Average) **/ ----------------------------------- -Table Count Index Scanned Index Skipped Removed Rows Remain Rows Remain Dead Scan Pages Scan Pages Ratio Removed Lp Dead Lp Index Scans Duration Duration(Max) Cancels --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 3 0 50000.000 55532.333 0.000 424.667 50.027 66574.667 0.000 1.000 0.067 s 0.080 s 0 -template1.pg_catalog.pg_statistic 1 1 0 116.000 406.000 0.000 16.000 57.140 212.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.pg_catalog.pg_statistic 1 1 0 56.000 441.000 0.000 17.000 56.670 206.000 0.000 1.000 0.000 s 0.000 s 0 -si_db_01.pg_catalog.pg_statistic 1 1 0 52.000 411.000 0.000 16.000 55.170 204.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.statsrepo.column_20210618 1 0 1 0.000 1069.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 0 -postgres.public.pgbench_branches 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 2 -postgres.public.pgbench_accounts 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 1 + | | #Index| #Index| Removed| Remain| Remain| Missed Dead| Table Scan| Dead Tuple| Removed| Dead| #Index| |Duration| | Removable| New Rel| New Rel +Table | #Count| Scanned| Skipped| Rows| Rows| Dead| Rows| Pages| Pages(Ratio)| Pages(Ratio)| Lp| Lp| Scans|Duration| (Max)|#Cancels| CutOff Xid| Frozen Xid| Min Mxid +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +template1.pg_catalog.pg_statistic 1 1 0 129.0 404.0 0.0 0.0 0.0 28.0(100.0%) 16.0( 57.1%) 178.0 0.0 1.0 0.0 s 0.0 s 0 811 811 +postgres.public.pgbench_branches 1 0 1 113.0 10.0 0.0 0.0 0.0 1.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 2 11768 11744 +postgres.pg_catalog.pg_statistic 2 2 0 41.5 499.0 0.0 0.0 0.0 30.5(100.0%) 16.0( 52.8%) 158.0 0.0 2.0 0.0 s 0.0 s 0 27293 +postgres.pg_catalog.pg_attribute 1 1 0 2.0 4678.0 0.0 0.0 0.0 51.0( 58.0%) 3.0( 3.4%) 88.0 0.0 1.0 0.0 s 0.0 s 0 825 800 +postgres.public.pgbench_accounts 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0( 0.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 1 +postgres.public.pgbench_history 1 0 1 0.0 10920.0 0.0 0.0 0.0 70.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 845 +postgres.statsrepo.column_20221219 1 0 1 0.0 1225.0 0.0 0.0 0.0 22.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 810 /** Vacuum I/O Statistics (Average) **/ ----------------------------------- Table Page Hit Page Miss Page Dirty Read Rate Write Rate Read Duration Write Duration --------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3239.667 1.000 1.000 0.093 MiB/s 0.093 MiB/s 0.013 s 0.000 s -postgres.pg_catalog.pg_statistic 110.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -template1.pg_catalog.pg_statistic 105.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -si_db_01.pg_catalog.pg_statistic 90.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -postgres.statsrepo.column_20210618 82.000 2.000 3.000 34.041 MiB/s 51.062 MiB/s 0.018 s 0.000 s +postgres.pg_catalog.pg_attribute 145.000 14.000 0.000 122.070 MiB/s 0.000 MiB/s 0.118 s 0.000 s +postgres.public.pgbench_history 145.000 2.000 4.000 8.351 MiB/s 16.702 MiB/s 0.012 s 0.000 s +postgres.pg_catalog.pg_statistic 105.500 1.500 3.000 9.405 MiB/s 18.810 MiB/s 0.043 s 0.000 s +postgres.statsrepo.column_20221219 76.000 2.000 3.000 54.825 MiB/s 82.237 MiB/s 0.012 s 0.000 s +template1.pg_catalog.pg_statistic 63.000 39.000 37.000 64.910 MiB/s 61.581 MiB/s 0.214 s 0.000 s +postgres.public.pgbench_branches 22.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s /** Vacuum WAL Statistics (Average) **/ ----------------------------------- Table Count WAL Records WAL FPIs WAL bytes ----------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 2055.000 0.000 612186.000 -template1.pg_catalog.pg_statistic 1 94.000 0.000 11401.000 -postgres.statsrepo.column_20210618 1 20.000 1.000 9506.000 -postgres.pg_catalog.pg_statistic 1 62.000 0.000 4690.000 -si_db_01.pg_catalog.pg_statistic 1 62.000 0.000 4665.000 +template1.pg_catalog.pg_statistic 1 92.000 34.000 185836.000 +postgres.pg_catalog.pg_statistic 2 57.500 7.500 37157.500 +postgres.public.pgbench_history 1 71.000 1.000 12515.000 +postgres.pg_catalog.pg_attribute 1 44.000 1.000 11696.000 +postgres.statsrepo.column_20221219 1 23.000 1.000 9683.000 +postgres.public.pgbench_branches 1 3.000 0.000 608.000 /** Vacuum Index Statistics (Average) **/ ----------------------------------- Table Index Count Page Total Page New Del Page Curr Del Page Reuse --------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_1 3 275.000 0.000 0.000 0.000 -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_2 3 256.667 96.333 201.000 104.667 -postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 -si_db_01.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnam_index 1 22.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnum_index 1 15.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 2 5.000 0.000 0.000 0.000 template1.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 /** Analyze Statistics **/ @@ -1858,44 +1862,46 @@ STATSINFO Report (host: statsinfo, port: 5434) /** Vacuum Basic Statistics (Average) **/ ----------------------------------- -Table Count Index Scanned Index Skipped Removed Rows Remain Rows Remain Dead Scan Pages Scan Pages Ratio Removed Lp Dead Lp Index Scans Duration Duration(Max) Cancels --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 3 0 50000.000 55532.333 0.000 424.667 50.027 66574.667 0.000 1.000 0.067 s 0.080 s 0 -template1.pg_catalog.pg_statistic 1 1 0 116.000 406.000 0.000 16.000 57.140 212.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.pg_catalog.pg_statistic 1 1 0 56.000 441.000 0.000 17.000 56.670 206.000 0.000 1.000 0.000 s 0.000 s 0 -si_db_01.pg_catalog.pg_statistic 1 1 0 52.000 411.000 0.000 16.000 55.170 204.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.statsrepo.column_20210618 1 0 1 0.000 1069.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 0 -postgres.public.pgbench_branches 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 2 -postgres.public.pgbench_accounts 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 1 + | | #Index| #Index| Removed| Remain| Remain| Missed Dead| Table Scan| Dead Tuple| Removed| Dead| #Index| |Duration| | Removable| New Rel| New Rel +Table | #Count| Scanned| Skipped| Rows| Rows| Dead| Rows| Pages| Pages(Ratio)| Pages(Ratio)| Lp| Lp| Scans|Duration| (Max)|#Cancels| CutOff Xid| Frozen Xid| Min Mxid +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +template1.pg_catalog.pg_statistic 1 1 0 129.0 404.0 0.0 0.0 0.0 28.0(100.0%) 16.0( 57.1%) 178.0 0.0 1.0 0.0 s 0.0 s 0 811 811 +postgres.public.pgbench_branches 1 0 1 113.0 10.0 0.0 0.0 0.0 1.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 2 11768 11744 +postgres.pg_catalog.pg_statistic 2 2 0 41.5 499.0 0.0 0.0 0.0 30.5(100.0%) 16.0( 52.8%) 158.0 0.0 2.0 0.0 s 0.0 s 0 27293 +postgres.pg_catalog.pg_attribute 1 1 0 2.0 4678.0 0.0 0.0 0.0 51.0( 58.0%) 3.0( 3.4%) 88.0 0.0 1.0 0.0 s 0.0 s 0 825 800 +postgres.public.pgbench_accounts 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0( 0.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 1 +postgres.public.pgbench_history 1 0 1 0.0 10920.0 0.0 0.0 0.0 70.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 845 +postgres.statsrepo.column_20221219 1 0 1 0.0 1225.0 0.0 0.0 0.0 22.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 810 /** Vacuum I/O Statistics (Average) **/ ----------------------------------- Table Page Hit Page Miss Page Dirty Read Rate Write Rate Read Duration Write Duration --------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3239.667 1.000 1.000 0.093 MiB/s 0.093 MiB/s 0.013 s 0.000 s -postgres.pg_catalog.pg_statistic 110.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -template1.pg_catalog.pg_statistic 105.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -si_db_01.pg_catalog.pg_statistic 90.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -postgres.statsrepo.column_20210618 82.000 2.000 3.000 34.041 MiB/s 51.062 MiB/s 0.018 s 0.000 s +postgres.pg_catalog.pg_attribute 145.000 14.000 0.000 122.070 MiB/s 0.000 MiB/s 0.118 s 0.000 s +postgres.public.pgbench_history 145.000 2.000 4.000 8.351 MiB/s 16.702 MiB/s 0.012 s 0.000 s +postgres.pg_catalog.pg_statistic 105.500 1.500 3.000 9.405 MiB/s 18.810 MiB/s 0.043 s 0.000 s +postgres.statsrepo.column_20221219 76.000 2.000 3.000 54.825 MiB/s 82.237 MiB/s 0.012 s 0.000 s +template1.pg_catalog.pg_statistic 63.000 39.000 37.000 64.910 MiB/s 61.581 MiB/s 0.214 s 0.000 s +postgres.public.pgbench_branches 22.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s /** Vacuum WAL Statistics (Average) **/ ----------------------------------- Table Count WAL Records WAL FPIs WAL bytes ----------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 2055.000 0.000 612186.000 -template1.pg_catalog.pg_statistic 1 94.000 0.000 11401.000 -postgres.statsrepo.column_20210618 1 20.000 1.000 9506.000 -postgres.pg_catalog.pg_statistic 1 62.000 0.000 4690.000 -si_db_01.pg_catalog.pg_statistic 1 62.000 0.000 4665.000 +template1.pg_catalog.pg_statistic 1 92.000 34.000 185836.000 +postgres.pg_catalog.pg_statistic 2 57.500 7.500 37157.500 +postgres.public.pgbench_history 1 71.000 1.000 12515.000 +postgres.pg_catalog.pg_attribute 1 44.000 1.000 11696.000 +postgres.statsrepo.column_20221219 1 23.000 1.000 9683.000 +postgres.public.pgbench_branches 1 3.000 0.000 608.000 /** Vacuum Index Statistics (Average) **/ ----------------------------------- Table Index Count Page Total Page New Del Page Curr Del Page Reuse --------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_1 3 275.000 0.000 0.000 0.000 -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_2 3 256.667 96.333 201.000 104.667 -postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 -si_db_01.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnam_index 1 22.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnum_index 1 15.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 2 5.000 0.000 0.000 0.000 template1.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 /** Analyze Statistics **/ @@ -1917,44 +1923,46 @@ STATSINFO Report (host: statsinfo, port: 5435) /** Vacuum Basic Statistics (Average) **/ ----------------------------------- -Table Count Index Scanned Index Skipped Removed Rows Remain Rows Remain Dead Scan Pages Scan Pages Ratio Removed Lp Dead Lp Index Scans Duration Duration(Max) Cancels --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 3 0 50000.000 55532.333 0.000 424.667 50.027 66574.667 0.000 1.000 0.067 s 0.080 s 0 -template1.pg_catalog.pg_statistic 1 1 0 116.000 406.000 0.000 16.000 57.140 212.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.pg_catalog.pg_statistic 1 1 0 56.000 441.000 0.000 17.000 56.670 206.000 0.000 1.000 0.000 s 0.000 s 0 -si_db_01.pg_catalog.pg_statistic 1 1 0 52.000 411.000 0.000 16.000 55.170 204.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.statsrepo.column_20210618 1 0 1 0.000 1069.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 0 -postgres.public.pgbench_branches 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 2 -postgres.public.pgbench_accounts 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 1 + | | #Index| #Index| Removed| Remain| Remain| Missed Dead| Table Scan| Dead Tuple| Removed| Dead| #Index| |Duration| | Removable| New Rel| New Rel +Table | #Count| Scanned| Skipped| Rows| Rows| Dead| Rows| Pages| Pages(Ratio)| Pages(Ratio)| Lp| Lp| Scans|Duration| (Max)|#Cancels| CutOff Xid| Frozen Xid| Min Mxid +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +template1.pg_catalog.pg_statistic 1 1 0 129.0 404.0 0.0 0.0 0.0 28.0(100.0%) 16.0( 57.1%) 178.0 0.0 1.0 0.0 s 0.0 s 0 811 811 +postgres.public.pgbench_branches 1 0 1 113.0 10.0 0.0 0.0 0.0 1.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 2 11768 11744 +postgres.pg_catalog.pg_statistic 2 2 0 41.5 499.0 0.0 0.0 0.0 30.5(100.0%) 16.0( 52.8%) 158.0 0.0 2.0 0.0 s 0.0 s 0 27293 +postgres.pg_catalog.pg_attribute 1 1 0 2.0 4678.0 0.0 0.0 0.0 51.0( 58.0%) 3.0( 3.4%) 88.0 0.0 1.0 0.0 s 0.0 s 0 825 800 +postgres.public.pgbench_accounts 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0( 0.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 1 +postgres.public.pgbench_history 1 0 1 0.0 10920.0 0.0 0.0 0.0 70.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 845 +postgres.statsrepo.column_20221219 1 0 1 0.0 1225.0 0.0 0.0 0.0 22.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 810 /** Vacuum I/O Statistics (Average) **/ ----------------------------------- Table Page Hit Page Miss Page Dirty Read Rate Write Rate Read Duration Write Duration --------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3239.667 1.000 1.000 0.093 MiB/s 0.093 MiB/s 0.013 s 0.000 s -postgres.pg_catalog.pg_statistic 110.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -template1.pg_catalog.pg_statistic 105.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -si_db_01.pg_catalog.pg_statistic 90.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -postgres.statsrepo.column_20210618 82.000 2.000 3.000 34.041 MiB/s 51.062 MiB/s 0.018 s 0.000 s +postgres.pg_catalog.pg_attribute 145.000 14.000 0.000 122.070 MiB/s 0.000 MiB/s 0.118 s 0.000 s +postgres.public.pgbench_history 145.000 2.000 4.000 8.351 MiB/s 16.702 MiB/s 0.012 s 0.000 s +postgres.pg_catalog.pg_statistic 105.500 1.500 3.000 9.405 MiB/s 18.810 MiB/s 0.043 s 0.000 s +postgres.statsrepo.column_20221219 76.000 2.000 3.000 54.825 MiB/s 82.237 MiB/s 0.012 s 0.000 s +template1.pg_catalog.pg_statistic 63.000 39.000 37.000 64.910 MiB/s 61.581 MiB/s 0.214 s 0.000 s +postgres.public.pgbench_branches 22.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s /** Vacuum WAL Statistics (Average) **/ ----------------------------------- Table Count WAL Records WAL FPIs WAL bytes ----------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 2055.000 0.000 612186.000 -template1.pg_catalog.pg_statistic 1 94.000 0.000 11401.000 -postgres.statsrepo.column_20210618 1 20.000 1.000 9506.000 -postgres.pg_catalog.pg_statistic 1 62.000 0.000 4690.000 -si_db_01.pg_catalog.pg_statistic 1 62.000 0.000 4665.000 +template1.pg_catalog.pg_statistic 1 92.000 34.000 185836.000 +postgres.pg_catalog.pg_statistic 2 57.500 7.500 37157.500 +postgres.public.pgbench_history 1 71.000 1.000 12515.000 +postgres.pg_catalog.pg_attribute 1 44.000 1.000 11696.000 +postgres.statsrepo.column_20221219 1 23.000 1.000 9683.000 +postgres.public.pgbench_branches 1 3.000 0.000 608.000 /** Vacuum Index Statistics (Average) **/ ----------------------------------- Table Index Count Page Total Page New Del Page Curr Del Page Reuse --------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_1 3 275.000 0.000 0.000 0.000 -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_2 3 256.667 96.333 201.000 104.667 -postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 -si_db_01.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnam_index 1 22.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnum_index 1 15.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 2 5.000 0.000 0.000 0.000 template1.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 /** Analyze Statistics **/ @@ -1976,44 +1984,46 @@ STATSINFO Report (host: statsinfo, port: 5436) /** Vacuum Basic Statistics (Average) **/ ----------------------------------- -Table Count Index Scanned Index Skipped Removed Rows Remain Rows Remain Dead Scan Pages Scan Pages Ratio Removed Lp Dead Lp Index Scans Duration Duration(Max) Cancels --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 3 0 50000.000 55532.333 0.000 424.667 50.027 66574.667 0.000 1.000 0.067 s 0.080 s 0 -template1.pg_catalog.pg_statistic 1 1 0 116.000 406.000 0.000 16.000 57.140 212.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.pg_catalog.pg_statistic 1 1 0 56.000 441.000 0.000 17.000 56.670 206.000 0.000 1.000 0.000 s 0.000 s 0 -si_db_01.pg_catalog.pg_statistic 1 1 0 52.000 411.000 0.000 16.000 55.170 204.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.statsrepo.column_20210618 1 0 1 0.000 1069.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 0 -postgres.public.pgbench_branches 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 2 -postgres.public.pgbench_accounts 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 1 + | | #Index| #Index| Removed| Remain| Remain| Missed Dead| Table Scan| Dead Tuple| Removed| Dead| #Index| |Duration| | Removable| New Rel| New Rel +Table | #Count| Scanned| Skipped| Rows| Rows| Dead| Rows| Pages| Pages(Ratio)| Pages(Ratio)| Lp| Lp| Scans|Duration| (Max)|#Cancels| CutOff Xid| Frozen Xid| Min Mxid +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +template1.pg_catalog.pg_statistic 1 1 0 129.0 404.0 0.0 0.0 0.0 28.0(100.0%) 16.0( 57.1%) 178.0 0.0 1.0 0.0 s 0.0 s 0 811 811 +postgres.public.pgbench_branches 1 0 1 113.0 10.0 0.0 0.0 0.0 1.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 2 11768 11744 +postgres.pg_catalog.pg_statistic 2 2 0 41.5 499.0 0.0 0.0 0.0 30.5(100.0%) 16.0( 52.8%) 158.0 0.0 2.0 0.0 s 0.0 s 0 27293 +postgres.pg_catalog.pg_attribute 1 1 0 2.0 4678.0 0.0 0.0 0.0 51.0( 58.0%) 3.0( 3.4%) 88.0 0.0 1.0 0.0 s 0.0 s 0 825 800 +postgres.public.pgbench_accounts 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0( 0.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 1 +postgres.public.pgbench_history 1 0 1 0.0 10920.0 0.0 0.0 0.0 70.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 845 +postgres.statsrepo.column_20221219 1 0 1 0.0 1225.0 0.0 0.0 0.0 22.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 810 /** Vacuum I/O Statistics (Average) **/ ----------------------------------- Table Page Hit Page Miss Page Dirty Read Rate Write Rate Read Duration Write Duration --------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3239.667 1.000 1.000 0.093 MiB/s 0.093 MiB/s 0.013 s 0.000 s -postgres.pg_catalog.pg_statistic 110.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -template1.pg_catalog.pg_statistic 105.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -si_db_01.pg_catalog.pg_statistic 90.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -postgres.statsrepo.column_20210618 82.000 2.000 3.000 34.041 MiB/s 51.062 MiB/s 0.018 s 0.000 s +postgres.pg_catalog.pg_attribute 145.000 14.000 0.000 122.070 MiB/s 0.000 MiB/s 0.118 s 0.000 s +postgres.public.pgbench_history 145.000 2.000 4.000 8.351 MiB/s 16.702 MiB/s 0.012 s 0.000 s +postgres.pg_catalog.pg_statistic 105.500 1.500 3.000 9.405 MiB/s 18.810 MiB/s 0.043 s 0.000 s +postgres.statsrepo.column_20221219 76.000 2.000 3.000 54.825 MiB/s 82.237 MiB/s 0.012 s 0.000 s +template1.pg_catalog.pg_statistic 63.000 39.000 37.000 64.910 MiB/s 61.581 MiB/s 0.214 s 0.000 s +postgres.public.pgbench_branches 22.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s /** Vacuum WAL Statistics (Average) **/ ----------------------------------- Table Count WAL Records WAL FPIs WAL bytes ----------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 2055.000 0.000 612186.000 -template1.pg_catalog.pg_statistic 1 94.000 0.000 11401.000 -postgres.statsrepo.column_20210618 1 20.000 1.000 9506.000 -postgres.pg_catalog.pg_statistic 1 62.000 0.000 4690.000 -si_db_01.pg_catalog.pg_statistic 1 62.000 0.000 4665.000 +template1.pg_catalog.pg_statistic 1 92.000 34.000 185836.000 +postgres.pg_catalog.pg_statistic 2 57.500 7.500 37157.500 +postgres.public.pgbench_history 1 71.000 1.000 12515.000 +postgres.pg_catalog.pg_attribute 1 44.000 1.000 11696.000 +postgres.statsrepo.column_20221219 1 23.000 1.000 9683.000 +postgres.public.pgbench_branches 1 3.000 0.000 608.000 /** Vacuum Index Statistics (Average) **/ ----------------------------------- Table Index Count Page Total Page New Del Page Curr Del Page Reuse --------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_1 3 275.000 0.000 0.000 0.000 -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_2 3 256.667 96.333 201.000 104.667 -postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 -si_db_01.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnam_index 1 22.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnum_index 1 15.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 2 5.000 0.000 0.000 0.000 template1.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 /** Analyze Statistics **/ @@ -2035,44 +2045,46 @@ STATSINFO Report (host: statsinfo, port: 5437) /** Vacuum Basic Statistics (Average) **/ ----------------------------------- -Table Count Index Scanned Index Skipped Removed Rows Remain Rows Remain Dead Scan Pages Scan Pages Ratio Removed Lp Dead Lp Index Scans Duration Duration(Max) Cancels --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 3 0 50000.000 55532.333 0.000 424.667 50.027 66574.667 0.000 1.000 0.067 s 0.080 s 0 -template1.pg_catalog.pg_statistic 1 1 0 116.000 406.000 0.000 16.000 57.140 212.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.pg_catalog.pg_statistic 1 1 0 56.000 441.000 0.000 17.000 56.670 206.000 0.000 1.000 0.000 s 0.000 s 0 -si_db_01.pg_catalog.pg_statistic 1 1 0 52.000 411.000 0.000 16.000 55.170 204.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.statsrepo.column_20210618 1 0 1 0.000 1069.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 0 -postgres.public.pgbench_branches 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 2 -postgres.public.pgbench_accounts 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 1 + | | #Index| #Index| Removed| Remain| Remain| Missed Dead| Table Scan| Dead Tuple| Removed| Dead| #Index| |Duration| | Removable| New Rel| New Rel +Table | #Count| Scanned| Skipped| Rows| Rows| Dead| Rows| Pages| Pages(Ratio)| Pages(Ratio)| Lp| Lp| Scans|Duration| (Max)|#Cancels| CutOff Xid| Frozen Xid| Min Mxid +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +template1.pg_catalog.pg_statistic 1 1 0 129.0 404.0 0.0 0.0 0.0 28.0(100.0%) 16.0( 57.1%) 178.0 0.0 1.0 0.0 s 0.0 s 0 811 811 +postgres.public.pgbench_branches 1 0 1 113.0 10.0 0.0 0.0 0.0 1.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 2 11768 11744 +postgres.pg_catalog.pg_statistic 2 2 0 41.5 499.0 0.0 0.0 0.0 30.5(100.0%) 16.0( 52.8%) 158.0 0.0 2.0 0.0 s 0.0 s 0 27293 +postgres.pg_catalog.pg_attribute 1 1 0 2.0 4678.0 0.0 0.0 0.0 51.0( 58.0%) 3.0( 3.4%) 88.0 0.0 1.0 0.0 s 0.0 s 0 825 800 +postgres.public.pgbench_accounts 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0( 0.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 1 +postgres.public.pgbench_history 1 0 1 0.0 10920.0 0.0 0.0 0.0 70.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 845 +postgres.statsrepo.column_20221219 1 0 1 0.0 1225.0 0.0 0.0 0.0 22.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 810 /** Vacuum I/O Statistics (Average) **/ ----------------------------------- Table Page Hit Page Miss Page Dirty Read Rate Write Rate Read Duration Write Duration --------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3239.667 1.000 1.000 0.093 MiB/s 0.093 MiB/s 0.013 s 0.000 s -postgres.pg_catalog.pg_statistic 110.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -template1.pg_catalog.pg_statistic 105.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -si_db_01.pg_catalog.pg_statistic 90.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -postgres.statsrepo.column_20210618 82.000 2.000 3.000 34.041 MiB/s 51.062 MiB/s 0.018 s 0.000 s +postgres.pg_catalog.pg_attribute 145.000 14.000 0.000 122.070 MiB/s 0.000 MiB/s 0.118 s 0.000 s +postgres.public.pgbench_history 145.000 2.000 4.000 8.351 MiB/s 16.702 MiB/s 0.012 s 0.000 s +postgres.pg_catalog.pg_statistic 105.500 1.500 3.000 9.405 MiB/s 18.810 MiB/s 0.043 s 0.000 s +postgres.statsrepo.column_20221219 76.000 2.000 3.000 54.825 MiB/s 82.237 MiB/s 0.012 s 0.000 s +template1.pg_catalog.pg_statistic 63.000 39.000 37.000 64.910 MiB/s 61.581 MiB/s 0.214 s 0.000 s +postgres.public.pgbench_branches 22.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s /** Vacuum WAL Statistics (Average) **/ ----------------------------------- Table Count WAL Records WAL FPIs WAL bytes ----------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 2055.000 0.000 612186.000 -template1.pg_catalog.pg_statistic 1 94.000 0.000 11401.000 -postgres.statsrepo.column_20210618 1 20.000 1.000 9506.000 -postgres.pg_catalog.pg_statistic 1 62.000 0.000 4690.000 -si_db_01.pg_catalog.pg_statistic 1 62.000 0.000 4665.000 +template1.pg_catalog.pg_statistic 1 92.000 34.000 185836.000 +postgres.pg_catalog.pg_statistic 2 57.500 7.500 37157.500 +postgres.public.pgbench_history 1 71.000 1.000 12515.000 +postgres.pg_catalog.pg_attribute 1 44.000 1.000 11696.000 +postgres.statsrepo.column_20221219 1 23.000 1.000 9683.000 +postgres.public.pgbench_branches 1 3.000 0.000 608.000 /** Vacuum Index Statistics (Average) **/ ----------------------------------- Table Index Count Page Total Page New Del Page Curr Del Page Reuse --------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_1 3 275.000 0.000 0.000 0.000 -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_2 3 256.667 96.333 201.000 104.667 -postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 -si_db_01.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnam_index 1 22.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnum_index 1 15.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 2 5.000 0.000 0.000 0.000 template1.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 /** Analyze Statistics **/ @@ -2103,11 +2115,12 @@ OID Database Schema Function Calls Tot /** Statements **/ ----------------------------------- -User Database Calls Total Time Time/Call Block Read Time Block Write Time Query ------------------------------------------------------------------------------------------------------------------------- -postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; -postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; -postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; + Block Block Temp Block Temp Block +User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time Query +----------------------------------------------------------------------------------------------------------------------------------------- +postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; +postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; +postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; /** Statements (rusage) **/ ----------------------------------- @@ -2119,11 +2132,12 @@ postgres postgres 3 3 0.300000 /** Plans **/ ----------------------------------- -Query ID Plan ID User Database Calls Total Time Time/Call Block Read Time Block Write Time ------------------------------------------------------------------------------------------------------------------------------------------ - 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms -1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms -1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms + Block Block Temp Block Temp Block + Query ID Plan ID User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time +------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms 0.000 ms 0.000 ms + 1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms + 1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms /** Wait Sampling **/ ----------------------------------- @@ -2159,11 +2173,12 @@ OID Database Schema Function Calls Tot /** Statements **/ ----------------------------------- -User Database Calls Total Time Time/Call Block Read Time Block Write Time Query ------------------------------------------------------------------------------------------------------------------------- -postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; -postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; -postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; + Block Block Temp Block Temp Block +User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time Query +----------------------------------------------------------------------------------------------------------------------------------------- +postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; +postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; +postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; /** Statements (rusage) **/ ----------------------------------- @@ -2175,11 +2190,12 @@ postgres postgres 3 3 0.300000 /** Plans **/ ----------------------------------- -Query ID Plan ID User Database Calls Total Time Time/Call Block Read Time Block Write Time ------------------------------------------------------------------------------------------------------------------------------------------ - 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms -1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms -1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms + Block Block Temp Block Temp Block + Query ID Plan ID User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time +------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms 0.000 ms 0.000 ms + 1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms + 1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms /** Wait Sampling **/ ----------------------------------- @@ -2215,11 +2231,12 @@ OID Database Schema Function Calls Tot /** Statements **/ ----------------------------------- -User Database Calls Total Time Time/Call Block Read Time Block Write Time Query ------------------------------------------------------------------------------------------------------------------------- -postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; -postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; -postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; + Block Block Temp Block Temp Block +User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time Query +----------------------------------------------------------------------------------------------------------------------------------------- +postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; +postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; +postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; /** Statements (rusage) **/ ----------------------------------- @@ -2231,11 +2248,12 @@ postgres postgres 3 3 0.300000 /** Plans **/ ----------------------------------- -Query ID Plan ID User Database Calls Total Time Time/Call Block Read Time Block Write Time ------------------------------------------------------------------------------------------------------------------------------------------ - 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms -1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms -1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms + Block Block Temp Block Temp Block + Query ID Plan ID User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time +------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms 0.000 ms 0.000 ms + 1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms + 1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms /** Wait Sampling **/ ----------------------------------- @@ -2271,11 +2289,12 @@ OID Database Schema Function Calls Tot /** Statements **/ ----------------------------------- -User Database Calls Total Time Time/Call Block Read Time Block Write Time Query ------------------------------------------------------------------------------------------------------------------------- -postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; -postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; -postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; + Block Block Temp Block Temp Block +User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time Query +----------------------------------------------------------------------------------------------------------------------------------------- +postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; +postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; +postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; /** Statements (rusage) **/ ----------------------------------- @@ -2287,11 +2306,12 @@ postgres postgres 3 3 0.300000 /** Plans **/ ----------------------------------- -Query ID Plan ID User Database Calls Total Time Time/Call Block Read Time Block Write Time ------------------------------------------------------------------------------------------------------------------------------------------ - 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms -1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms -1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms + Block Block Temp Block Temp Block + Query ID Plan ID User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time +------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms 0.000 ms 0.000 ms + 1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms + 1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms /** Wait Sampling **/ ----------------------------------- @@ -2327,11 +2347,12 @@ OID Database Schema Function Calls Tot /** Statements **/ ----------------------------------- -User Database Calls Total Time Time/Call Block Read Time Block Write Time Query ------------------------------------------------------------------------------------------------------------------------- -postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; -postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; -postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; + Block Block Temp Block Temp Block +User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time Query +----------------------------------------------------------------------------------------------------------------------------------------- +postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; +postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; +postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; /** Statements (rusage) **/ ----------------------------------- @@ -2343,11 +2364,12 @@ postgres postgres 3 3 0.300000 /** Plans **/ ----------------------------------- -Query ID Plan ID User Database Calls Total Time Time/Call Block Read Time Block Write Time ------------------------------------------------------------------------------------------------------------------------------------------ - 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms -1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms -1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms + Block Block Temp Block Temp Block + Query ID Plan ID User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time +------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms 0.000 ms 0.000 ms + 1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms + 1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms /** Wait Sampling **/ ----------------------------------- @@ -2383,11 +2405,12 @@ OID Database Schema Function Calls Tot /** Statements **/ ----------------------------------- -User Database Calls Total Time Time/Call Block Read Time Block Write Time Query ------------------------------------------------------------------------------------------------------------------------- -postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; -postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; -postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; + Block Block Temp Block Temp Block +User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time Query +----------------------------------------------------------------------------------------------------------------------------------------- +postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; +postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; +postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; /** Statements (rusage) **/ ----------------------------------- @@ -2399,11 +2422,12 @@ postgres postgres 3 3 0.300000 /** Plans **/ ----------------------------------- -Query ID Plan ID User Database Calls Total Time Time/Call Block Read Time Block Write Time ------------------------------------------------------------------------------------------------------------------------------------------ - 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms -1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms -1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms + Block Block Temp Block Temp Block + Query ID Plan ID User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time +------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms 0.000 ms 0.000 ms + 1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms + 1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms /** Wait Sampling **/ ----------------------------------- @@ -3545,44 +3569,46 @@ Write Duration Maximum : 49.193 sec /** Vacuum Basic Statistics (Average) **/ ----------------------------------- -Table Count Index Scanned Index Skipped Removed Rows Remain Rows Remain Dead Scan Pages Scan Pages Ratio Removed Lp Dead Lp Index Scans Duration Duration(Max) Cancels --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 3 0 50000.000 55532.333 0.000 424.667 50.027 66574.667 0.000 1.000 0.067 s 0.080 s 0 -template1.pg_catalog.pg_statistic 1 1 0 116.000 406.000 0.000 16.000 57.140 212.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.pg_catalog.pg_statistic 1 1 0 56.000 441.000 0.000 17.000 56.670 206.000 0.000 1.000 0.000 s 0.000 s 0 -si_db_01.pg_catalog.pg_statistic 1 1 0 52.000 411.000 0.000 16.000 55.170 204.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.statsrepo.column_20210618 1 0 1 0.000 1069.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 0 -postgres.public.pgbench_branches 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 2 -postgres.public.pgbench_accounts 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 1 + | | #Index| #Index| Removed| Remain| Remain| Missed Dead| Table Scan| Dead Tuple| Removed| Dead| #Index| |Duration| | Removable| New Rel| New Rel +Table | #Count| Scanned| Skipped| Rows| Rows| Dead| Rows| Pages| Pages(Ratio)| Pages(Ratio)| Lp| Lp| Scans|Duration| (Max)|#Cancels| CutOff Xid| Frozen Xid| Min Mxid +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +template1.pg_catalog.pg_statistic 1 1 0 129.0 404.0 0.0 0.0 0.0 28.0(100.0%) 16.0( 57.1%) 178.0 0.0 1.0 0.0 s 0.0 s 0 811 811 +postgres.public.pgbench_branches 1 0 1 113.0 10.0 0.0 0.0 0.0 1.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 2 11768 11744 +postgres.pg_catalog.pg_statistic 2 2 0 41.5 499.0 0.0 0.0 0.0 30.5(100.0%) 16.0( 52.8%) 158.0 0.0 2.0 0.0 s 0.0 s 0 27293 +postgres.pg_catalog.pg_attribute 1 1 0 2.0 4678.0 0.0 0.0 0.0 51.0( 58.0%) 3.0( 3.4%) 88.0 0.0 1.0 0.0 s 0.0 s 0 825 800 +postgres.public.pgbench_accounts 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0( 0.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 1 +postgres.public.pgbench_history 1 0 1 0.0 10920.0 0.0 0.0 0.0 70.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 845 +postgres.statsrepo.column_20221219 1 0 1 0.0 1225.0 0.0 0.0 0.0 22.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 810 /** Vacuum I/O Statistics (Average) **/ ----------------------------------- Table Page Hit Page Miss Page Dirty Read Rate Write Rate Read Duration Write Duration --------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3239.667 1.000 1.000 0.093 MiB/s 0.093 MiB/s 0.013 s 0.000 s -postgres.pg_catalog.pg_statistic 110.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -template1.pg_catalog.pg_statistic 105.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -si_db_01.pg_catalog.pg_statistic 90.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -postgres.statsrepo.column_20210618 82.000 2.000 3.000 34.041 MiB/s 51.062 MiB/s 0.018 s 0.000 s +postgres.pg_catalog.pg_attribute 145.000 14.000 0.000 122.070 MiB/s 0.000 MiB/s 0.118 s 0.000 s +postgres.public.pgbench_history 145.000 2.000 4.000 8.351 MiB/s 16.702 MiB/s 0.012 s 0.000 s +postgres.pg_catalog.pg_statistic 105.500 1.500 3.000 9.405 MiB/s 18.810 MiB/s 0.043 s 0.000 s +postgres.statsrepo.column_20221219 76.000 2.000 3.000 54.825 MiB/s 82.237 MiB/s 0.012 s 0.000 s +template1.pg_catalog.pg_statistic 63.000 39.000 37.000 64.910 MiB/s 61.581 MiB/s 0.214 s 0.000 s +postgres.public.pgbench_branches 22.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s /** Vacuum WAL Statistics (Average) **/ ----------------------------------- Table Count WAL Records WAL FPIs WAL bytes ----------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 2055.000 0.000 612186.000 -template1.pg_catalog.pg_statistic 1 94.000 0.000 11401.000 -postgres.statsrepo.column_20210618 1 20.000 1.000 9506.000 -postgres.pg_catalog.pg_statistic 1 62.000 0.000 4690.000 -si_db_01.pg_catalog.pg_statistic 1 62.000 0.000 4665.000 +template1.pg_catalog.pg_statistic 1 92.000 34.000 185836.000 +postgres.pg_catalog.pg_statistic 2 57.500 7.500 37157.500 +postgres.public.pgbench_history 1 71.000 1.000 12515.000 +postgres.pg_catalog.pg_attribute 1 44.000 1.000 11696.000 +postgres.statsrepo.column_20221219 1 23.000 1.000 9683.000 +postgres.public.pgbench_branches 1 3.000 0.000 608.000 /** Vacuum Index Statistics (Average) **/ ----------------------------------- Table Index Count Page Total Page New Del Page Curr Del Page Reuse --------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_1 3 275.000 0.000 0.000 0.000 -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_2 3 256.667 96.333 201.000 104.667 -postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 -si_db_01.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnam_index 1 22.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnum_index 1 15.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 2 5.000 0.000 0.000 0.000 template1.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 /** Analyze Statistics **/ @@ -3606,11 +3632,12 @@ OID Database Schema Function Calls Tot /** Statements **/ ----------------------------------- -User Database Calls Total Time Time/Call Block Read Time Block Write Time Query ------------------------------------------------------------------------------------------------------------------------- -postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; -postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; -postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; + Block Block Temp Block Temp Block +User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time Query +----------------------------------------------------------------------------------------------------------------------------------------- +postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; +postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; +postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; /** Statements (rusage) **/ ----------------------------------- @@ -3622,11 +3649,12 @@ postgres postgres 3 3 0.300000 /** Plans **/ ----------------------------------- -Query ID Plan ID User Database Calls Total Time Time/Call Block Read Time Block Write Time ------------------------------------------------------------------------------------------------------------------------------------------ - 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms -1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms -1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms + Block Block Temp Block Temp Block + Query ID Plan ID User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time +------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms 0.000 ms 0.000 ms + 1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms + 1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms /** Wait Sampling **/ ----------------------------------- @@ -4017,44 +4045,46 @@ Write Duration Maximum : 49.193 sec /** Vacuum Basic Statistics (Average) **/ ----------------------------------- -Table Count Index Scanned Index Skipped Removed Rows Remain Rows Remain Dead Scan Pages Scan Pages Ratio Removed Lp Dead Lp Index Scans Duration Duration(Max) Cancels --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 3 0 50000.000 55532.333 0.000 424.667 50.027 66574.667 0.000 1.000 0.067 s 0.080 s 0 -template1.pg_catalog.pg_statistic 1 1 0 116.000 406.000 0.000 16.000 57.140 212.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.pg_catalog.pg_statistic 1 1 0 56.000 441.000 0.000 17.000 56.670 206.000 0.000 1.000 0.000 s 0.000 s 0 -si_db_01.pg_catalog.pg_statistic 1 1 0 52.000 411.000 0.000 16.000 55.170 204.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.statsrepo.column_20210618 1 0 1 0.000 1069.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 0 -postgres.public.pgbench_branches 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 2 -postgres.public.pgbench_accounts 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 1 + | | #Index| #Index| Removed| Remain| Remain| Missed Dead| Table Scan| Dead Tuple| Removed| Dead| #Index| |Duration| | Removable| New Rel| New Rel +Table | #Count| Scanned| Skipped| Rows| Rows| Dead| Rows| Pages| Pages(Ratio)| Pages(Ratio)| Lp| Lp| Scans|Duration| (Max)|#Cancels| CutOff Xid| Frozen Xid| Min Mxid +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +template1.pg_catalog.pg_statistic 1 1 0 129.0 404.0 0.0 0.0 0.0 28.0(100.0%) 16.0( 57.1%) 178.0 0.0 1.0 0.0 s 0.0 s 0 811 811 +postgres.public.pgbench_branches 1 0 1 113.0 10.0 0.0 0.0 0.0 1.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 2 11768 11744 +postgres.pg_catalog.pg_statistic 2 2 0 41.5 499.0 0.0 0.0 0.0 30.5(100.0%) 16.0( 52.8%) 158.0 0.0 2.0 0.0 s 0.0 s 0 27293 +postgres.pg_catalog.pg_attribute 1 1 0 2.0 4678.0 0.0 0.0 0.0 51.0( 58.0%) 3.0( 3.4%) 88.0 0.0 1.0 0.0 s 0.0 s 0 825 800 +postgres.public.pgbench_accounts 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0( 0.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 1 +postgres.public.pgbench_history 1 0 1 0.0 10920.0 0.0 0.0 0.0 70.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 845 +postgres.statsrepo.column_20221219 1 0 1 0.0 1225.0 0.0 0.0 0.0 22.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 810 /** Vacuum I/O Statistics (Average) **/ ----------------------------------- Table Page Hit Page Miss Page Dirty Read Rate Write Rate Read Duration Write Duration --------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3239.667 1.000 1.000 0.093 MiB/s 0.093 MiB/s 0.013 s 0.000 s -postgres.pg_catalog.pg_statistic 110.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -template1.pg_catalog.pg_statistic 105.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -si_db_01.pg_catalog.pg_statistic 90.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -postgres.statsrepo.column_20210618 82.000 2.000 3.000 34.041 MiB/s 51.062 MiB/s 0.018 s 0.000 s +postgres.pg_catalog.pg_attribute 145.000 14.000 0.000 122.070 MiB/s 0.000 MiB/s 0.118 s 0.000 s +postgres.public.pgbench_history 145.000 2.000 4.000 8.351 MiB/s 16.702 MiB/s 0.012 s 0.000 s +postgres.pg_catalog.pg_statistic 105.500 1.500 3.000 9.405 MiB/s 18.810 MiB/s 0.043 s 0.000 s +postgres.statsrepo.column_20221219 76.000 2.000 3.000 54.825 MiB/s 82.237 MiB/s 0.012 s 0.000 s +template1.pg_catalog.pg_statistic 63.000 39.000 37.000 64.910 MiB/s 61.581 MiB/s 0.214 s 0.000 s +postgres.public.pgbench_branches 22.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s /** Vacuum WAL Statistics (Average) **/ ----------------------------------- Table Count WAL Records WAL FPIs WAL bytes ----------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 2055.000 0.000 612186.000 -template1.pg_catalog.pg_statistic 1 94.000 0.000 11401.000 -postgres.statsrepo.column_20210618 1 20.000 1.000 9506.000 -postgres.pg_catalog.pg_statistic 1 62.000 0.000 4690.000 -si_db_01.pg_catalog.pg_statistic 1 62.000 0.000 4665.000 +template1.pg_catalog.pg_statistic 1 92.000 34.000 185836.000 +postgres.pg_catalog.pg_statistic 2 57.500 7.500 37157.500 +postgres.public.pgbench_history 1 71.000 1.000 12515.000 +postgres.pg_catalog.pg_attribute 1 44.000 1.000 11696.000 +postgres.statsrepo.column_20221219 1 23.000 1.000 9683.000 +postgres.public.pgbench_branches 1 3.000 0.000 608.000 /** Vacuum Index Statistics (Average) **/ ----------------------------------- Table Index Count Page Total Page New Del Page Curr Del Page Reuse --------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_1 3 275.000 0.000 0.000 0.000 -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_2 3 256.667 96.333 201.000 104.667 -postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 -si_db_01.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnam_index 1 22.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnum_index 1 15.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 2 5.000 0.000 0.000 0.000 template1.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 /** Analyze Statistics **/ @@ -4078,11 +4108,12 @@ OID Database Schema Function Calls Tot /** Statements **/ ----------------------------------- -User Database Calls Total Time Time/Call Block Read Time Block Write Time Query ------------------------------------------------------------------------------------------------------------------------- -postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; -postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; -postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; + Block Block Temp Block Temp Block +User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time Query +----------------------------------------------------------------------------------------------------------------------------------------- +postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; +postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; +postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; /** Statements (rusage) **/ ----------------------------------- @@ -4094,11 +4125,12 @@ postgres postgres 3 3 0.300000 /** Plans **/ ----------------------------------- -Query ID Plan ID User Database Calls Total Time Time/Call Block Read Time Block Write Time ------------------------------------------------------------------------------------------------------------------------------------------ - 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms -1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms -1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms + Block Block Temp Block Temp Block + Query ID Plan ID User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time +------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms 0.000 ms 0.000 ms + 1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms + 1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms /** Wait Sampling **/ ----------------------------------- @@ -4489,44 +4521,46 @@ Write Duration Maximum : 49.193 sec /** Vacuum Basic Statistics (Average) **/ ----------------------------------- -Table Count Index Scanned Index Skipped Removed Rows Remain Rows Remain Dead Scan Pages Scan Pages Ratio Removed Lp Dead Lp Index Scans Duration Duration(Max) Cancels --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 3 0 50000.000 55532.333 0.000 424.667 50.027 66574.667 0.000 1.000 0.067 s 0.080 s 0 -template1.pg_catalog.pg_statistic 1 1 0 116.000 406.000 0.000 16.000 57.140 212.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.pg_catalog.pg_statistic 1 1 0 56.000 441.000 0.000 17.000 56.670 206.000 0.000 1.000 0.000 s 0.000 s 0 -si_db_01.pg_catalog.pg_statistic 1 1 0 52.000 411.000 0.000 16.000 55.170 204.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.statsrepo.column_20210618 1 0 1 0.000 1069.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 0 -postgres.public.pgbench_branches 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 2 -postgres.public.pgbench_accounts 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 1 + | | #Index| #Index| Removed| Remain| Remain| Missed Dead| Table Scan| Dead Tuple| Removed| Dead| #Index| |Duration| | Removable| New Rel| New Rel +Table | #Count| Scanned| Skipped| Rows| Rows| Dead| Rows| Pages| Pages(Ratio)| Pages(Ratio)| Lp| Lp| Scans|Duration| (Max)|#Cancels| CutOff Xid| Frozen Xid| Min Mxid +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +template1.pg_catalog.pg_statistic 1 1 0 129.0 404.0 0.0 0.0 0.0 28.0(100.0%) 16.0( 57.1%) 178.0 0.0 1.0 0.0 s 0.0 s 0 811 811 +postgres.public.pgbench_branches 1 0 1 113.0 10.0 0.0 0.0 0.0 1.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 2 11768 11744 +postgres.pg_catalog.pg_statistic 2 2 0 41.5 499.0 0.0 0.0 0.0 30.5(100.0%) 16.0( 52.8%) 158.0 0.0 2.0 0.0 s 0.0 s 0 27293 +postgres.pg_catalog.pg_attribute 1 1 0 2.0 4678.0 0.0 0.0 0.0 51.0( 58.0%) 3.0( 3.4%) 88.0 0.0 1.0 0.0 s 0.0 s 0 825 800 +postgres.public.pgbench_accounts 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0( 0.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 1 +postgres.public.pgbench_history 1 0 1 0.0 10920.0 0.0 0.0 0.0 70.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 845 +postgres.statsrepo.column_20221219 1 0 1 0.0 1225.0 0.0 0.0 0.0 22.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 810 /** Vacuum I/O Statistics (Average) **/ ----------------------------------- Table Page Hit Page Miss Page Dirty Read Rate Write Rate Read Duration Write Duration --------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3239.667 1.000 1.000 0.093 MiB/s 0.093 MiB/s 0.013 s 0.000 s -postgres.pg_catalog.pg_statistic 110.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -template1.pg_catalog.pg_statistic 105.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -si_db_01.pg_catalog.pg_statistic 90.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -postgres.statsrepo.column_20210618 82.000 2.000 3.000 34.041 MiB/s 51.062 MiB/s 0.018 s 0.000 s +postgres.pg_catalog.pg_attribute 145.000 14.000 0.000 122.070 MiB/s 0.000 MiB/s 0.118 s 0.000 s +postgres.public.pgbench_history 145.000 2.000 4.000 8.351 MiB/s 16.702 MiB/s 0.012 s 0.000 s +postgres.pg_catalog.pg_statistic 105.500 1.500 3.000 9.405 MiB/s 18.810 MiB/s 0.043 s 0.000 s +postgres.statsrepo.column_20221219 76.000 2.000 3.000 54.825 MiB/s 82.237 MiB/s 0.012 s 0.000 s +template1.pg_catalog.pg_statistic 63.000 39.000 37.000 64.910 MiB/s 61.581 MiB/s 0.214 s 0.000 s +postgres.public.pgbench_branches 22.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s /** Vacuum WAL Statistics (Average) **/ ----------------------------------- Table Count WAL Records WAL FPIs WAL bytes ----------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 2055.000 0.000 612186.000 -template1.pg_catalog.pg_statistic 1 94.000 0.000 11401.000 -postgres.statsrepo.column_20210618 1 20.000 1.000 9506.000 -postgres.pg_catalog.pg_statistic 1 62.000 0.000 4690.000 -si_db_01.pg_catalog.pg_statistic 1 62.000 0.000 4665.000 +template1.pg_catalog.pg_statistic 1 92.000 34.000 185836.000 +postgres.pg_catalog.pg_statistic 2 57.500 7.500 37157.500 +postgres.public.pgbench_history 1 71.000 1.000 12515.000 +postgres.pg_catalog.pg_attribute 1 44.000 1.000 11696.000 +postgres.statsrepo.column_20221219 1 23.000 1.000 9683.000 +postgres.public.pgbench_branches 1 3.000 0.000 608.000 /** Vacuum Index Statistics (Average) **/ ----------------------------------- Table Index Count Page Total Page New Del Page Curr Del Page Reuse --------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_1 3 275.000 0.000 0.000 0.000 -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_2 3 256.667 96.333 201.000 104.667 -postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 -si_db_01.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnam_index 1 22.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnum_index 1 15.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 2 5.000 0.000 0.000 0.000 template1.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 /** Analyze Statistics **/ @@ -4550,11 +4584,12 @@ OID Database Schema Function Calls Tot /** Statements **/ ----------------------------------- -User Database Calls Total Time Time/Call Block Read Time Block Write Time Query ------------------------------------------------------------------------------------------------------------------------- -postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; -postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; -postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; + Block Block Temp Block Temp Block +User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time Query +----------------------------------------------------------------------------------------------------------------------------------------- +postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; +postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; +postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; /** Statements (rusage) **/ ----------------------------------- @@ -4566,11 +4601,12 @@ postgres postgres 3 3 0.300000 /** Plans **/ ----------------------------------- -Query ID Plan ID User Database Calls Total Time Time/Call Block Read Time Block Write Time ------------------------------------------------------------------------------------------------------------------------------------------ - 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms -1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms -1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms + Block Block Temp Block Temp Block + Query ID Plan ID User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time +------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms 0.000 ms 0.000 ms + 1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms + 1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms /** Wait Sampling **/ ----------------------------------- @@ -4961,44 +4997,46 @@ Write Duration Maximum : 49.193 sec /** Vacuum Basic Statistics (Average) **/ ----------------------------------- -Table Count Index Scanned Index Skipped Removed Rows Remain Rows Remain Dead Scan Pages Scan Pages Ratio Removed Lp Dead Lp Index Scans Duration Duration(Max) Cancels --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 3 0 50000.000 55532.333 0.000 424.667 50.027 66574.667 0.000 1.000 0.067 s 0.080 s 0 -template1.pg_catalog.pg_statistic 1 1 0 116.000 406.000 0.000 16.000 57.140 212.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.pg_catalog.pg_statistic 1 1 0 56.000 441.000 0.000 17.000 56.670 206.000 0.000 1.000 0.000 s 0.000 s 0 -si_db_01.pg_catalog.pg_statistic 1 1 0 52.000 411.000 0.000 16.000 55.170 204.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.statsrepo.column_20210618 1 0 1 0.000 1069.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 0 -postgres.public.pgbench_branches 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 2 -postgres.public.pgbench_accounts 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 1 + | | #Index| #Index| Removed| Remain| Remain| Missed Dead| Table Scan| Dead Tuple| Removed| Dead| #Index| |Duration| | Removable| New Rel| New Rel +Table | #Count| Scanned| Skipped| Rows| Rows| Dead| Rows| Pages| Pages(Ratio)| Pages(Ratio)| Lp| Lp| Scans|Duration| (Max)|#Cancels| CutOff Xid| Frozen Xid| Min Mxid +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +template1.pg_catalog.pg_statistic 1 1 0 129.0 404.0 0.0 0.0 0.0 28.0(100.0%) 16.0( 57.1%) 178.0 0.0 1.0 0.0 s 0.0 s 0 811 811 +postgres.public.pgbench_branches 1 0 1 113.0 10.0 0.0 0.0 0.0 1.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 2 11768 11744 +postgres.pg_catalog.pg_statistic 2 2 0 41.5 499.0 0.0 0.0 0.0 30.5(100.0%) 16.0( 52.8%) 158.0 0.0 2.0 0.0 s 0.0 s 0 27293 +postgres.pg_catalog.pg_attribute 1 1 0 2.0 4678.0 0.0 0.0 0.0 51.0( 58.0%) 3.0( 3.4%) 88.0 0.0 1.0 0.0 s 0.0 s 0 825 800 +postgres.public.pgbench_accounts 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0( 0.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 1 +postgres.public.pgbench_history 1 0 1 0.0 10920.0 0.0 0.0 0.0 70.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 845 +postgres.statsrepo.column_20221219 1 0 1 0.0 1225.0 0.0 0.0 0.0 22.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 810 /** Vacuum I/O Statistics (Average) **/ ----------------------------------- Table Page Hit Page Miss Page Dirty Read Rate Write Rate Read Duration Write Duration --------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3239.667 1.000 1.000 0.093 MiB/s 0.093 MiB/s 0.013 s 0.000 s -postgres.pg_catalog.pg_statistic 110.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -template1.pg_catalog.pg_statistic 105.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -si_db_01.pg_catalog.pg_statistic 90.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -postgres.statsrepo.column_20210618 82.000 2.000 3.000 34.041 MiB/s 51.062 MiB/s 0.018 s 0.000 s +postgres.pg_catalog.pg_attribute 145.000 14.000 0.000 122.070 MiB/s 0.000 MiB/s 0.118 s 0.000 s +postgres.public.pgbench_history 145.000 2.000 4.000 8.351 MiB/s 16.702 MiB/s 0.012 s 0.000 s +postgres.pg_catalog.pg_statistic 105.500 1.500 3.000 9.405 MiB/s 18.810 MiB/s 0.043 s 0.000 s +postgres.statsrepo.column_20221219 76.000 2.000 3.000 54.825 MiB/s 82.237 MiB/s 0.012 s 0.000 s +template1.pg_catalog.pg_statistic 63.000 39.000 37.000 64.910 MiB/s 61.581 MiB/s 0.214 s 0.000 s +postgres.public.pgbench_branches 22.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s /** Vacuum WAL Statistics (Average) **/ ----------------------------------- Table Count WAL Records WAL FPIs WAL bytes ----------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 2055.000 0.000 612186.000 -template1.pg_catalog.pg_statistic 1 94.000 0.000 11401.000 -postgres.statsrepo.column_20210618 1 20.000 1.000 9506.000 -postgres.pg_catalog.pg_statistic 1 62.000 0.000 4690.000 -si_db_01.pg_catalog.pg_statistic 1 62.000 0.000 4665.000 +template1.pg_catalog.pg_statistic 1 92.000 34.000 185836.000 +postgres.pg_catalog.pg_statistic 2 57.500 7.500 37157.500 +postgres.public.pgbench_history 1 71.000 1.000 12515.000 +postgres.pg_catalog.pg_attribute 1 44.000 1.000 11696.000 +postgres.statsrepo.column_20221219 1 23.000 1.000 9683.000 +postgres.public.pgbench_branches 1 3.000 0.000 608.000 /** Vacuum Index Statistics (Average) **/ ----------------------------------- Table Index Count Page Total Page New Del Page Curr Del Page Reuse --------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_1 3 275.000 0.000 0.000 0.000 -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_2 3 256.667 96.333 201.000 104.667 -postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 -si_db_01.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnam_index 1 22.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnum_index 1 15.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 2 5.000 0.000 0.000 0.000 template1.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 /** Analyze Statistics **/ @@ -5022,11 +5060,12 @@ OID Database Schema Function Calls Tot /** Statements **/ ----------------------------------- -User Database Calls Total Time Time/Call Block Read Time Block Write Time Query ------------------------------------------------------------------------------------------------------------------------- -postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; -postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; -postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; + Block Block Temp Block Temp Block +User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time Query +----------------------------------------------------------------------------------------------------------------------------------------- +postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; +postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; +postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; /** Statements (rusage) **/ ----------------------------------- @@ -5038,11 +5077,12 @@ postgres postgres 3 3 0.300000 /** Plans **/ ----------------------------------- -Query ID Plan ID User Database Calls Total Time Time/Call Block Read Time Block Write Time ------------------------------------------------------------------------------------------------------------------------------------------ - 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms -1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms -1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms + Block Block Temp Block Temp Block + Query ID Plan ID User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time +------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms 0.000 ms 0.000 ms + 1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms + 1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms /** Wait Sampling **/ ----------------------------------- @@ -5433,44 +5473,46 @@ Write Duration Maximum : 49.193 sec /** Vacuum Basic Statistics (Average) **/ ----------------------------------- -Table Count Index Scanned Index Skipped Removed Rows Remain Rows Remain Dead Scan Pages Scan Pages Ratio Removed Lp Dead Lp Index Scans Duration Duration(Max) Cancels --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 3 0 50000.000 55532.333 0.000 424.667 50.027 66574.667 0.000 1.000 0.067 s 0.080 s 0 -template1.pg_catalog.pg_statistic 1 1 0 116.000 406.000 0.000 16.000 57.140 212.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.pg_catalog.pg_statistic 1 1 0 56.000 441.000 0.000 17.000 56.670 206.000 0.000 1.000 0.000 s 0.000 s 0 -si_db_01.pg_catalog.pg_statistic 1 1 0 52.000 411.000 0.000 16.000 55.170 204.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.statsrepo.column_20210618 1 0 1 0.000 1069.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 0 -postgres.public.pgbench_branches 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 2 -postgres.public.pgbench_accounts 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 1 + | | #Index| #Index| Removed| Remain| Remain| Missed Dead| Table Scan| Dead Tuple| Removed| Dead| #Index| |Duration| | Removable| New Rel| New Rel +Table | #Count| Scanned| Skipped| Rows| Rows| Dead| Rows| Pages| Pages(Ratio)| Pages(Ratio)| Lp| Lp| Scans|Duration| (Max)|#Cancels| CutOff Xid| Frozen Xid| Min Mxid +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +template1.pg_catalog.pg_statistic 1 1 0 129.0 404.0 0.0 0.0 0.0 28.0(100.0%) 16.0( 57.1%) 178.0 0.0 1.0 0.0 s 0.0 s 0 811 811 +postgres.public.pgbench_branches 1 0 1 113.0 10.0 0.0 0.0 0.0 1.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 2 11768 11744 +postgres.pg_catalog.pg_statistic 2 2 0 41.5 499.0 0.0 0.0 0.0 30.5(100.0%) 16.0( 52.8%) 158.0 0.0 2.0 0.0 s 0.0 s 0 27293 +postgres.pg_catalog.pg_attribute 1 1 0 2.0 4678.0 0.0 0.0 0.0 51.0( 58.0%) 3.0( 3.4%) 88.0 0.0 1.0 0.0 s 0.0 s 0 825 800 +postgres.public.pgbench_accounts 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0( 0.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 1 +postgres.public.pgbench_history 1 0 1 0.0 10920.0 0.0 0.0 0.0 70.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 845 +postgres.statsrepo.column_20221219 1 0 1 0.0 1225.0 0.0 0.0 0.0 22.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 810 /** Vacuum I/O Statistics (Average) **/ ----------------------------------- Table Page Hit Page Miss Page Dirty Read Rate Write Rate Read Duration Write Duration --------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3239.667 1.000 1.000 0.093 MiB/s 0.093 MiB/s 0.013 s 0.000 s -postgres.pg_catalog.pg_statistic 110.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -template1.pg_catalog.pg_statistic 105.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -si_db_01.pg_catalog.pg_statistic 90.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -postgres.statsrepo.column_20210618 82.000 2.000 3.000 34.041 MiB/s 51.062 MiB/s 0.018 s 0.000 s +postgres.pg_catalog.pg_attribute 145.000 14.000 0.000 122.070 MiB/s 0.000 MiB/s 0.118 s 0.000 s +postgres.public.pgbench_history 145.000 2.000 4.000 8.351 MiB/s 16.702 MiB/s 0.012 s 0.000 s +postgres.pg_catalog.pg_statistic 105.500 1.500 3.000 9.405 MiB/s 18.810 MiB/s 0.043 s 0.000 s +postgres.statsrepo.column_20221219 76.000 2.000 3.000 54.825 MiB/s 82.237 MiB/s 0.012 s 0.000 s +template1.pg_catalog.pg_statistic 63.000 39.000 37.000 64.910 MiB/s 61.581 MiB/s 0.214 s 0.000 s +postgres.public.pgbench_branches 22.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s /** Vacuum WAL Statistics (Average) **/ ----------------------------------- Table Count WAL Records WAL FPIs WAL bytes ----------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 2055.000 0.000 612186.000 -template1.pg_catalog.pg_statistic 1 94.000 0.000 11401.000 -postgres.statsrepo.column_20210618 1 20.000 1.000 9506.000 -postgres.pg_catalog.pg_statistic 1 62.000 0.000 4690.000 -si_db_01.pg_catalog.pg_statistic 1 62.000 0.000 4665.000 +template1.pg_catalog.pg_statistic 1 92.000 34.000 185836.000 +postgres.pg_catalog.pg_statistic 2 57.500 7.500 37157.500 +postgres.public.pgbench_history 1 71.000 1.000 12515.000 +postgres.pg_catalog.pg_attribute 1 44.000 1.000 11696.000 +postgres.statsrepo.column_20221219 1 23.000 1.000 9683.000 +postgres.public.pgbench_branches 1 3.000 0.000 608.000 /** Vacuum Index Statistics (Average) **/ ----------------------------------- Table Index Count Page Total Page New Del Page Curr Del Page Reuse --------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_1 3 275.000 0.000 0.000 0.000 -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_2 3 256.667 96.333 201.000 104.667 -postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 -si_db_01.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnam_index 1 22.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnum_index 1 15.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 2 5.000 0.000 0.000 0.000 template1.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 /** Analyze Statistics **/ @@ -5494,11 +5536,12 @@ OID Database Schema Function Calls Tot /** Statements **/ ----------------------------------- -User Database Calls Total Time Time/Call Block Read Time Block Write Time Query ------------------------------------------------------------------------------------------------------------------------- -postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; -postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; -postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; + Block Block Temp Block Temp Block +User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time Query +----------------------------------------------------------------------------------------------------------------------------------------- +postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; +postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; +postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; /** Statements (rusage) **/ ----------------------------------- @@ -5510,11 +5553,12 @@ postgres postgres 3 3 0.300000 /** Plans **/ ----------------------------------- -Query ID Plan ID User Database Calls Total Time Time/Call Block Read Time Block Write Time ------------------------------------------------------------------------------------------------------------------------------------------ - 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms -1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms -1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms + Block Block Temp Block Temp Block + Query ID Plan ID User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time +------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms 0.000 ms 0.000 ms + 1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms + 1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms /** Wait Sampling **/ ----------------------------------- @@ -5905,44 +5949,46 @@ Write Duration Maximum : 49.193 sec /** Vacuum Basic Statistics (Average) **/ ----------------------------------- -Table Count Index Scanned Index Skipped Removed Rows Remain Rows Remain Dead Scan Pages Scan Pages Ratio Removed Lp Dead Lp Index Scans Duration Duration(Max) Cancels --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 3 0 50000.000 55532.333 0.000 424.667 50.027 66574.667 0.000 1.000 0.067 s 0.080 s 0 -template1.pg_catalog.pg_statistic 1 1 0 116.000 406.000 0.000 16.000 57.140 212.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.pg_catalog.pg_statistic 1 1 0 56.000 441.000 0.000 17.000 56.670 206.000 0.000 1.000 0.000 s 0.000 s 0 -si_db_01.pg_catalog.pg_statistic 1 1 0 52.000 411.000 0.000 16.000 55.170 204.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.statsrepo.column_20210618 1 0 1 0.000 1069.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 0 -postgres.public.pgbench_branches 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 2 -postgres.public.pgbench_accounts 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 1 + | | #Index| #Index| Removed| Remain| Remain| Missed Dead| Table Scan| Dead Tuple| Removed| Dead| #Index| |Duration| | Removable| New Rel| New Rel +Table | #Count| Scanned| Skipped| Rows| Rows| Dead| Rows| Pages| Pages(Ratio)| Pages(Ratio)| Lp| Lp| Scans|Duration| (Max)|#Cancels| CutOff Xid| Frozen Xid| Min Mxid +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +template1.pg_catalog.pg_statistic 1 1 0 129.0 404.0 0.0 0.0 0.0 28.0(100.0%) 16.0( 57.1%) 178.0 0.0 1.0 0.0 s 0.0 s 0 811 811 +postgres.public.pgbench_branches 1 0 1 113.0 10.0 0.0 0.0 0.0 1.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 2 11768 11744 +postgres.pg_catalog.pg_statistic 2 2 0 41.5 499.0 0.0 0.0 0.0 30.5(100.0%) 16.0( 52.8%) 158.0 0.0 2.0 0.0 s 0.0 s 0 27293 +postgres.pg_catalog.pg_attribute 1 1 0 2.0 4678.0 0.0 0.0 0.0 51.0( 58.0%) 3.0( 3.4%) 88.0 0.0 1.0 0.0 s 0.0 s 0 825 800 +postgres.public.pgbench_accounts 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0( 0.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 1 +postgres.public.pgbench_history 1 0 1 0.0 10920.0 0.0 0.0 0.0 70.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 845 +postgres.statsrepo.column_20221219 1 0 1 0.0 1225.0 0.0 0.0 0.0 22.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 810 /** Vacuum I/O Statistics (Average) **/ ----------------------------------- Table Page Hit Page Miss Page Dirty Read Rate Write Rate Read Duration Write Duration --------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3239.667 1.000 1.000 0.093 MiB/s 0.093 MiB/s 0.013 s 0.000 s -postgres.pg_catalog.pg_statistic 110.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -template1.pg_catalog.pg_statistic 105.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -si_db_01.pg_catalog.pg_statistic 90.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -postgres.statsrepo.column_20210618 82.000 2.000 3.000 34.041 MiB/s 51.062 MiB/s 0.018 s 0.000 s +postgres.pg_catalog.pg_attribute 145.000 14.000 0.000 122.070 MiB/s 0.000 MiB/s 0.118 s 0.000 s +postgres.public.pgbench_history 145.000 2.000 4.000 8.351 MiB/s 16.702 MiB/s 0.012 s 0.000 s +postgres.pg_catalog.pg_statistic 105.500 1.500 3.000 9.405 MiB/s 18.810 MiB/s 0.043 s 0.000 s +postgres.statsrepo.column_20221219 76.000 2.000 3.000 54.825 MiB/s 82.237 MiB/s 0.012 s 0.000 s +template1.pg_catalog.pg_statistic 63.000 39.000 37.000 64.910 MiB/s 61.581 MiB/s 0.214 s 0.000 s +postgres.public.pgbench_branches 22.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s /** Vacuum WAL Statistics (Average) **/ ----------------------------------- Table Count WAL Records WAL FPIs WAL bytes ----------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 2055.000 0.000 612186.000 -template1.pg_catalog.pg_statistic 1 94.000 0.000 11401.000 -postgres.statsrepo.column_20210618 1 20.000 1.000 9506.000 -postgres.pg_catalog.pg_statistic 1 62.000 0.000 4690.000 -si_db_01.pg_catalog.pg_statistic 1 62.000 0.000 4665.000 +template1.pg_catalog.pg_statistic 1 92.000 34.000 185836.000 +postgres.pg_catalog.pg_statistic 2 57.500 7.500 37157.500 +postgres.public.pgbench_history 1 71.000 1.000 12515.000 +postgres.pg_catalog.pg_attribute 1 44.000 1.000 11696.000 +postgres.statsrepo.column_20221219 1 23.000 1.000 9683.000 +postgres.public.pgbench_branches 1 3.000 0.000 608.000 /** Vacuum Index Statistics (Average) **/ ----------------------------------- Table Index Count Page Total Page New Del Page Curr Del Page Reuse --------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_1 3 275.000 0.000 0.000 0.000 -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_2 3 256.667 96.333 201.000 104.667 -postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 -si_db_01.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnam_index 1 22.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnum_index 1 15.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 2 5.000 0.000 0.000 0.000 template1.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 /** Analyze Statistics **/ @@ -5966,11 +6012,12 @@ OID Database Schema Function Calls Tot /** Statements **/ ----------------------------------- -User Database Calls Total Time Time/Call Block Read Time Block Write Time Query ------------------------------------------------------------------------------------------------------------------------- -postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; -postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; -postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; + Block Block Temp Block Temp Block +User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time Query +----------------------------------------------------------------------------------------------------------------------------------------- +postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; +postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; +postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; /** Statements (rusage) **/ ----------------------------------- @@ -5982,11 +6029,12 @@ postgres postgres 3 3 0.300000 /** Plans **/ ----------------------------------- -Query ID Plan ID User Database Calls Total Time Time/Call Block Read Time Block Write Time ------------------------------------------------------------------------------------------------------------------------------------------ - 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms -1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms -1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms + Block Block Temp Block Temp Block + Query ID Plan ID User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time +------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms 0.000 ms 0.000 ms + 1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms + 1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms /** Wait Sampling **/ ----------------------------------- @@ -6574,44 +6622,46 @@ Write Duration Maximum : 49.193 sec /** Vacuum Basic Statistics (Average) **/ ----------------------------------- -Table Count Index Scanned Index Skipped Removed Rows Remain Rows Remain Dead Scan Pages Scan Pages Ratio Removed Lp Dead Lp Index Scans Duration Duration(Max) Cancels --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 3 0 50000.000 55532.333 0.000 424.667 50.027 66574.667 0.000 1.000 0.067 s 0.080 s 0 -template1.pg_catalog.pg_statistic 1 1 0 116.000 406.000 0.000 16.000 57.140 212.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.pg_catalog.pg_statistic 1 1 0 56.000 441.000 0.000 17.000 56.670 206.000 0.000 1.000 0.000 s 0.000 s 0 -si_db_01.pg_catalog.pg_statistic 1 1 0 52.000 411.000 0.000 16.000 55.170 204.000 0.000 1.000 0.000 s 0.000 s 0 -postgres.statsrepo.column_20210618 1 0 1 0.000 1069.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 0 -postgres.public.pgbench_branches 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 2 -postgres.public.pgbench_accounts 0 0 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 s 0.000 s 1 + | | #Index| #Index| Removed| Remain| Remain| Missed Dead| Table Scan| Dead Tuple| Removed| Dead| #Index| |Duration| | Removable| New Rel| New Rel +Table | #Count| Scanned| Skipped| Rows| Rows| Dead| Rows| Pages| Pages(Ratio)| Pages(Ratio)| Lp| Lp| Scans|Duration| (Max)|#Cancels| CutOff Xid| Frozen Xid| Min Mxid +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +template1.pg_catalog.pg_statistic 1 1 0 129.0 404.0 0.0 0.0 0.0 28.0(100.0%) 16.0( 57.1%) 178.0 0.0 1.0 0.0 s 0.0 s 0 811 811 +postgres.public.pgbench_branches 1 0 1 113.0 10.0 0.0 0.0 0.0 1.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 2 11768 11744 +postgres.pg_catalog.pg_statistic 2 2 0 41.5 499.0 0.0 0.0 0.0 30.5(100.0%) 16.0( 52.8%) 158.0 0.0 2.0 0.0 s 0.0 s 0 27293 +postgres.pg_catalog.pg_attribute 1 1 0 2.0 4678.0 0.0 0.0 0.0 51.0( 58.0%) 3.0( 3.4%) 88.0 0.0 1.0 0.0 s 0.0 s 0 825 800 +postgres.public.pgbench_accounts 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0( 0.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 1 +postgres.public.pgbench_history 1 0 1 0.0 10920.0 0.0 0.0 0.0 70.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 845 +postgres.statsrepo.column_20221219 1 0 1 0.0 1225.0 0.0 0.0 0.0 22.0(100.0%) 0.0( 0.0%) 0.0 0.0 0.0 0.0 s 0.0 s 0 11768 810 /** Vacuum I/O Statistics (Average) **/ ----------------------------------- Table Page Hit Page Miss Page Dirty Read Rate Write Rate Read Duration Write Duration --------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3239.667 1.000 1.000 0.093 MiB/s 0.093 MiB/s 0.013 s 0.000 s -postgres.pg_catalog.pg_statistic 110.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -template1.pg_catalog.pg_statistic 105.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -si_db_01.pg_catalog.pg_statistic 90.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s -postgres.statsrepo.column_20210618 82.000 2.000 3.000 34.041 MiB/s 51.062 MiB/s 0.018 s 0.000 s +postgres.pg_catalog.pg_attribute 145.000 14.000 0.000 122.070 MiB/s 0.000 MiB/s 0.118 s 0.000 s +postgres.public.pgbench_history 145.000 2.000 4.000 8.351 MiB/s 16.702 MiB/s 0.012 s 0.000 s +postgres.pg_catalog.pg_statistic 105.500 1.500 3.000 9.405 MiB/s 18.810 MiB/s 0.043 s 0.000 s +postgres.statsrepo.column_20221219 76.000 2.000 3.000 54.825 MiB/s 82.237 MiB/s 0.012 s 0.000 s +template1.pg_catalog.pg_statistic 63.000 39.000 37.000 64.910 MiB/s 61.581 MiB/s 0.214 s 0.000 s +postgres.public.pgbench_branches 22.000 0.000 0.000 0.000 MiB/s 0.000 MiB/s 0.000 s 0.000 s /** Vacuum WAL Statistics (Average) **/ ----------------------------------- Table Count WAL Records WAL FPIs WAL bytes ----------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 3 2055.000 0.000 612186.000 -template1.pg_catalog.pg_statistic 1 94.000 0.000 11401.000 -postgres.statsrepo.column_20210618 1 20.000 1.000 9506.000 -postgres.pg_catalog.pg_statistic 1 62.000 0.000 4690.000 -si_db_01.pg_catalog.pg_statistic 1 62.000 0.000 4665.000 +template1.pg_catalog.pg_statistic 1 92.000 34.000 185836.000 +postgres.pg_catalog.pg_statistic 2 57.500 7.500 37157.500 +postgres.public.pgbench_history 1 71.000 1.000 12515.000 +postgres.pg_catalog.pg_attribute 1 44.000 1.000 11696.000 +postgres.statsrepo.column_20221219 1 23.000 1.000 9683.000 +postgres.public.pgbench_branches 1 3.000 0.000 608.000 /** Vacuum Index Statistics (Average) **/ ----------------------------------- Table Index Count Page Total Page New Del Page Curr Del Page Reuse --------------------------------------------------------------------------------------------------------------------------------------------------- -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_1 3 275.000 0.000 0.000 0.000 -si_db_01.si_sc_01.si_tbl_01 si_tbl_01_idx_2 3 256.667 96.333 201.000 104.667 -postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 -si_db_01.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnam_index 1 22.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_attribute pg_attribute_relid_attnum_index 1 15.000 0.000 0.000 0.000 +postgres.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 2 5.000 0.000 0.000 0.000 template1.pg_catalog.pg_statistic pg_statistic_relid_att_inh_index 1 5.000 0.000 0.000 0.000 /** Analyze Statistics **/ @@ -6635,11 +6685,12 @@ OID Database Schema Function Calls Tot /** Statements **/ ----------------------------------- -User Database Calls Total Time Time/Call Block Read Time Block Write Time Query ------------------------------------------------------------------------------------------------------------------------- -postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; -postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; -postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; + Block Block Temp Block Temp Block +User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time Query +----------------------------------------------------------------------------------------------------------------------------------------- +postgres postgres 66463 331.375 sec 0.005 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_branches SET bbalance = bbalance + ? WHERE bid = ?; +postgres postgres 66463 85.370 sec 0.001 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_tellers SET tbalance = tbalance + ? WHERE tid = ?; +postgres postgres 66463 5.554 sec 0.000 sec 0.026 ms 0.000 ms 0.000 ms 0.000 ms UPDATE pgbench_accounts SET abalance = abalance + ? WHERE aid = ?; /** Statements (rusage) **/ ----------------------------------- @@ -6651,11 +6702,12 @@ postgres postgres 3 3 0.300000 /** Plans **/ ----------------------------------- -Query ID Plan ID User Database Calls Total Time Time/Call Block Read Time Block Write Time ------------------------------------------------------------------------------------------------------------------------------------------ - 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms -1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms -1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms + Block Block Temp Block Temp Block + Query ID Plan ID User Database Calls Total Time Time/Call Read Time Write Time Read Time Write Time +------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 847103580 1970669142 postgres postgres 1074 0.094 sec 0.000 sec 0.213 ms 0.000 ms 0.000 ms 0.000 ms + 1067368138 4132319976 postgres postgres 1073 0.061 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms + 1899262118 487339097 postgres postgres 1074 0.048 sec 0.000 sec 0.000 ms 0.000 ms 0.000 ms 0.000 ms /** Wait Sampling **/ ----------------------------------- diff --git a/test/expected/function-snapshot.out b/test/expected/function-snapshot.out index ae6961e..0ca9ad3 100644 --- a/test/expected/function-snapshot.out +++ b/test/expected/function-snapshot.out @@ -105,6 +105,7 @@ vacuumdb: vacuuming database "template1" /**--- Role information ---**/ snapid | role | userid --------+---------------------------+-------- + 1 | pg_checkpoint | xxx 1 | pg_database_owner | xxx 1 | pg_execute_server_program | xxx 1 | pg_monitor | xxx @@ -118,7 +119,7 @@ vacuumdb: vacuuming database "template1" 1 | pg_write_server_files | xxx 1 | postgres | xxx 1 | user01 | xxx -(13 rows) +(14 rows) /**--- GUC setting ---**/ snapid | name | setting | unit | source @@ -186,15 +187,15 @@ DROP TABLE /**--- Statistics of query ---**/ /***-- pg_stat_statements is not installed --***/ - snapid | dbid | userid | queryid | query | plans | total_plan_time | calls | total_exec_time | rows | shared_blks_hit | shared_blks_read | shared_blks_dirtied | shared_blks_written | local_blks_hit | local_blks_read | local_blks_dirtied | local_blks_written | temp_blks_read | temp_blks_written | blk_read_time | blk_write_time ---------+------+--------+---------+-------+-------+-----------------+-------+-----------------+------+-----------------+------------------+---------------------+---------------------+----------------+-----------------+--------------------+--------------------+----------------+-------------------+---------------+---------------- + snapid | dbid | userid | queryid | query | plans | total_plan_time | calls | total_exec_time | rows | shared_blks_hit | shared_blks_read | shared_blks_dirtied | shared_blks_written | local_blks_hit | local_blks_read | local_blks_dirtied | local_blks_written | temp_blks_read | temp_blks_written | blk_read_time | blk_write_time | temp_blk_read_time | temp_blk_write_time +--------+------+--------+---------+-------+-------+-----------------+-------+-----------------+------+-----------------+------------------+---------------------+---------------------+----------------+-----------------+--------------------+--------------------+----------------+-------------------+---------------+----------------+--------------------+--------------------- (0 rows) /***-- pg_stat_statements is installed --***/ CREATE EXTENSION - snapid | database | role | query | plans | total_plan_time | calls | total_exec_time | rows | shared_blks_hit | shared_blks_read | shared_blks_dirtied | shared_blks_written | local_blks_hit | local_blks_read | local_blks_dirtied | local_blks_written | temp_blks_read | temp_blks_written | blk_read_time | blk_write_time ---------+----------+--------+--------------------------------+-------+-----------------+-------+-----------------+------+-----------------+------------------+---------------------+---------------------+----------------+-----------------+--------------------+--------------------+----------------+-------------------+---------------+---------------- - 8 | db01 | user01 | SELECT schema01.func01($1, $2) | 0 | xxx | 200 | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx + snapid | database | role | query | plans | total_plan_time | calls | total_exec_time | rows | shared_blks_hit | shared_blks_read | shared_blks_dirtied | shared_blks_written | local_blks_hit | local_blks_read | local_blks_dirtied | local_blks_written | temp_blks_read | temp_blks_written | blk_read_time | blk_write_time | temp_blk_read_time | temp_blk_write_time +--------+----------+--------+--------------------------------+-------+-----------------+-------+-----------------+------+-----------------+------------------+---------------------+---------------------+----------------+-----------------+--------------------+--------------------+----------------+-------------------+---------------+----------------+--------------------+--------------------- + 8 | db01 | user01 | SELECT schema01.func01($1, $2) | 0 | xxx | 200 | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx (1 row) /**--- Statistics of BGWriter ---**/ diff --git a/test/script/function-snapshot.sh b/test/script/function-snapshot.sh index 452a499..2e877b2 100755 --- a/test/script/function-snapshot.sh +++ b/test/script/function-snapshot.sh @@ -594,7 +594,9 @@ SELECT CASE WHEN s.temp_blks_read IS NOT NULL THEN 'xxx' END AS temp_blks_read, CASE WHEN s.temp_blks_written IS NOT NULL THEN 'xxx' END AS temp_blks_written, CASE WHEN s.blk_read_time IS NOT NULL THEN 'xxx' END AS blk_read_time, - CASE WHEN s.blk_write_time IS NOT NULL THEN 'xxx' END AS blk_write_time + CASE WHEN s.blk_write_time IS NOT NULL THEN 'xxx' END AS blk_write_time, + CASE WHEN s.temp_blk_read_time IS NOT NULL THEN 'xxx' END AS temp_blk_read_time, + CASE WHEN s.temp_blk_write_time IS NOT NULL THEN 'xxx' END AS temp_blk_write_time FROM statsrepo.statement s, statsrepo.database d, diff --git a/test/script/inputdata/statsrepo-inputdata.sql b/test/script/inputdata/statsrepo-inputdata.sql index 9e049ff..0823808 100644 --- a/test/script/inputdata/statsrepo-inputdata.sql +++ b/test/script/inputdata/statsrepo-inputdata.sql @@ -70,14 +70,13 @@ $$ -- -- Data for Name: autovacuum; Type: TABLE DATA; Schema: statsrepo; Owner: postgres -- - INSERT INTO statsrepo.autovacuum VALUES ($1, '2012-11-01 00:00:30+09', 'postgres', 'pg_catalog', 'pg_statistic', 1, 0, 30, 0, 56, 441, 0, 110, 0, 0, 0, 0, 62, 0, 4690, 0, 2, 17, 56.67, 206, '{pg_statistic_relid_att_inh_index}', '{5}', '{0}', '{0}', '{0}', NULL, NULL); - INSERT INTO statsrepo.autovacuum VALUES ($1, '2012-11-01 00:00:30+09', 'template1', 'pg_catalog', 'pg_statistic', 1, 0, 28, 0, 116, 406, 0, 105, 0, 0, 0, 0, 94, 0, 11401, 0, 2, 16, 57.14, 212, '{pg_statistic_relid_att_inh_index}', '{5}', '{0}', '{0}', '{0}', NULL, NULL); - INSERT INTO statsrepo.autovacuum VALUES ($1, '2012-11-01 00:00:30+09', 'si_db_01', 'si_sc_01', 'si_tbl_01', 1, 0, 637, 0, 50000, 50000, 0, 3076, 0, 0, 0, 0, 1965, 0, 652893, 0.06, 2, 319, 50.08, 50000, '{si_tbl_01_idx_1,si_tbl_01_idx_2}', '{275,180}', '{0,137}', '{0,137}', '{0,0}', NULL, NULL); - INSERT INTO statsrepo.autovacuum VALUES ($1, '2012-11-01 00:01:30+09', 'si_db_01', 'pg_catalog', 'pg_statistic', 1, 0, 29, 0, 52, 411, 0, 90, 0, 0, 0, 0, 62, 0, 4665, 0, 2, 16, 55.17, 204, '{pg_statistic_relid_att_inh_index}', '{5}', '{0}', '{0}', '{0}', NULL, NULL); - INSERT INTO statsrepo.autovacuum VALUES ($1, '2012-11-01 00:01:30+09', 'postgres', 'statsrepo', 'column_20210618', 0, 0, 19, 0, 0, 1069, 0, 82, 2, 3, 34.041, 51.062, 20, 1, 9506, 0, 1, 0, 0, 0, '{}', '{}', '{}', '{}', '{}', 0.018, NULL); - INSERT INTO statsrepo.autovacuum VALUES ($1, '2012-11-01 00:02:30+09', 'si_db_01', 'si_sc_01', 'si_tbl_01', 1, 0, 955, 0, 50000, 50000, 0, 3968, 3, 3, 0.28, 0.28, 2532, 0, 679403, 0.08, 2, 637, 66.7, 99834, '{si_tbl_01_idx_1,si_tbl_01_idx_2}', '{275,295}', '{0,114}', '{0,251}', '{0,137}', 0.039, NULL); - INSERT INTO statsrepo.autovacuum VALUES ($1, '2012-11-01 00:02:30+09', 'si_db_01', 'si_sc_01', 'si_tbl_01', 1, 0, 955, 317, 50000, 66597, 0, 2675, 0, 0, 0, 0, 1668, 0, 504262, 0.06, 2, 318, 33.3, 49890, '{si_tbl_01_idx_1,si_tbl_01_idx_2}', '{275,295}', '{0,38}', '{0,215}', '{0,177}', NULL, NULL); - + INSERT INTO statsrepo.autovacuum VALUES ($1, '2012-11-01 00:00:30+09', 'template1', 'pg_catalog', 'pg_statistic', 1, 0, 28, 28, 100, 129, 404, 0, '811', 64.91, 61.581, 63, 39, 37, 92, 34, 185836, 0, NULL, NULL, '811', NULL, 2, 16, 57.14, 178, '{pg_statistic_relid_att_inh_index}', '{5}', '{0}', '{0}', '{0}', 0.214, 0); + INSERT INTO statsrepo.autovacuum VALUES ($1, '2012-11-01 00:00:30+09', 'postgres', 'pg_catalog', 'pg_statistic', 1, 0, 28, 28, 100, 62, 415, 0, '824', 18.81, 37.62, 99, 3, 6, 58, 15, 70274, 0, NULL, NULL, NULL, NULL, 2, 16, 57.14, 178, '{pg_statistic_relid_att_inh_index}', '{5}', '{0}', '{0}', '{0}', 0.086, 0); + INSERT INTO statsrepo.autovacuum VALUES ($1, '2012-11-01 00:00:30+09', 'postgres', 'pg_catalog', 'pg_attribute', 1, 0, 88, 51, 57.95, 2, 4678, 0, '825', 122.07, 0, 145, 14, 0, 44, 1, 11696, 0, NULL, NULL, '800', NULL, 2, 3, 3.41, 88, '{pg_attribute_relid_attnam_index,pg_attribute_relid_attnum_index}', '{22,15}', '{0,0}', '{0,0}', '{0,0}', 0.118, 0); + INSERT INTO statsrepo.autovacuum VALUES ($1, '2012-11-01 00:01:30+09', 'postgres', 'public', 'pgbench_branches', 0, 0, 1, 1, 100, 113, 10, 0, '11768', 0, 0, 22, 0, 0, 3, 0, 608, 0, NULL, NULL, '11744', NULL, 4, 0, 0, 0, '{}', '{}', '{}', '{}', '{}', 0, 0); + INSERT INTO statsrepo.autovacuum VALUES ($1, '2012-11-01 00:01:30+09', 'postgres', 'statsrepo', 'column_20221219', 0, 0, 22, 22, 100, 0, 1225, 0, '11768', 54.825, 82.237, 76, 2, 3, 23, 1, 9683, 0, NULL, NULL, '810', NULL, 4, 0, 0, 0, '{}', '{}', '{}', '{}', '{}', 0.012, 0); + INSERT INTO statsrepo.autovacuum VALUES ($1, '2012-11-01 00:02:30+09', 'postgres', 'public', 'pgbench_history', 0, 0, 70, 70, 100, 0, 10920, 0, '11768', 8.351, 16.702, 145, 2, 4, 71, 1, 12515, 0, NULL, NULL, '845', NULL, 4, 0, 0, 0, '{}', '{}', '{}', '{}', '{}', 0.012, 0); + INSERT INTO statsrepo.autovacuum VALUES ($1, '2012-11-01 00:02:30+09', 'postgres', 'pg_catalog', 'pg_statistic', 1, 0, 33, 33, 100, 21, 583, 0, '27293', 0, 0, 112, 0, 0, 57, 0, 4041, 0, NULL, NULL, NULL, NULL, 2, 16, 48.48, 138, '{pg_statistic_relid_att_inh_index}', '{5}', '{0}', '{0}', '{0}', 0, 0); -- -- Data for Name: bgwriter; Type: TABLE DATA; Schema: statsrepo; Owner: postgres @@ -285,18 +284,18 @@ $$ -- -- Data for Name: plan; Type: TABLE DATA; Schema: statsrepo; Owner: postgres -- - INSERT INTO statsrepo.plan VALUES ($6, 12870, 10, 847103580, 1970669142, '{"p":{"t":"b","!":"u","n":"pgbench_accounts","a":"pgbench_accounts","1":0.29,"2":8.31,"3":1,"4":103,"l":[{"t":"i","h":"m","d":"f","i":"pgbench_accounts_pkey","n":"pgbench_accounts","a":"pgbench_accounts","1":0.29,"2":8.31,"3":1,"4":103,"8":"(aid = 46216)"}]}}', 823, 0.110259, 823, 6339, 275, 274, 0, 0, 0, 0, 0, 0, 0, 5.157, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:00:00+09'); - INSERT INTO statsrepo.plan VALUES ($6, 12870, 10, 1067368138, 4132319976, '{"p":{"t":"b","!":"u","n":"pgbench_branches","a":"pgbench_branches","1":0.00,"2":1.01,"3":1,"4":106,"l":[{"t":"h","h":"m","n":"pgbench_branches","a":"pgbench_branches","1":0.00,"2":1.01,"3":1,"4":106,"5":"(bid = 1)"}]}}', 823, 0.0374639999999999, 823, 1647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:00:00+09'); - INSERT INTO statsrepo.plan VALUES ($6, 12870, 10, 1899262118, 487339097, '{"p":{"t":"b","!":"u","n":"pgbench_tellers","a":"pgbench_tellers","1":0.00,"2":1.13,"3":1,"4":106,"l":[{"t":"h","h":"m","n":"pgbench_tellers","a":"pgbench_tellers","1":0.00,"2":1.13,"3":1,"4":106,"5":"(tid = 2)"}]}}', 823, 0.0412209999999999, 823, 1647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:00:00+09'); - INSERT INTO statsrepo.plan VALUES ($6 + 1, 12870, 10, 847103580, 1970669142, '{"p":{"t":"b","!":"u","n":"pgbench_accounts","a":"pgbench_accounts","1":0.29,"2":8.31,"3":1,"4":103,"l":[{"t":"i","h":"m","d":"f","i":"pgbench_accounts_pkey","n":"pgbench_accounts","a":"pgbench_accounts","1":0.29,"2":8.31,"3":1,"4":103,"8":"(aid = 60907)"}]}}', 1279, 0.153424, 1279, 9383, 288, 287, 0, 0, 0, 0, 0, 0, 0, 5.331, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:01:00+09'); - INSERT INTO statsrepo.plan VALUES ($6 + 1, 12870, 10, 1067368138, 4132319976, '{"p":{"t":"b","!":"u","n":"pgbench_branches","a":"pgbench_branches","1":0.00,"2":1.01,"3":1,"4":106,"l":[{"t":"h","h":"m","n":"pgbench_branches","a":"pgbench_branches","1":0.00,"2":1.01,"3":1,"4":106,"5":"(bid = 1)"}]}}', 1279, 0.0580179999999998, 1279, 2559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:01:00+09'); - INSERT INTO statsrepo.plan VALUES ($6 + 1, 12870, 10, 1899262118, 487339097, '{"p":{"t":"b","!":"u","n":"pgbench_tellers","a":"pgbench_tellers","1":0.00,"2":1.13,"3":1,"4":106,"l":[{"t":"h","h":"m","n":"pgbench_tellers","a":"pgbench_tellers","1":0.00,"2":1.13,"3":1,"4":106,"5":"(tid = 5)"}]}}', 1279, 0.0619969999999996, 1279, 2559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:01:00+09'); - INSERT INTO statsrepo.plan VALUES ($6 + 2, 12870, 10, 847103580, 1970669142, '{"p":{"t":"b","!":"u","n":"pgbench_accounts","a":"pgbench_accounts","1":0.29,"2":8.31,"3":1,"4":103,"l":[{"t":"i","h":"m","d":"f","i":"pgbench_accounts_pkey","n":"pgbench_accounts","a":"pgbench_accounts","1":0.29,"2":8.31,"3":1,"4":103,"8":"(aid = 65971)"}]}}', 1529, 0.177099, 1529, 10992, 292, 291, 0, 0, 0, 0, 0, 0, 0, 5.37, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:02:00+09'); - INSERT INTO statsrepo.plan VALUES ($6 + 2, 12870, 10, 1067368138, 4132319976, '{"p":{"t":"b","!":"u","n":"pgbench_branches","a":"pgbench_branches","1":0.00,"2":1.01,"3":1,"4":106,"l":[{"t":"h","h":"m","n":"pgbench_branches","a":"pgbench_branches","1":0.00,"2":1.01,"3":1,"4":106,"5":"(bid = 1)"}]}}', 1529, 0.0735179999999998, 1529, 3059, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:02:00+09'); - INSERT INTO statsrepo.plan VALUES ($6 + 2, 12870, 10, 1899262118, 487339097, '{"p":{"t":"b","!":"u","n":"pgbench_tellers","a":"pgbench_tellers","1":0.00,"2":1.13,"3":1,"4":106,"l":[{"t":"h","h":"m","n":"pgbench_tellers","a":"pgbench_tellers","1":0.00,"2":1.13,"3":1,"4":106,"5":"(tid = 1)"}]}}', 1529, 0.0729339999999998, 1529, 3059, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:02:00+09'); - INSERT INTO statsrepo.plan VALUES ($6 + 3, 12870, 10, 847103580, 1970669142, '{"p":{"t":"b","!":"u","n":"pgbench_accounts","a":"pgbench_accounts","1":0.29,"2":8.31,"3":1,"4":103,"l":[{"t":"i","h":"m","d":"f","i":"pgbench_accounts_pkey","n":"pgbench_accounts","a":"pgbench_accounts","1":0.29,"2":8.31,"3":1,"4":103,"8":"(aid = 9747)"}]}}', 1897, 0.204121, 1897, 13129, 294, 293, 0, 0, 0, 0, 0, 0, 0, 5.37, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:03:00+09'); - INSERT INTO statsrepo.plan VALUES ($6 + 3, 12870, 10, 1067368138, 4132319976, '{"p":{"t":"b","!":"u","n":"pgbench_branches","a":"pgbench_branches","1":0.00,"2":1.01,"3":1,"4":106,"l":[{"t":"h","h":"m","n":"pgbench_branches","a":"pgbench_branches","1":0.00,"2":1.01,"3":1,"4":106,"5":"(bid = 1)"}]}}', 1896, 0.0980150000000002, 1896, 3793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:03:00+09'); - INSERT INTO statsrepo.plan VALUES ($6 + 3, 12870, 10, 1899262118, 487339097, '{"p":{"t":"b","!":"u","n":"pgbench_tellers","a":"pgbench_tellers","1":0.00,"2":1.13,"3":1,"4":106,"l":[{"t":"h","h":"m","n":"pgbench_tellers","a":"pgbench_tellers","1":0.00,"2":1.13,"3":1,"4":106,"5":"(tid = 6)"}]}}', 1897, 0.0897130000000002, 1897, 3795, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:03:00+09'); + INSERT INTO statsrepo.plan VALUES ($6, 12870, 10, 847103580, 1970669142, '{"p":{"t":"b","!":"u","n":"pgbench_accounts","a":"pgbench_accounts","1":0.29,"2":8.31,"3":1,"4":103,"l":[{"t":"i","h":"m","d":"f","i":"pgbench_accounts_pkey","n":"pgbench_accounts","a":"pgbench_accounts","1":0.29,"2":8.31,"3":1,"4":103,"8":"(aid = 46216)"}]}}', 823, 0.110259, 823, 6339, 275, 274, 0, 0, 0, 0, 0, 0, 0, 5.157, 0, 0, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:00:00+09'); + INSERT INTO statsrepo.plan VALUES ($6, 12870, 10, 1067368138, 4132319976, '{"p":{"t":"b","!":"u","n":"pgbench_branches","a":"pgbench_branches","1":0.00,"2":1.01,"3":1,"4":106,"l":[{"t":"h","h":"m","n":"pgbench_branches","a":"pgbench_branches","1":0.00,"2":1.01,"3":1,"4":106,"5":"(bid = 1)"}]}}', 823, 0.0374639999999999, 823, 1647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:00:00+09'); + INSERT INTO statsrepo.plan VALUES ($6, 12870, 10, 1899262118, 487339097, '{"p":{"t":"b","!":"u","n":"pgbench_tellers","a":"pgbench_tellers","1":0.00,"2":1.13,"3":1,"4":106,"l":[{"t":"h","h":"m","n":"pgbench_tellers","a":"pgbench_tellers","1":0.00,"2":1.13,"3":1,"4":106,"5":"(tid = 2)"}]}}', 823, 0.0412209999999999, 823, 1647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:00:00+09'); + INSERT INTO statsrepo.plan VALUES ($6 + 1, 12870, 10, 847103580, 1970669142, '{"p":{"t":"b","!":"u","n":"pgbench_accounts","a":"pgbench_accounts","1":0.29,"2":8.31,"3":1,"4":103,"l":[{"t":"i","h":"m","d":"f","i":"pgbench_accounts_pkey","n":"pgbench_accounts","a":"pgbench_accounts","1":0.29,"2":8.31,"3":1,"4":103,"8":"(aid = 60907)"}]}}', 1279, 0.153424, 1279, 9383, 288, 287, 0, 0, 0, 0, 0, 0, 0, 5.331, 0, 0, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:01:00+09'); + INSERT INTO statsrepo.plan VALUES ($6 + 1, 12870, 10, 1067368138, 4132319976, '{"p":{"t":"b","!":"u","n":"pgbench_branches","a":"pgbench_branches","1":0.00,"2":1.01,"3":1,"4":106,"l":[{"t":"h","h":"m","n":"pgbench_branches","a":"pgbench_branches","1":0.00,"2":1.01,"3":1,"4":106,"5":"(bid = 1)"}]}}', 1279, 0.0580179999999998, 1279, 2559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:01:00+09'); + INSERT INTO statsrepo.plan VALUES ($6 + 1, 12870, 10, 1899262118, 487339097, '{"p":{"t":"b","!":"u","n":"pgbench_tellers","a":"pgbench_tellers","1":0.00,"2":1.13,"3":1,"4":106,"l":[{"t":"h","h":"m","n":"pgbench_tellers","a":"pgbench_tellers","1":0.00,"2":1.13,"3":1,"4":106,"5":"(tid = 5)"}]}}', 1279, 0.0619969999999996, 1279, 2559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:01:00+09'); + INSERT INTO statsrepo.plan VALUES ($6 + 2, 12870, 10, 847103580, 1970669142, '{"p":{"t":"b","!":"u","n":"pgbench_accounts","a":"pgbench_accounts","1":0.29,"2":8.31,"3":1,"4":103,"l":[{"t":"i","h":"m","d":"f","i":"pgbench_accounts_pkey","n":"pgbench_accounts","a":"pgbench_accounts","1":0.29,"2":8.31,"3":1,"4":103,"8":"(aid = 65971)"}]}}', 1529, 0.177099, 1529, 10992, 292, 291, 0, 0, 0, 0, 0, 0, 0, 5.37, 0, 0, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:02:00+09'); + INSERT INTO statsrepo.plan VALUES ($6 + 2, 12870, 10, 1067368138, 4132319976, '{"p":{"t":"b","!":"u","n":"pgbench_branches","a":"pgbench_branches","1":0.00,"2":1.01,"3":1,"4":106,"l":[{"t":"h","h":"m","n":"pgbench_branches","a":"pgbench_branches","1":0.00,"2":1.01,"3":1,"4":106,"5":"(bid = 1)"}]}}', 1529, 0.0735179999999998, 1529, 3059, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:02:00+09'); + INSERT INTO statsrepo.plan VALUES ($6 + 2, 12870, 10, 1899262118, 487339097, '{"p":{"t":"b","!":"u","n":"pgbench_tellers","a":"pgbench_tellers","1":0.00,"2":1.13,"3":1,"4":106,"l":[{"t":"h","h":"m","n":"pgbench_tellers","a":"pgbench_tellers","1":0.00,"2":1.13,"3":1,"4":106,"5":"(tid = 1)"}]}}', 1529, 0.0729339999999998, 1529, 3059, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:02:00+09'); + INSERT INTO statsrepo.plan VALUES ($6 + 3, 12870, 10, 847103580, 1970669142, '{"p":{"t":"b","!":"u","n":"pgbench_accounts","a":"pgbench_accounts","1":0.29,"2":8.31,"3":1,"4":103,"l":[{"t":"i","h":"m","d":"f","i":"pgbench_accounts_pkey","n":"pgbench_accounts","a":"pgbench_accounts","1":0.29,"2":8.31,"3":1,"4":103,"8":"(aid = 9747)"}]}}', 1897, 0.204121, 1897, 13129, 294, 293, 0, 0, 0, 0, 0, 0, 0, 5.37, 0, 0, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:03:00+09'); + INSERT INTO statsrepo.plan VALUES ($6 + 3, 12870, 10, 1067368138, 4132319976, '{"p":{"t":"b","!":"u","n":"pgbench_branches","a":"pgbench_branches","1":0.00,"2":1.01,"3":1,"4":106,"l":[{"t":"h","h":"m","n":"pgbench_branches","a":"pgbench_branches","1":0.00,"2":1.01,"3":1,"4":106,"5":"(bid = 1)"}]}}', 1896, 0.0980150000000002, 1896, 3793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:03:00+09'); + INSERT INTO statsrepo.plan VALUES ($6 + 3, 12870, 10, 1899262118, 487339097, '{"p":{"t":"b","!":"u","n":"pgbench_tellers","a":"pgbench_tellers","1":0.00,"2":1.13,"3":1,"4":106,"l":[{"t":"h","h":"m","n":"pgbench_tellers","a":"pgbench_tellers","1":0.00,"2":1.13,"3":1,"4":106,"5":"(tid = 6)"}]}}', 1897, 0.0897130000000002, 1897, 3795, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '2012-11-01 00:00:00+09', '2012-11-01 00:03:00+09'); -- -- Data for Name: replication; Type: TABLE DATA; Schema: statsrepo; Owner: postgres