配置要记录慢查询的时间
#在postgresql.conf中配置全局慢查询日志(毫秒),需要重新reload配置
log_min_duration_statement=10000;
#或者针对数据库(毫秒),执行sql语句,(验证未成功,再找找原因)
alter database xxdbname set log_min_duration_statement=5000;
#重新加载配置
su - postgres
pg_ctl reload
或者
select pg_reload_conf();
#查看慢查询日志配置
show log_min_duration_statement;
构建延迟测试,使用事务并设置sleep(秒数);
begin TRANSACTION;
select pg_sleep(5);
select now() ;
END TRANSACTION;
获取慢日志分析
1.sql实时获取,时间支持ms
select * from pg_stat_activity where state<>'idle' and now()-query_start > interval '1 s' order by query_start ;
select * from pg_stat_activity where state<>'idle' and now()-query_start > interval '500 ms' order by query_start ;
2.通过工具(暂未使用):https://github.com/darold/pgbadger
3.或者直接查询pg日志文件查找:
查看日志存储位置
log_destination = 'csvlog' #开了这个后,下面log_filename指定的log后缀文件将不会有内容,全部在csv文件中
logging_collector = on
log_directory = 'pg_log' #当前目录下的pg_log文件夹
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
下载当前csv文件分析:
可以看出当前执行过5秒的sql;