参数解释
enable_stmt_track
:是否启用Full/Slow SQL特性log_min_duration_statement
:指定慢 SQL 时间阈值instr_unique_sql_count
:当系统中产生的unique SQL条目数量(dbe_perf.statement/dbe_perf.summary_statement统计)大于instr_unique_sql_count时,若开启了unique SQL自动淘汰,则系统会按unique SQL的更新时间由远到近自动淘汰一定比例的条目,使得新产生的unique SQL信息可以继续被统计。若没有开启自动淘汰,则系统产生的新的unique SQL信息将不再被统计。enable_auto_clean_unique_sql
:当系统中产生的unique SQL条目数量大于等于instr_unique_sql_count时,是否启用unique SQL自动淘汰功能。track_stmt_retention_time
:组合参数,控制全量/慢SQL记录的保留时间track_stmt_stat_level
:组合参数,控制语句执行跟踪的级别,全量/慢SQL跟踪级别。参数级别为L1则记录query_plan。track_activity_query_size
:设置用于跟踪每一个活动会话的当前正在执行命令的字节数
1、查看慢SQL内容
查询慢 SQL 视图(需要在 postgres 库执行及用户需要具备 sysadmin 权限或者 monitor admin 权限)
-- 执行命令查看数据库实例中慢 SQL 语句执行信息
select * from dbe_perf.get_global_slow_sql_by_timestamp('2025-02-06 14:00:00', '2025-02-06 15:40:00');
-- 执行命令查看数据库实例中 SQL 语句执行信息
select * from dbe_perf.get_global_full_sql_by_timestamp('2025-02-06 14:00:00', '2025-02-06 15:40:00');
-- 查数据库现有的进程
select pid, now(), now() - query_start as query_duration, query
from pg_stat_activity
where pid != pg_backend_pid() and state != 'idle' order by query_duration desc;
-- 查看当前节点 SQL 语句执行信息
select * from dbe_perf.statement_history order by start_time desc;
-- 备机查慢 SQL
select * from dbe_perf.standby_statement_history(only_slow, start_time, end_time);
select * from dbe_perf.standby_statement_history(false);
-- 查看锁事件列表
-- `track_stmt_stat_level` 级别的值是 L2 时,开始记录语句锁事件的列表。
select unique_query_id, statement_detail_decode(details, 'plaintext', true) from statement_history
where details is not null;
2、慢SQL的传参、执行计划
- 记录SQL传参
gs_guc reload -N all -I all -c "log_statement = all"
- 执行计划
gs_guc reload -N all -I all -c "track_stmt_stat_level='OFF,L1'"
3、慢SQL补齐SQL
-- 设置单语句可以收集的最大的执行事件的大小(byte)。details 记录等待的事件
gs_guc reload -N all -I all -c "track_stmt_details_size = 4096"
-- 设置用于跟踪每一个活动会话的当前正在执行命令的字节数
gs_guc reload -N all -I all -c "track_activity_query_size = 4096"
4、慢SQL自动清理
- track_stmt_retention_time:控制全量/慢SQL记录的保留时间
- enable_auto_clean_unique_sql:启用unique SQL自动淘汰功能。
gs_guc reload -N all -I all -c "track_stmt_retention_time = '3600,604800'"
gs_guc reload -N all -I all -c "enable_auto_clean_unique_sql = on"