postgresql-pg_stat_statements

本文介绍如何通过修改postgresql.conf配置文件来启用pg_stat_statements扩展,以追踪和优化SQL语句执行情况。包括设置最大跟踪语句数、选择追踪级别,并提供SQL查询以找出执行最慢的SQL语句。

修改postgresql.conf文件,并重启postgreSQL

shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.max = 1000                   //跟踪的最大语句数量,缺省是1000条
pg_stat_statements.track = all                  //控制那些语句会被追踪,可选top(缺省),all和none

创建pg_stat_statements

create extension pg_stat_statements;     //创建pg_stat_statements extension
CREATE EXTENSION
\d pg_stat_statements;                   //查看视图结构
          View "public.pg_stat_statements"
       Column        |       Type       | Modifiers
---------------------+------------------+-----------
 userid              | oid              |
 dbid                | oid              |
 query               | text             |
 calls               | bigint           |
 total_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 |

查找执行最慢的语句(查最慢10条SQL语句):

select query,calls,total_time,(total_time/calls) as average, rows,100.0*shared_blks_hit/nullif(shared_blks_hit+shared_blks_read,0) as hit_percent 
from pg_stat_statements 
order by average desc limit 10;

为使输出精简,也可执行以下语句(最慢2条语句):

select query,(total_time/calls) as average, 100.0*shared_blks_hit/nullif(shared_blks_hit+shared_blks_read,0) as hit_percent 
from pg_stat_statements 
order by average desc limit 2;
在使用 `pg_stat_statements_reset` 清空 `pg_stat_statements` 视图后,若要统计 TOP SQL,可按如下步骤操作: 首先,确保 `pg_stat_statements` 模块已正确载入并为目标数据库启用。需在 `postgresql.conf` 的 `shared_preload_libraries` 中添加 `pg_stat_statements`,这一操作需重启服务器。之后,在要查询 TOP SQL 的数据库中,执行 `create extension pg_stat_statements;` 来启用该模块的视图和函数[^1][^3]。 接着,在执行一段时间的 SQL 操作后,可通过查询 `pg_stat_statements` 视图来统计 TOP SQL。以下示例展示了如何从该视图中获取执行次数多、总时间长的 SQL 语句: ```sql -- SQL统计 SELECT userid AS 执行者id, dbid AS 执行数据库id, query AS 执行的语句, calls AS 执行次数, total_time AS 执行总时间, total_time/calls AS 执行平均时间, rows AS 影响的总行数, min_time, max_time, mean_time AS 平均时间 FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10; ``` 此查询会按照执行总时间降序排列 SQL 语句,并选取前 10 条,这些就是执行总时间较长的 TOP SQL 语句。 若要按执行次数统计 TOP SQL,可将 `ORDER BY` 子句修改为 `ORDER BY calls DESC`: ```sql -- SQL统计 SELECT userid AS 执行者id, dbid AS 执行数据库id, query AS 执行的语句, calls AS 执行次数, total_time AS 执行总时间, total_time/calls AS 执行平均时间, rows AS 影响的总行数, min_time, max_time, mean_time AS 平均时间 FROM pg_stat_statements ORDER BY calls DESC LIMIT 10; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值