openGauss 慢 SQL 诊断
openGauss 有一个慢 SQL 诊断特性,数据库会依据配置自动记录慢 SQL 执行过程中的诊断信息,提供表与函数两种查询接口。
相关 GUC 参数
-
log_min_duration_statement
:慢 SQL 执行时间阈值。超过该时间的语句会被识别为慢 SQL 并依据配置记录诊断信息。
-
track_stmt_stat_level
:语句诊断信息的记录级别。可为普通语句与慢 SQL 分别配置,用逗号分隔。 默认值为
OFF,L0
,表示不记录普通语句,以L0
级别记录慢 SQL 语句的诊断信息。
查询诊断信息示例
首先建表,插入足够多的数据:
CREATE TABLE t (v integer);
INSERT INTO t VALUES (generate_series(1, 1E6));
可以打开计时功能,输出每条 SQL 的执行时间:
\timing on
默认的慢 SQL 阈值是 30 分钟,太久了,所以我们简单降低一下:
SET log_min_duration_statement TO '100ms';
于是对之前的表做全表扫描输出,因为结果比较多,可以将输出重定向到 /dev/null
:
\o /dev/null
SELECT * from t;
\o
由于诊断信息的字段很多,一般是先给 gsql
开启 expanded 输出模式:
\pset expanded on
查询所有诊断信息:
SELECT * FROM statement_history;
介绍一些常用字段:
query
:经过脱敏处理的原始语句start_time
:执行开始时间finish_time
:执行结束时间query_plan
:执行计划n_returned_rows
:返回行数
清除诊断信息:
DELETE FROM statement_history;
Thanks for reading! Read other posts?