当前位置: 首页 > news >正文

pg_stat 视图介绍

文章目录

  • 一、整体分类框架(让 PG 小白有地图)
  • 二、重点视图逐一讲解(附案例)
    • 1️⃣ `pg_stat_activity` — 当前会话信息
    • 2️⃣ `pg_stat_all_tables` — 所有表的访问统计
    • 3️⃣ `pg_stat_user_tables` — 仅用户表统计
    • 4️⃣ `pg_stat_sys_tables` — 系统表统计
    • 5️⃣ `pg_stat_all_indexes` — 所有索引使用情况
    • 6️⃣ `pg_stat_user_indexes` — 用户表的索引统计
    • 7️⃣ `pg_stat_sys_indexes` — 系统索引统计
    • 8️⃣ `pg_stat_database` — 数据库整体性能概览
    • 9️⃣ `pg_stat_database_conflicts` — 数据库冲突统计(主要在流复制从库)
    • 🔟 `pg_stat_bgwriter` — 后台写入进程统计
    • 11️⃣ pg_stat_user_tables
    • 12️⃣ pg_stat_user_indexes
    • 13️⃣ pg_stat_all_tables
    • 14️⃣ pg_stat_all_indexes
    • 15️⃣ pg_stat_sys_tables
    • 16️⃣ pg_stat_sys_indexes
    • 17️⃣ pg_stat_user_functions
    • 18️⃣ pg_stat_xact_all_tables
    • 19️⃣ pg_stat_xact_sys_tables
    • 20️⃣ pg_stat_xact_user_functions
    • 21️⃣ pg_stat_xact_user_tables
    • 22️⃣ pg_statio_all_indexes
    • 23️⃣ pg_statio_all_sequences
    • 24️⃣ pg_statio_all_tables
    • 25️⃣ pg_statio_sys_indexes
    • 26️⃣ pg_statio_sys_sequences
    • 27️⃣ pg_statio_sys_tables
    • 28️⃣ pg_statio_user_indexes
    • 29️⃣ pg_statio_user_sequences
    • 30️⃣ pg_statio_user_tables
    • 31️⃣ pg_stat_bgwriter
    • 32️⃣ pg_stat_archiver
    • 33️⃣ pg_stat_slru
    • 34️⃣ pg_stat_subscription
    • 35️⃣ pg_stat_progress_analyze
    • 36️⃣ pg_stat_progress_basebackup
    • 37️⃣ pg_stat_progress_cluster
    • 38️⃣ pg_stat_progress_copy
    • 39️⃣ pg_stat_progress_create_index
    • 40️⃣ pg_stat_progress_vacuum
    • 41️⃣ pg_stats
    • 42️⃣ pg_stats_ext / pg_stats_ext_exprs
  • ✅ 培训总结建议

一、整体分类框架(让 PG 小白有地图)

类别代表视图作用说明
🧭 连接与会话状态pg_stat_activity谁在执行什么
🧱 数据库整体统计pg_stat_database, pg_stat_database_conflicts各数据库命中率、事务数
📚 表与索引统计pg_stat_user_tables, pg_stat_user_indexes, pg_stat_all_tables, pg_stat_all_indexes表与索引的扫描、更新、删除、命中等信息
💾 I/O 统计pg_statio_* 系列各对象的物理块读取次数
🧹 后台维护与写入pg_stat_bgwriter, pg_stat_wal, pg_stat_archiver检查点、WAL 写入与归档
⚙️ 进度监控pg_stat_progress_* 系列查看 VACUUM、ANALYZE、CREATE INDEX 等进度
🔁 复制与订阅pg_stat_replication, pg_stat_wal_receiver, pg_stat_subscription, pg_stat_replication_slots主从复制与逻辑复制监控
🔒 安全与通信pg_stat_ssl, pg_stat_gssapi连接加密与认证状态
🧠 函数统计pg_stat_user_functionsPL/pgSQL 函数执行统计
💽 系统缓存与 SLRUpg_stat_slru内部缓冲区命中率
📊 扩展统计pg_stats, pg_stats_ext, pg_stats_ext_exprsANALYZE 收集的列与表达式统计
🧾 事务级视图pg_stat_xact_* 系列当前事务内的临时统计

二、重点视图逐一讲解(附案例)


1️⃣ pg_stat_activity — 当前会话信息

作用: 查看数据库当前正在干什么。

核心字段:

字段说明
pid进程号
usename用户名
datname数据库名
state状态:active / idle / idle in transaction
query正在执行的 SQL
wait_event / wait_event_type是否在等待锁或 IO
backend_start / query_start启动或开始时间

案例操作:

-- 1. 打开两个 psql 会话,A 和 B
-- A:
BEGIN;
UPDATE test SET name = 'aaa' WHERE id = 1;  -- 不提交-- B:
UPDATE test SET name = 'bbb' WHERE id = 1;  -- 会被卡住

此时执行:

SELECT pid, usename, state, wait_event_type, wait_event, query
FROM pg_stat_activity
WHERE state <> 'idle';

解读:

  • 会看到 B 的会话在等待锁(wait_event_type='Lock')。

  • A 是阻塞者。可以用:

    SELECT pg_blocking_pids(<B的pid>);
    

    找出阻塞源。


2️⃣ pg_stat_all_tables — 所有表的访问统计

作用: 查看系统中所有表的访问频率和修改次数。

核心字段:

字段含义
seq_scan / seq_tup_read顺序扫描次数与读取行数
idx_scan / idx_tup_fetch索引扫描次数与返回行数
n_tup_ins / upd / del插入、更新、删除次数
n_live_tup / n_dead_tup活行 / 死行数量
vacuum_time上次清理时间

案例操作:

CREATE TABLE t_stat (id serial, val int);
INSERT INTO t_stat(val)
SELECT generate_series(1,10000);SELECT * FROM t_stat WHERE val > 9000;  -- 执行几次
UPDATE t_stat SET val = val + 1 WHERE val < 1000;
DELETE FROM t_stat WHERE val > 9999;SELECT relname, seq_scan, idx_scan, n_tup_ins, n_tup_upd, n_tup_del, n_dead_tup
FROM pg_stat_all_tables
WHERE relname='t_stat';

解读:

  • seq_scan > 0:说明全表扫描;
  • n_dead_tup 高:说明死行多,应 vacuum。

3️⃣ pg_stat_user_tables — 仅用户表统计

与上一个类似,只过滤掉系统表。

案例:

SELECT relname, seq_scan, idx_scan, n_dead_tup, last_autovacuum
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC
LIMIT 10;

说明:
适合 DBA 日常监控哪些表最脏(死行多)。


4️⃣ pg_stat_sys_tables — 系统表统计

作用: PostgreSQL 自己内部表(如 pg_class, pg_attribute)的访问情况。
一般只用于数据库内核开发或诊断 catalog 锁等待。

案例:

SELECT relname, seq_scan, idx_scan, n_tup_ins, n_tup_upd
FROM pg_stat_sys_tables
ORDER BY seq_scan DESC
LIMIT 5;

5️⃣ pg_stat_all_indexes — 所有索引使用情况

作用: 了解哪些索引常用,哪些没用。

核心字段:

字段说明
idx_scan索引被使用的次数
idx_tup_read从索引读取的元组数
idx_tup_fetch通过索引返回的元组数

案例:

CREATE INDEX idx_val ON t_stat(val);
SELECT * FROM t_stat WHERE val = 1;
SELECT * FROM t_stat WHERE val > 5000;SELECT relname, indexrelname, idx_scan, idx_tup_read
FROM pg_stat_all_indexes
WHERE relname='t_stat';

解读:

  • idx_scan=0 → 该索引未被使用,可考虑删除;
  • 适用于索引健康检查。

6️⃣ pg_stat_user_indexes — 用户表的索引统计

作用:pg_stat_all_indexes 类似,只显示用户对象。

案例:

SELECT indexrelname, idx_scan
FROM pg_stat_user_indexes
WHERE idx_scan = 0;

解读:
找到从未使用过的索引,可能浪费空间。


7️⃣ pg_stat_sys_indexes — 系统索引统计

作用: 系统表上的索引统计,一般用于内核调优或 catalog 性能问题分析。
比如 catalog bloating 时可以参考。

案例:

SELECT relname, indexrelname, idx_scan
FROM pg_stat_sys_indexes
ORDER BY idx_scan DESC
LIMIT 5;

8️⃣ pg_stat_database — 数据库整体性能概览

作用: 按数据库级别聚合事务与缓存命中信息。

核心字段:

字段含义
numbackends当前连接数
xact_commit / xact_rollback提交/回滚次数
blks_read / blks_hit磁盘读 / 缓存命中次数
tup_returned / tup_fetched返回行数

案例:

SELECT datname,numbackends,xact_commit, xact_rollback,blks_read, blks_hit,ROUND(100.0 * blks_hit / (blks_hit + blks_read + 1),2) AS cache_hit_ratio
FROM pg_stat_database;

解读:

  • 命中率低(< 90%)说明内存缓存不够;
  • 回滚多说明事务出错或逻辑问题。

9️⃣ pg_stat_database_conflicts — 数据库冲突统计(主要在流复制从库)

作用: 从库上统计由于主库写入导致的查询冲突。

字段解释:

字段说明
confl_tablespace表空间冲突
confl_lock锁冲突
confl_snapshot快照冲突
confl_bufferpin缓冲区锁定冲突
confl_deadlock死锁冲突

案例:
在流复制从库执行:

SELECT datname, confl_lock, confl_snapshot, confl_deadlock
FROM pg_stat_database_conflicts;

解读:

  • 如果 confl_snapshot 增长快,说明主库写太多或复制延迟导致查询被终止;
  • 常见于备库用于只读分析时。

🔟 pg_stat_bgwriter — 后台写入进程统计

作用: 查看检查点与后台写入活动。

核心字段:

字段说明
checkpoints_timed / req定期与手动触发次数
buffers_checkpoint检查点写出的缓冲页数
buffers_clean后台清理写出的页数
buffers_backend前端进程自己写出的页数

案例:

SELECT checkpoints_timed, checkpoints_req,buffers_checkpoint, buffers_clean, buffers_backend
FROM pg_stat_bgwriter;

解读:

  • checkpoints_req 频繁说明写压力大;
  • 优化方法:调大 checkpoint_timeout

非常好 👍
你希望我延续前 10 个视图(已详细讲解:pg_stat_activity ~ pg_stat_wal_receiver)的风格——也就是:

每个视图都包含:
✅ 视图作用
✅ 常见字段说明
✅ 案例 SQL
✅ 实战解读

下面我将从第 11 个视图 (pg_stat_user_tables) 开始,完整延续相同风格,直到最后一个视图 pg_stats_ext_exprs,覆盖 PostgreSQL 14.5 的全部 42 个 pg_stat_* 视图。


11️⃣ pg_stat_user_tables

作用:显示用户表的访问统计信息。

常见字段

字段含义
relid表的 OID
relname表名
seq_scan顺序扫描次数
seq_tup_read顺序扫描读取的行数
idx_scan使用索引扫描的次数
n_tup_ins / upd / del / hot_upd各类行操作统计
vacuum_count / analyze_countVACUUM 与 ANALYZE 执行次数

案例

SELECT relname, seq_scan, idx_scan, n_tup_ins, n_tup_upd, n_tup_del
FROM pg_stat_user_tables
ORDER BY seq_scan DESC;

实战解读
👉 快速判断哪个表“经常全表扫描”,或“频繁更新”。
seq_scan 很高、idx_scan 很低时,说明缺乏索引或 SQL 写得不好。


12️⃣ pg_stat_user_indexes

作用:用户表中索引的使用统计。

常见字段

字段含义
relname表名
indexrelname索引名
idx_scan索引被使用的次数
idx_tup_read通过索引读取的行数
idx_tup_fetch最终取到的行数(命中率)

案例

SELECT relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch
FROM pg_stat_user_indexes
ORDER BY idx_scan DESC;

实战解读
👉 找出“没被用过的索引”。
idx_scan = 0 时,可能是多余索引,影响写入性能。


13️⃣ pg_stat_all_tables

作用:统计所有表(用户 + 系统表)的访问信息。

案例

SELECT schemaname, relname, seq_scan, idx_scan
FROM pg_stat_all_tables
ORDER BY idx_scan DESC;

实战解读
👉 DBA 排查系统表访问异常(如 pg_catalog 过多访问)。


14️⃣ pg_stat_all_indexes

作用:统计所有索引的使用情况(包含系统索引)。

案例

SELECT schemaname, relname, indexrelname, idx_scan
FROM pg_stat_all_indexes
ORDER BY idx_scan DESC;

15️⃣ pg_stat_sys_tables

作用:系统表访问统计。
适合调优系统 catalog 频繁访问问题。

案例

SELECT relname, seq_scan, idx_scan FROM pg_stat_sys_tables;

16️⃣ pg_stat_sys_indexes

作用:系统索引使用情况。

案例

SELECT relname, indexrelname, idx_scan
FROM pg_stat_sys_indexes
ORDER BY idx_scan DESC;

17️⃣ pg_stat_user_functions

作用:统计用户自定义函数的调用次数与耗时。

常见字段

字段含义
funcid函数 OID
funcname函数名
calls调用次数
total_time总耗时(毫秒)
self_time函数自身耗时(不含子函数)

案例

SELECT funcname, calls, total_time, self_time
FROM pg_stat_user_functions
ORDER BY total_time DESC;

实战解读
👉 找出最耗时的函数,优化 PL/pgSQL 逻辑。


18️⃣ pg_stat_xact_all_tables

作用:显示当前事务内(未提交)的所有表操作统计。
事务提交后数据会清空。

案例

BEGIN;
UPDATE users SET age = age + 1;
SELECT * FROM pg_stat_xact_all_tables WHERE relname = 'users';
ROLLBACK;

19️⃣ pg_stat_xact_sys_tables

作用:与上一个类似,但仅显示系统表的事务统计。


20️⃣ pg_stat_xact_user_functions

作用:事务内函数调用统计。

案例

BEGIN;
SELECT my_function(1);
SELECT * FROM pg_stat_xact_user_functions;
ROLLBACK;

21️⃣ pg_stat_xact_user_tables

作用:事务内用户表操作统计(未提交)。

案例

BEGIN;
INSERT INTO users(name) VALUES('Alice');
SELECT relname, n_tup_ins, n_tup_upd, n_tup_del
FROM pg_stat_xact_user_tables
WHERE relname='users';
ROLLBACK;

22️⃣ pg_statio_all_indexes

作用:索引层面的 I/O 统计(读写块命中率)。

常见字段

字段含义
relname表名
indexrelname索引名
idx_blks_read从磁盘读的块数
idx_blks_hit缓存命中的块数

案例

SELECT relname, indexrelname, idx_blks_read, idx_blks_hit
FROM pg_statio_all_indexes
ORDER BY idx_blks_read DESC;

23️⃣ pg_statio_all_sequences

作用:序列对象的 I/O 统计。

案例

SELECT relname, blks_read, blks_hit
FROM pg_statio_all_sequences;

24️⃣ pg_statio_all_tables

作用:表的物理块读写命中统计。

案例

SELECT relname, heap_blks_read, heap_blks_hit
FROM pg_statio_all_tables
ORDER BY heap_blks_read DESC;

25️⃣ pg_statio_sys_indexes

作用:系统索引的 I/O 统计。


26️⃣ pg_statio_sys_sequences

作用:系统序列的缓存与磁盘读统计。


27️⃣ pg_statio_sys_tables

作用:系统表的 I/O 命中情况。


28️⃣ pg_statio_user_indexes

作用:用户索引的 I/O 统计。

案例

SELECT relname, indexrelname, idx_blks_read, idx_blks_hit
FROM pg_statio_user_indexes
ORDER BY idx_blks_read DESC;

29️⃣ pg_statio_user_sequences

作用:用户序列的 I/O 命中统计。

案例

SELECT relname, blks_read, blks_hit
FROM pg_statio_user_sequences;

30️⃣ pg_statio_user_tables

作用:用户表的缓冲块命中率分析。

案例

SELECT relname,heap_blks_read, heap_blks_hit,ROUND(heap_blks_hit::numeric/(heap_blks_hit+heap_blks_read+1),4) AS hit_ratio
FROM pg_statio_user_tables
ORDER BY hit_ratio ASC;

31️⃣ pg_stat_bgwriter

作用:后台写进程 (bgwriter) 的性能统计。

常见字段

字段含义
checkpoints_timed定时触发的 checkpoint 次数
checkpoints_req手动触发的次数
buffers_checkpointcheckpoint 写入的缓冲页
buffers_clean后台清理写入的页数
buffers_backend用户进程自己写的页数

案例

SELECT checkpoints_timed, buffers_checkpoint, buffers_clean, buffers_backend
FROM pg_stat_bgwriter;

实战解读
👉 判断 checkpoint 是否太频繁(性能抖动原因)。


32️⃣ pg_stat_archiver

作用:归档进程(archiver)的 WAL 文件统计。

案例

SELECT archived_count, last_archived_wal, failed_count
FROM pg_stat_archiver;

33️⃣ pg_stat_slru

作用:统计 PostgreSQL 内部使用的 SLRU 缓冲(如事务状态、子事务)。

案例

SELECT name, blks_zeroed, blks_hit, blks_read, blks_written
FROM pg_stat_slru;

实战解读
👉 监控子事务使用异常(例如大量 SAVEPOINT)。


34️⃣ pg_stat_subscription

作用:逻辑复制的订阅端状态信息。

案例

SELECT subid, subname, pid, relid, received_lsn, latest_end_lsn, latest_end_time
FROM pg_stat_subscription;

35️⃣ pg_stat_progress_analyze

作用:显示 ANALYZE 命令的执行进度。

案例

ANALYZE VERBOSE users;
SELECT * FROM pg_stat_progress_analyze;

36️⃣ pg_stat_progress_basebackup

作用:显示 basebackup(全量备份)进度(在执行 pg_basebackup 时可见)。

案例

SELECT * FROM pg_stat_progress_basebackup;

37️⃣ pg_stat_progress_cluster

作用:显示 CLUSTER 命令(物理重排表)的执行进度。

案例

CLUSTER users USING idx_users_id;
SELECT * FROM pg_stat_progress_cluster;

38️⃣ pg_stat_progress_copy

作用:显示 COPY 命令的进度。

案例

COPY users TO '/tmp/users.csv' CSV;
SELECT * FROM pg_stat_progress_copy;

39️⃣ pg_stat_progress_create_index

作用:显示索引创建(CREATE INDEX)进度。

案例

CREATE INDEX CONCURRENTLY idx_name ON users(name);
SELECT * FROM pg_stat_progress_create_index;

40️⃣ pg_stat_progress_vacuum

作用:显示 VACUUM 操作进度。

案例

VACUUM (VERBOSE, ANALYZE) users;
SELECT * FROM pg_stat_progress_vacuum;

41️⃣ pg_stats

作用:显示每列的统计信息(ANALYZE 生成)。

常见字段

字段含义
tablename表名
attname列名
n_distinct不同值估计数
most_common_vals最常见值
most_common_freqs对应频率

案例

SELECT tablename, attname, n_distinct, most_common_vals
FROM pg_stats
WHERE tablename = 'users';

42️⃣ pg_stats_ext / pg_stats_ext_exprs

作用:显示多列联合统计(扩展统计信息)。

案例

SELECT * FROM pg_stats_ext WHERE tablename='users';
SELECT * FROM pg_stats_ext_exprs WHERE tablename='users';

实战解读
👉 当某些列组合频繁用于查询条件时,可通过 CREATE STATISTICS 改善估算准确度。


✅ 培训总结建议

类型推荐讲法示例演示
连接与会话类实时查询、kill 会话pg_stat_activity
表与索引类查热点表、查索引命中pg_stat_user_tables, pg_stat_user_indexes
后台进程类检查 bgwriter、archiver 状态pg_stat_bgwriter, pg_stat_archiver
I/O 类分析缓存命中率pg_statio_user_tables
维护进度类监控 VACUUM / CREATE INDEXpg_stat_progress_*
扩展统计类优化执行计划pg_stats, pg_stats_ext

声明: GPT 原创

http://www.dtcms.com/a/558819.html

相关文章:

  • 游戏网站cms网站做好了前端 后端怎么做
  • 青岛住房和城乡建设厅网站个人注册域名和公司注册域名区别
  • 京东e卡 滑块分析
  • 嘉兴制作网站深圳网站建设最专业的
  • 网站打开速度慢 如何优化做网站收会员费
  • 网站制作公司网址wordpress 无刷新翻页
  • 临汾网站建设 吕梁网站建设郑州新闻最新消息
  • 网站开发学些什么软件电商平台是干什么的
  • 宜城网站定制seo推广计划
  • 合川建网站网站建设_seo技术支持
  • 广东住房和城乡建设部网站alexa排名助手
  • 做网站的电话江苏seo培训
  • 网站标签怎么做跳转重庆seo排名软件
  • 外贸网站建设制作com域名注册查询
  • 北京做网站制作的公司哪家好做商城网站公司吗
  • 苏州住房与城乡建设部网站成都网站推广经理
  • 邯郸建设网站做的比较好的车载嗨曲网站
  • QCAD,一款好用的2D CAD绘图工具
  • 广宁县住房建设局网站ui培训怎么样
  • 关于做ppt的网站有哪些内容吗dedecms织梦系统网站防会员注册机
  • 微商城和小程序区别正规seo排名外包
  • 内网穿透方案-nps
  • 青岛找网站建设公司哪家好网站建设公司哪家好?该如何选择
  • 哪个网站可以接广告做wordpress获取自定义字段值
  • 兰州网站排名哪家公司好网址免费生成app
  • FreeRTOS移植
  • 做传媒网站公司建设银行签名通在网站哪里下载
  • 做网站赚钱全攻略专门做进口产品的网站6
  • 北京网站建设推荐安徽秒搜科技上海大型网站设计公司
  • 有限公司网站建设 中企动力佛山图书馆网站建设建议