对于做 odoo 开发或是使用 postgresql 数据库的朋友们来说,pg_stat_statements 与 log 可算是两个必备的数据分析工具了;前者用于 sql 性能分析,后者用于全局 sql 审计,我们接下来逐个介绍。
sql性能分析:pg_stat_statements
#1.编辑 postgresql.conf 文件,添加或修改以下参数:
# show config_file 查看postgresql.conf文件所在位置
shared_preload_libraries = 'pg_stat_statements' #2.重启 postgresql 数据库:
#3.连接到目标数据库并执行:
CREATE EXTENSION pg_stat_statements;
#4.查询统计:
SELECT * FROM pg_stat_statements;
#5.基本操作:
CREATE EXTENSION pg_stat_statements;
SELECT * FROM pg_stat_statements;
SELECT pg_stat_statements_reset();
DROP EXTENSION pg_stat_statements;
接下来对 pg_stat_statements 的主要字段做简要介绍:
- userid:执行该查询的用户的OID(可关联 pg_user.usesysid 查看用户名)
- dbid:查询所在数据库的OID(可关联 pg_database.oid 查看数据库名)
- queryid:查询的哈希值,用于唯一标识一个标准化后的 SQL 查询
- query:标准化后的查询文本(字面值被替换为占位符)
- calls:执行该查询的总次数
- total_time:该查询总共消耗的时间(毫秒)
- min_time:单次查询最短耗时(毫秒)
- max_time:单次查询最长耗时(毫秒)
- mean_time:平均每次查询耗时(毫秒)
- stddev_time:查询耗时的标准差(衡量耗时的波动性)
- rows:所有执行中返回的总行数。
从以上字段介绍不难看出,pg_stat_statements 就是用来分析 sql 性能的。
sql审计:log
#1.编辑 postgresql.conf 文件,添加或修改以下参数:
logging_collector = on
log_directory = 'log' # 日志存放目录
log_filename = 'postgresql-%Y-%m-%d.log' # 日志文件名格式
log_statement = 'all' # 记录所有语句(可改为 mod、ddl)
log_line_prefix = '%m [%p] %u@%d ' # 显示时间、用户等信息
#2.重启 postgresql 数据库:
#3.也可以通过sql语句来查看或修改以上配置:
SHOW log_statement;#查看
ALTER SYSTEM SET log_statement = 'value';#将 value 替换为 none、ddl、mod 或 all
SELECT pg_reload_conf();#重新加载配置使更改生效