pg_stat_statements

本文详细介绍了Pg_stat_statements模块的使用方法及配置参数。Pg_stat_statements用于跟踪所有SQL语句的执行统计信息,包括如何修改配置文件postgresql.conf启用模块、如何调整统计信息收集的范围等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

os:centos 6.8
db:postgresql 9.6

pg_stat_statements模块提供了一种跟踪执行的所有SQL语句的统计信息的方法。

这个模块必须改写配置文件postgresql.conf中的shared_preload_libraries变量,这是因为他需要额外的共享内存。
同时也意味着需要重启服务。

当pg_stat_statements被载入时,它会跟踪该服务器 的所有数据库的统计信息。
该模块提供了一个视图 pg_stat_statements 以及函数 pg_stat_statements_reset 和pg_stat_statements用于访问和操纵这些统计信息。
这些视图 和函数不是全局可用的,但是可以用CREATE EXTENSION pg_stat_statements 为特定数据库启用它们。

配置参数

pg_stat_statements.max (integer)
pg_stat_statements.max是由该模块跟踪的语句的最大数目(即pg_stat_statements视图中行的最大数量)。如果观测到的可区分的语句超过这个数量,最少被执行的语句的信息将会被丢弃。默认值为 5000。这个参数只能在服务器启动时设置。

pg_stat_statements.track (enum)
pg_stat_statements.track控制哪些语句会被该模块计数。指定top可以跟踪顶层语句(那些直接由客户端发出的语句),指定all还可以跟踪嵌套的语句(例如在函数中调用的语句),指定none可以禁用语句统计信息收集。默认值是top。 只有超级用户能够改变这个设置。

pg_stat_statements.track_utility (boolean)
pg_stat_statements.track_utility控制该模块是否会跟踪工具命令。工具命令是除了SELECT、INSERT、 UPDATE和DELETE之外所有的其他命令。默认值是on。 只有超级用户能够改变这个设置。

pg_stat_statements.save (boolean)
pg_stat_statements.save指定是否在服务器关闭之后还保存语句统计信息。如果被设置为off,那么关闭后不保存统计信息并且在服务器启动时也不会重新载入统计信息。默认值为on。这个参数只能在postgresql.conf文件中或者在服务器命令行上设置。

该模块要求与pg_stat_statements.max成比例的额外共享内存。注意只要该模块被载入就会消耗这么多的内存,即便pg_stat_statements.track被设置为none。

这些参数必须在postgresql.conf中设置。典型的用法可能是:
vi postgresql.conf
shared_preload_libraries = ‘pg_stat_statements’

pg_stat_statements.max = 10000
pg_stat_statements.track = all

检查 pg_stat_statements

/usr/pgsql-9.6/lib/pg_stat_statements.so

/usr/pgsql-9.6/share/extension/
-rw-r--r-- 1 root root  1246 Aug 10 10:15 pg_stat_statements--1.0--1.1.sql
-rw-r--r-- 1 root root  1336 Aug 10 10:15 pg_stat_statements--1.1--1.2.sql
-rw-r--r-- 1 root root  1454 Aug 10 10:15 pg_stat_statements--1.2--1.3.sql
-rw-r--r-- 1 root root   345 Aug 10 10:15 pg_stat_statements--1.3--1.4.sql
-rw-r--r-- 1 root root  1427 Aug 10 10:15 pg_stat_statements--1.4.sql
-rw-r--r-- 1 root root   191 Aug 10 10:15 pg_stat_statements.control
-rw-r--r-- 1 root root   449 Aug 10 10:15 pg_stat_statements--unpackaged--1.0.sql

创建 pg_stat_statements extension

create extension pg_stat_statements; 

确认 pg_stat_statements

mondb=# \dx
                                       List of installed extensions
        Name        | Version |   Schema   |                         Description                          
--------------------+---------+------------+--------------------------------------------------------------
 dblink             | 1.2     | public     | connect to other PostgreSQL databases from within a database
 pg_stat_statements | 1.4     | public     | track execution statistics of all SQL statements executed
 plpgsql            | 1.0     | pg_catalog | PL/pgSQL procedural language
(3 rows)

查询 pg_stat_statements

SELECT query, 
       calls, 
       total_time, 
       rows, 
       100.0 * shared_blks_hit /nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent 
  FROM pg_stat_statements 
  ORDER BY total_time DESC LIMIT 5;

可以清空pg_stat_statements,从头开始
SELECT pg_stat_statements_reset();

select *
from pg_class pc
where 1=1
and pc.relkind in ('r','v')
and pc.relname like 'pg_stat%'
order by pc.relname
;

参考:http://postgres.cn/docs/9.6/pgstatstatements.html

<think>我们被要求清空表 pg_stat_statements。注意,pg_stat_statements 是一个扩展,用于收集数据库中的SQL执行统计信息。通常,我们不会直接使用DELETE来清空它,而是使用该扩展提供的重置函数。 正确的方法是使用:`SELECT pg_stat_statements_reset();` 因为直接对pg_stat_statements表进行DELETE操作可能会被禁止(取决于版本和配置),或者即使允许,也可能不是推荐的做法。 但是,如果用户坚持要清空表(即使用DELETE),我们可以写一个DELETE语句。但请注意,这样做可能会要求该表允许DELETE操作,而在某些版本中,这个表是视图,不允许删除。因此,我们首先需要确认该表是否允许DELETE操作。 然而,根据PostgreSQL官方文档,pg_stat_statements是一个视图,并且不允许直接删除其中的数据。所以,我们只能使用重置函数。 因此,在回答中,我们应该先说明推荐的方法,然后再说明如果用户坚持用DELETE的话(虽然不推荐且可能失败),可以尝试什么。 但根据问题,用户要求“清空这个表”,所以我们可以提供两种方式,但强调推荐方式。 注意:重置函数需要超级用户权限。 所以,回答如下:</think>要清空 `pg_stat_statements` 表(用于收集 SQL 执行统计信息的扩展),需使用其内置重置函数而非直接删除数据。以下是操作步骤: 1. **连接数据库**:使用管理员账号(如 `postgres`)登录 ```bash psql -U postgres -d your_database_name ``` 2. **执行重置命令**(推荐方法) ```sql SELECT pg_stat_statements_reset(); ``` 此操作会立即清空所有统计信息,且安全高效。 3. **替代方法(不推荐)**:直接删除表内容(需超级用户权限) ```sql TRUNCATE pg_stat_statements; ``` 注意:部分 PostgreSQL 版本可能禁止此操作,且可能影响统计数据的连续性。 **重要说明**: - `pg_stat_statements` 是扩展提供的**视图**,存储于共享内存中,重启服务也会重置数据 - 定期重置可避免统计信息占用过多内存(通过参数 `pg_stat_statements.max` 控制) - 重置后需重新执行 SQL 才能生成新统计
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据库人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值