合 PG监控插件之pg_stat_statements
Tags: PGPostgreSQL监控插件pg_stat_statements
1、什么是pg_stat_statements?
是pg的一个扩展插件,通常用于统计数据库的资源开销,分析TOP SQL 。
对于pg数据库来说,性能调优并不仅仅意味着正确调整postgresql.conf或者内核参数,还意味着我们需要找到性能瓶颈,找出慢查询,并理解系统当下正在做什么。而借助pg_stat_statements,就可以帮助我们确定哪些查询导致了性能低下,以及这些慢查询它们的执行频率等信息。
2、安装pg_stat_statements?
安装
pg_stat_statements是PostgreSQL的核心插件之一。可以在编译PostgreSQL时安装,也可以单独安装。
编译时安装:
1 2 | make world make install-world |
单独安装:
1 2 | cd src/contrib/pg_stat_statements/ make; make install |
配置
- 修改postgresql.conf中的shared_preload_libraries,然后重启PostgreSQL。
1 | alter system set shared_preload_libraries = 'pg_stat_statements'; |
如果要跟踪IO消耗的时间,还需要打开如下参数
1 | alter system set track_io_timing = on; |
设置单条SQL的最长长度,超过被截断显示(可选),指定为每个活动会话跟踪当前正在执行的命令的字节数,用于pg_stat_activity.query字段。 默认值为1024,建议增大该值至 4096或更大。此参数只能在服务器启动时设置。
1 | alter system set track_activity_query_size = 40960 ; |
配置pg_stat_statements采样参数(可选)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | vi $PGDATA/postgresql.conf pg_stat_statements.max = 100000 # 在pg_stat_statements中最多保留多少条统计信息,通过LRU算法,覆盖老的记录。 pg_stat_statements.track = all # all - (所有SQL包括函数内嵌套的SQL), top - 直接执行的SQL(函数内的sql不被跟踪), none - (不跟踪) pg_stat_statements.track_utility = off # 是否跟踪非DML语句 (例如DDL,DCL), on表示跟踪, off表示不跟踪 pg_stat_statements.save = on # 重启后是否保留统计信息 cat >> postgresql.conf <<"EOF" pg_stat_statements.max = 100000 pg_stat_statements.track = all pg_stat_statements.track_utility = off pg_stat_statements.save = on EOF alter system set shared_preload_libraries = 'pg_stat_statements'; alter system set track_io_timing = on; alter system set track_activity_query_size = 40960 ; alter system set pg_stat_statements.max = 100000 ; alter system set pg_stat_statements.track = 'all'; alter system set pg_stat_statements.track_utility = on; alter system set pg_stat_statements.save = on ; |
配置完成后,需要重启PG。
1 | pg_ctl restart -m fast |
- 每个数据库都创建扩展
1 | CREATE EXTENSION pg_stat_statements; |
查看版本