继续文章“
尝试为PostgreSQL创建ASH的类似物 ”。
本文将被考虑并在特定的查询和示例中显示-使用演示历史记录pg_stat_activity可以获得哪些有用的信息。
警告
由于该主题的新颖性和不完整的测试期限,因此该文章可能包含错误。 强烈鼓励和期望批评和评论。
输入数据
查看历史pg_stat_statements
pg_stat_historyCREATE TABLE pg_stat_history ( id SERIAL, snapshot_timestamp timestamp without time zone, database_id integer, dbid oid, userid oid, queryid bigint, query text, calls bigint, total_time double precision, min_time double precision, max_time double precision, mean_time double precision, stddev_time double precision, rows bigint, shared_blks_hit bigint, shared_blks_read bigint, shared_blks_dirtied bigint, shared_blks_written bigint, local_blks_hit bigint, local_blks_read bigint, local_blks_dirtied bigint, local_blks_written bigint, temp_blks_read bigint, temp_blks_written bigint, blk_read_time double precision, blk_write_time double precision, baseline_id integer );
每小时使用dblink到目标数据库填充该表。 该表中最有趣和最有用的列当然是
queryid 。
pg_stat_activity查看历史
archive_pg_stat_activity CREATE TABLE archive_pg_stat_activity ( timepoint timestamp without time zone, datid oid, datname name, pid integer, usesysid oid, usename name, application_name text, client_addr inet, client_hostname text, client_port integer, backend_start timestamp without time zone, xact_start timestamp without time zone, query_start timestamp without time zone, state_change timestamp without time zone, wait_event_type text, wait_event text, state text, backend_xid xid, backend_xmin xid, query text, backend_type text, queryid bigint );
该表是按时钟划分的history_pg_stat_activity表(有关更多详细信息,
请参见pg_stat_statements + pg_stat_activity + loq_query = pg_ash?这是
尝试为PostgreSQL创建ASH类似物的
尝试。)印记
集群CPU时间(系统+客户)
索取 WITH t AS ( SELECT date_trunc('second', timepoint) FROM activity_hist.archive_pg_stat_activity aa WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND ( aa.wait_event_type IS NULL ) AND aa.state = 'active' ) SELECT count(*) INTO cpu_total FROM t ;
例子 CLUSTER CPU TIME (SYSTEM + CLIENTS ) : 28:37:46
集群等待时间
索取 WITH t AS ( SELECT date_trunc('second', timepoint) FROM activity_hist.archive_pg_stat_activity aa WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND ( aa.wait_event_type IS NOT NULL ) AND aa.state = 'active' ) SELECT count(*) INTO cpu_total FROM t ;
例子 CLUSTER WAITINGS TIME : 30:12:49
pg_stat_statements总数
SQL DBTIME-总查询运行时间
索取 dbtime_total = interval '1 millisecond' * pg_total_stat_history_rec.total_time ;
SQL CPU TIME执行查询所花费的CPU时间
索取 WITH t AS ( SELECT date_trunc('second', timepoint) FROM activity_hist.archive_pg_stat_activity aa WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND ( aa.wait_event_type IS NULL ) AND backend_type = 'client backend' AND aa.state = 'active' ) SELECT count(*) INTO cpu_total FROM t ;
SQL等待时间-查询的总等待时间
索取 WITH t AS ( SELECT date_trunc('second', timepoint) FROM activity_hist.archive_pg_stat_activity aa WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND ( aa.wait_event_type IS NOT NULL ) AND aa.state = 'active' AND backend_type = 'client backend' ) SELECT count(*) INTO waiting_total FROM t ;
例子 SQL WAITINGS TIME : 30:04:09
以下查询很简单,并且为了节省空间,省略了实现细节:
例子 | SQL IOTIME : 19:44:50 | SQL READ TIME : 19:44:32 | SQL WRITE TIME : 00:00:17 | | SQL CALLS : 12188248 ------------------------------------------------------------- | SQL SHARED BLOCKS READS : 7997039120 | SQL SHARED BLOCKS HITS : 8868286092 | SQL SHARED BLOCKS HITS/READS % : 110.89 | SQL SHARED BLOCKS DIRTED : 419945 | SQL SHARED BLOCKS WRITTEN : 19857 | | SQL TEMPORARY BLOCKS READS : 7836169 | SQL TEMPORARY BLOCKS WRITTEN : 10683938
我们转到最有趣的部分
等待统计
客户过程中等待时间总计前10位的等待
索取 SELECT wait_event_type , wait_event , get_system_waiting_duration( wait_event_type , wait_event ,pg_stat_history_begin+(current_hour_diff * interval '1 hour') ,pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as duration FROM activity_hist.archive_pg_stat_activity aa WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND backend_type != 'client backend' AND wait_event_type IS NOT NULL GROUP BY wait_event_type, wait_event ORDER BY 3 DESC LIMIT 10
例子 + ------------------------------------------------- -----------------------------------
| 系统过程中等待时间总计前10位的等待
+ ----- + ------------------------------ + ------------ -------- + --------------------
| #| wait_event_type | wait_event | 持续时间
+ ----- + ------------------------------ + ------------ -------- + --------------------
| 1 | 活动| LogicalLauncherMain | 10:43:28
| 2 | 活动| AutoVacuumMain | 10:42:49
| 3 | 活动| WalWriterMain | 10:28:53
| 4 | 活动| CheckpointerMain | 10:23:50
| 5 | 活动| BgWriterMain | 09:11:59
| 6 | 活动| BgWriterHibernate | 01:37:46
| 7 | IO | BufFileWrite | 00:02:35
| 8 | LWLock | buffer_mapping | 00:01:54
| 9 | IO | DataFileRead | 00:01:23
| 10 | IO | WALWrite | 00:00:59
+ ----- + ------------------------------ + ------------ -------- + --------------------
客户过程中等待时间总计前10位的等待
索取 SELECT wait_event_type , wait_event , get_clients_waiting_duration( wait_event_type , wait_event , pg_stat_history_begin+(current_hour_diff * interval '1 hour') , pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as duration FROM activity_hist.archive_pg_stat_activity aa WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND backend_type = 'client backend' AND wait_event_type IS NOT NULL GROUP BY wait_event_type, wait_event ORDER BY 3 DESC LIMIT 10
例子 + ----- + ------------------------------ + ------------ -------- + -------------------- + ----------
| #| wait_event_type | wait_event | 持续时间 %dbtime
+ ----- + ------------------------------ + ------------ -------- + -------------------- + ----------
| 1 | 锁| transactionid | 08:16:47 | 6.05
| 2 | IO | DataFileRead | 06:13:41 | 4.55
| 3 | 超时| PgSleep | 02:53:21 | 2.11
| 4 | LWLock | buffer_mapping | 00:40:42 | 0.5
| 5 | LWLock | buffer_io | 00:17:17 | 0.21
| 6 | IO | BufFileWrite | 00:01:34 | 0.02
| 7 | 锁| 元组| 00:01:32 | 0.02
| 8 | 客户| ClientRead | 00:01:19 | 0.02
| 9 | IO | BufFileRead | 00:00:37 | 0.01
| 10 | LWLock | buffer_content | 00:00:08 | 0
+ ----- + ------------------------------ + ------------ -------- + -------------------- + ----------
系统过程中等待时间的等待类型
索取 SELECT wait_event_type , get_system_waiting_type_duration( wait_event_type , pg_stat_history_begin+(current_hour_diff * interval '1 hour') , pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as duration FROM activity_hist.archive_pg_stat_activity aa WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND backend_type != 'client backend' AND wait_event_type IS NOT NULL GROUP BY wait_event_type ORDER BY 2 DESC
例子 + ----- + ------------------------------ + ------------ --------
| #| wait_event_type | 持续时间
+ ----- + ------------------------------ + ------------ --------
| 1 | 活动| 53:08:45
| 2 | IO | 00:06:24
| 3 | LWLock | 00:03:02
+ ----- + ------------------------------ + ------------ --------
针对客户过程的总等待时间的等待类型
索取 SELECT wait_event_type , get_clients_waiting_type_duration( wait_event_type , pg_stat_history_begin+(current_hour_diff * interval '1 hour') , pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as duration FROM activity_hist.archive_pg_stat_activity aa WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND backend_type = 'client backend' AND wait_event_type IS NOT NULL GROUP BY wait_event_type ORDER BY 2 DESC
例子 + ----- + ------------------------------ + ------------ -------- + --------------------
| #| wait_event_type | 持续时间 %dbtime
+ ----- + ------------------------------ + ------------ -------- + --------------------
| 1 | 锁| 08:18:19 | 6.07
| 2 | IO | 06:16:01 | 4.58
| 3 | 超时| 02:53:21 | 2.11
| 4 | LWLock | 00:58:12 | 0.71
| 5 | 客户| 00:01:19 | 0.02
| 6 | IPC | 00:00:04 | 0
+ ----- + ------------------------------ + ------------ -------- + --------------------
对系统过程和单个请求的期望持续时间。
等待系统过程
索取 SELECT backend_type , datname , wait_event_type , wait_event , get_backend_type_waiting_duration( backend_type , wait_event_type , wait_event , pg_stat_history_begin+(current_hour_diff * interval '1 hour') , pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as duration FROM activity_hist.archive_pg_stat_activity aa WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND backend_type != 'client backend' AND wait_event_type IS NOT NULL GROUP BY backend_type , datname , wait_event_type , wait_event ORDER BY 5 DESC
例子 + ----- + ----------------------------- + ---------- +- ------------------ + ---------------------- + -------- ------------
| #| backend_type | dbname | wait_event_type | wait_event | 持续时间
+ ----- + ----------------------------- + ---------- +- ------------------ + ---------------------- + -------- ------------
| 1 | 逻辑复制启动器| | 活动| LogicalLauncherMain | 10:43:28
| 2 | 自动真空发射器| | 活动| AutoVacuumMain | 10:42:49
| 3 | walwriter | | 活动| WalWriterMain | 10:28:53
| 4 | 检查点| | 活动| CheckpointerMain | 10:23:50
| 5 | 背景作家| | 活动| BgWriterMain | 09:11:59
| 6 | 背景作家| | 活动| BgWriterHibernate | 01:37:46
| 7 | 平行工人| tdb1 | IO | BufFileWrite | 00:02:35
| 8 | 平行工人| tdb1 | LWLock | buffer_mapping | 00:01:41
| 9 | 平行工人| tdb1 | IO | DataFileRead | 00:01:22
| 10 | 平行工人| tdb1 | IO | BufFileRead | 00:00:59
| 11 | walwriter | | IO | WALWrite | 00:00:57
| 12 | 平行工人| tdb1 | LWLock | buffer_io | 00:00:47
| 13 | 真空吸尘器| tdb1 | LWLock | buffer_mapping | 00:00:13
| 14 | 背景作家| | IO | DataFileWrite | 00:00:12
| 15 | 检查点| | IO | DataFileWrite | 00:00:11
| 16 | walwriter | | LWLock | WALWriteLock | 00:00:09
| 17 | 检查点| | LWLock | WALWriteLock | 00:00:06
| 18 | 背景作家| | LWLock | WALWriteLock | 00:00:06
| 19 | walwriter | | IO | WALInitWrite | 00:00:02
| 20 | 真空吸尘器| tdb1 | LWLock | WALWriteLock | 00:00:02
| 21 | walwriter | | IO | WALInitSync | 00:00:02
| 22 | 真空吸尘器| tdb1 | IO | DataFileRead | 00:00:01
| 23 | 检查点| | IO | ControlFileSyncUpdate | 00:00:01
| 24 | 背景作家| | IO | WALWrite | 00:00:01
| 25 | 背景作家| | IO | DataFileFlush | 00:00:01
| 26 | 检查点| | IO | SLRUFlushSync | 00:00:01
| 27 | 真空吸尘器| tdb1 | IO | WALWrite | 00:00:01
| 28 | 检查点| | IO | DataFileSync | 00:00:01
+ ----- + ----------------------------- + ---------- +- ------------------ + ---------------------- + -------- ------------
SQL的等待-通过queryid对单个查询的期望
索取 SELECT queryid , datname , wait_event_type , wait_event , get_query_waiting_duration( queryid , wait_event_type , wait_event , pg_stat_history_begin+(current_hour_diff * interval '1 hour') , pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as duration FROM activity_hist.archive_pg_stat_activity aa WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND backend_type = 'client backend' AND wait_event_type IS NOT NULL AND queryid IS NOT NULL GROUP BY queryid , datname , wait_event_type , wait_event ORDER BY 1 , 5 DESC
例子 + ----- + ------------------------- + ---------- + ------ -------------- + -------------------- + -------------- ------ + --------------------
| #| queryid | dbname | wait_event_type | wait_event | 等待中| 合计
| | | | | | 持续时间 持续时间
+ ----- + ------------------------- + ---------- + ------ -------------- + -------------------- + -------------- ------ + --------------------
| 1 | -8247416849404883188 | tdb1 | 客户| ClientRead | 00:00:02 |
| 2 | -6572922443698419129 | tdb1 | 客户| ClientRead | 00:00:05 |
| 3 | -6572922443698419129 | tdb1 | IO | DataFileRead | 00:00:01 |
| 4 | -5917408132400665328 | tdb1 | 客户| ClientRead | 00:00:04 |
| 5 | -4091009262735781873 | tdb1 | 客户| ClientRead | 00:00:03 |
| 6 | -1473395109729441239 | tdb1 | 客户| ClientRead | 00:00:01 |
| 7 | 28942442626229688 | tdb1 | IO | BufFileWrite | 00:01:34 | 00:46:06
| 8 | 28942442626229688 | tdb1 | LWLock | buffer_mapping | 00:01:05 | 00:46:06
| 9 | 28942442626229688 | tdb1 | IO | DataFileRead | 00:00:44 | 00:46:06
| 10 | 28942442626229688 | tdb1 | IO | BufFileRead | 00:00:37 | 00:46:06
| 11 | 28942442626229688 | tdb1 | LWLock | buffer_io | 00:00:35 | 00:46:06
| 12 | 28942442626229688 | tdb1 | 客户| ClientRead | 00:00:05 | 00:46:06
| 13 | 28942442626229688 | tdb1 | IPC | MessageQueueReceive | 00:00:03 | 00:46:06
| 14 | 28942442626229688 | tdb1 | IPC | BgWorkerShutdown | 00:00:01 | 00:46:06
| 15 | 389015618226997618 | tdb1 | 锁| transactionid | 03:55:09 | 04:14:15
| 16 | 389015618226997618 | tdb1 | IO | DataFileRead | 03:23:09 | 04:14:15
| 17 | 389015618226997618 | tdb1 | LWLock | buffer_mapping | 00:12:09 | 04:14:15
| 18 | 389015618226997618 | tdb1 | LWLock | buffer_io | 00:10:18 | 04:14:15
| 19 | 389015618226997618 | tdb1 | 锁| 元组| 00:00:35 | 04:14:15
| 20 | 389015618226997618 | tdb1 | LWLock | WALWriteLock | 00:00:02 | 04:14:15
| 21 | 389015618226997618 | tdb1 | IO | DataFileWrite | 00:00:01 | 04:14:15
| 22 | 389015618226997618 | tdb1 | LWLock | SyncScanLock | 00:00:01 | 04:14:15
| 23 | 389015618226997618 | tdb1 | 客户| ClientRead | 00:00:01 | 04:14:15
| 24 | 734234407411547467 | tdb1 | 客户| ClientRead | 00:00:11 |
| 25 | 734234407411547467 | tdb1 | LWLock | buffer_mapping | 00:00:05 |
| 26 | 734234407411547467 | tdb1 | IO | DataFileRead | 00:00:02 |
| 27 | 1237430309438971376 | tdb1 | LWLock | buffer_mapping | 00:02:18 | 02:45:40
| 28 | 1237430309438971376 | tdb1 | IO | DataFileRead | 00:00:27 | 02:45:40
| 29 | 1237430309438971376 | tdb1 | 客户| ClientRead | 00:00:02 | 02:45:40
| 30 | 2404820632950544954 | tdb1 | 客户| ClientRead | 00:00:01 |
| 31 | 2515308626622579467 | tdb1 | 客户| ClientRead | 00:00:02 |
| 32 | 4710212362688288619 | tdb1 | LWLock | buffer_mapping | 00:03:08 | 02:18:21
| 33 | 4710212362688288619 | tdb1 | IO | DataFileRead | 00:00:22 | 02:18:21
| 34 | 4710212362688288619 | tdb1 | 客户| ClientRead | 00:00:06 | 02:18:21
| 35 | 4710212362688288619 | tdb1 | LWLock | buffer_io | 00:00:02 | 02:18:21
| 36 | 9150846928388977274 | tdb1 | IO | DataFileRead | 00:01:19 |
| 37 | 9150846928388977274 | tdb1 | LWLock | buffer_mapping | 00:00:34 |
| 38 | 9150846928388977274 | tdb1 | 客户| ClientRead | 00:00:10 |
| 39 | 9150846928388977274 | tdb1 | LWLock | buffer_io | 00:00:01 |
+ ----- + ------------------------- + ---------- + ------ -------------- + -------------------- + -------------- ------ + --------------------
CLIENT SQL STATICTICS-TOP查询
然而,没有给出再次接收的请求,这很琐碎并且节省了空间。
例子 + ------------------------------------------------- -----------------------------------
| CLIENT SQL按经过时间排序
+ -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + --------------------
| 经过时间| 电话| %dbtime | %CPU | IO百分比| dbname | queryid
+ -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + --------------------
| 04:14:15 | 19 | 3.1 | 10.83 | 11.52 | tdb1 | 389015618226997618
| 02:45:40 | 746 | 2.02 | 4.23 | 0.08 | tdb1 | 1237430309438971376
| 02:18:21 | 749 | 1.69 | 3.39 | 0.1 | tdb1 | 4710212362688288619
| 00:46:06 | 375 | 0.56 | 0.94 | 0.41 | tdb1 | 28942442626229688
+ -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + --------------------
| CLIENT SQL按CPU时间排序
+ -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
| cpu时间| 电话| %dbtime | total_time | %CPU | IO百分比| dbname | queryid
+ -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
| 02:59:49 | 19 | 3.1 | 04:14:15 | 10.83 | 11.52 | tdb1 | 389015618226997618
| 01:10:12 | 746 | 2.02 | 02:45:40 | 4.23 | 0.08 | tdb1 | 1237430309438971376
| 00:56:15 | 749 | 1.69 | 02:18:21 | 3.39 | 0.1 | tdb1 | 4710212362688288619
| 00:15:35 | 375 | 0.56 | 00:46:06 | 0.94 | 0.41 | tdb1 | 28942442626229688
+ -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
| 用户I / O等待时间排序的CLIENT SQL
+ -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
| io_wait时间| 电话| %dbtime | total_time | %CPU | IO百分比| dbname | queryid
+ -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
| 03:23:10 | 19 | 3.1 | 04:14:15 | 10.83 | 11.52 | tdb1 | 389015618226997618
| 00:02:54 | 375 | 0.56 | 00:46:06 | 0.94 | 0.41 | tdb1 | 28942442626229688
| 00:00:27 | 746 | 2.02 | 02:45:40 | 4.23 | 0.08 | tdb1 | 1237430309438971376
| 00:00:22 | 749 | 1.69 | 02:18:21 | 3.39 | 0.1 | tdb1 | 4710212362688288619
+ -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
| 共享缓冲区排序的CLIENT SQL读取
+ -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
| 缓冲区读取| 电话| %dbtime | total_time | %CPU | IO百分比| dbname | queryid
+ -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
| 1056388566 | 19 | 3.1 | 04:14:15 | 10.83 | 11.52 | tdb1 | 389015618226997618
| 11709251 | 375 | 0.56 | 00:46:06 | 0.94 | 0.41 | tdb1 | 28942442626229688
| 3439004 | 746 | 2.02 | 02:45:40 | 4.23 | 0.08 | tdb1 | 1237430309438971376
| 3373330 | 749 | 1.69 | 02:18:21 | 3.39 | 0.1 | tdb1 | 4710212362688288619
+ -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
| CLIENT SQL按磁盘读取时间排序
+ -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
| 阅读时间 电话| %dbtime | total_time | %CPU | IO百分比| dbname | queryid
+ -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
| 02:16:30 | 19 | 3.1 | 04:14:15 | 10.83 | 11.52 | tdb1 | 389015618226997618
| 00:04:50 | 375 | 0.56 | 00:46:06 | 0.94 | 0.41 | tdb1 | 28942442626229688
| 00:01:10 | 749 | 1.69 | 02:18:21 | 3.39 | 0.1 | tdb1 | 4710212362688288619
| 00:00:57 | 746 | 2.02 | 02:45:40 | 4.23 | 0.08 | tdb1 | 1237430309438971376
+ -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
| 客户SQL按执行顺序排序
+ -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
| 电话| 行| %dbtime | total_time | %CPU | IO百分比| dbname | queryid
+ -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
| 749 | 749 | 1.69 | 02:18:21 | 3.39 | 0.1 | tdb1 | 4710212362688288619
| 746 | 746 | 2.02 | 02:45:40 | 4.23 | 0.08 | tdb1 | 1237430309438971376
| 375 | 0 | 0.56 | 00:46:06 | 0.94 | 0.41 | tdb1 | 28942442626229688
| 19 | 19 | 3.1 | 04:14:15 | 10.83 | 11.52 | tdb1 | 389015618226997618
+ -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
总结
使用提交的请求和生成的报告,您可以获得更完整的图景,用于分析和解决单个请求以及整个集群整体的性能下降问题。
发展历程
到目前为止,开发计划如下:
- 使用锁定历史记录来补充报告。 请求正在测试中,将很快提交。
- 使用TimescaleDB扩展来存储pg_stat_activity和pg_locks历史记录。
- 在github上准备一个批处理解决方案,以在生产基地上进行大规模部署。
待续...