PostgreSQL 性能检测

数据库统计信息概览

pg_stat_user_tables

  • relid:表的标识符。
  • schemaname:表所属的模式名称。
  • relname:表的名称。
  • seq_scan:顺序扫描表的次数。
  • seq_tup_read:从表中读取的行数(通过顺序扫描)。
  • idx_scan:索引扫描表的次数。
  • idx_tup_fetch:从索引中检索的行数。
  • n_tup_ins:向表中插入的行数。
  • n_tup_upd:更新表中的行数。
  • n_tup_del:从表中删除的行数。
  • n_tup_hot_upd:热更新的行数,即在同一页上进行的更新操作。
  • n_live_tup:表中当前存活的行数。
  • n_dead_tup:表中当前已删除的行数。
  • last_vacuum_time:上次执行 VACUUM 操作的时间。
  • last_autovacuum_time:上次自动执行 VACUUM 操作的时间。
  • vacuum_count:执行 VACUUM 操作的次数。
  • autovacuum_count:自动执行 VACUUM 操作的次数。
SELECT *
FROM pg_stat_all_tables
WHERE schemaname = current_schema() and idx_scan < seq_scan ORDER BY seq_scan DESC;
--查看表的行数大小排序
SELECT relname, n_live_tup
FROM pg_stat_user_tables
order by n_live_tup desc

image

通过查询pg_stat_user_tables,可以基本清楚哪些表的全表扫描的次数较多,表中是插入还是更新,删除比较多。也可以了解当前表中垃圾数据的数量。

查看索引使用记录

在 PostgreSQL 中,pg_stat_all_indexespg_stat_user_indexes 是两个系统视图,用于提供关于索引的统计信息。这些视图存储了有关数据库中各个索引的性能统计数据。

  • pg_stat_all_indexes:这个系统视图包含了所有用户和系统表的索引的统计信息。它会为每个索引提供详细的指标,如扫描次数、插入次数、更新次数、删除次数等。这些统计信息可以用于分析索引的使用情况和效果,以帮助优化查询性能。

  • pg_stat_user_indexes:这个系统视图只包含当前数据库用户所拥有的索引的统计信息。它提供了与 pg_stat_all_indexes 相同的指标,但仅针对当前用户的索引进行统计。通过查看这个视图,用户可以更方便地获取与自己相关的索引的性能数据。

这两个视图都具有相似的列,包括索引名称、表名称、扫描次数、插入次数、更新次数、删除次数等。通过查询这些视图,你可以获取有关索引使用情况的信息,以便评估索引的效率,发现潜在的性能问题,并进行索引优化和调整。

  • indexrelname:索引的名称。
  • relname:表的名称。
  • schemaname:表所在的模式名称。
  • idx_scan:通过索引扫描的次数,如果这个值很小,说明这个索引很少被用到,可以考虑进行删除。
  • idx_tup_read:通过任意索引方法返回的索引行数。
  • idx_tup_fetch:通过索引方法返回的数据行数。

通过pg_stat_user_indexes可以知道当前数据库中哪些是用的很频繁的索引,哪些是无效索引,无效索引可以进行删除,可以减少磁盘空间的使用和提升insert,update,delete性能。

pg_statio_user_tables

  • relid:表的标识符(OID)。
  • schemaname:表所属的模式名称。
  • relname:表的名称。
  • heap_blks_read:从磁盘读取到的堆块数量。
  • heap_blks_hit:从缓存中读取的堆块数量。
  • idx_blks_read:从磁盘读取到的索引块数量。
  • idx_blks_hit:从缓存中读取的索引块数量。
  • toast_blks_read:从磁盘读取到的 TOAST 块数量。
  • toast_blks_hit:从缓存中读取的 TOAST 块数量。
  • tidx_blks_read:从磁盘读取到的 TOAST 索引块数量。
  • tidx_blks_hit:从缓存中读取的 TOAST 索引块数量。

    如果heap_blks_read,idx_blks_read很高说明shared_buffer较小,存在频繁需要从磁盘或者page cache读取到shared_buffer中。

pg_stat_bgwriter

  • checkpoints_timed:定时检查点的数量。
  • checkpoints_req:请求检查点的数量。
  • buffers_checkpoint:检查点期间写入磁盘的缓冲区数量。
  • buffers_clean:后台写进程清理的缓冲区数量。
  • maxwritten_clean:单个后台写进程最近清理的块数。
  • buffers_backend:后台写进程由后端进程完全清空的缓冲区数量。
  • buffers_alloc:后台写进程分配的新缓冲区数量。

这些列提供了有关后台写进程的各种指标,可以用于监控和优化 PostgreSQL 的 IO 性能。通过分析这些统计信息,可以了解缓存管理策略的效果、磁盘 IO 负载情况等方面的情况。

表大小查询

select
	relname,
	pg_size_pretty(pg_relation_size(relid))
from
	pg_stat_user_tables
where
	schemaname = 'public'
order by
	pg_relation_size(relid) desc;

索引大小查询

SELECT
    indexrelid::regclass AS index_name,
    pg_size_pretty(pg_relation_size(indexrelid)) AS index_size
FROM
    pg_index
order by
	pg_relation_size(indexrelid) desc;

pg_catalog.f_pg_stat_activity()

pg_stat_activity 视图是 PostgreSQL 中的系统视图之一,用于获取当前数据库中正在活动的会话信息。它提供了与活动连接相关的有用信息,如会话 ID、用户名、客户端地址、查询语句等。
image

查看表空间大小(总大小,索引,数据)

SELECT table_name,
       pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) AS total_size,
       pg_size_pretty(pg_indexes_size('"' || table_schema || '"."' || table_name || '"')) AS index_size,
       pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') - pg_indexes_size('"' || table_schema || '"."' || table_name || '"')) AS data_size
FROM information_schema.tables
WHERE table_type = 'BASE TABLE'
      AND table_schema NOT IN ('pg_catalog', 'information_schema')
ORDER BY pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC;

image

SELECT relname, n_live_tup
FROM pg_stat_user_tables
order by n_live_tup desc

image

查看库空间大小

SELECT datname AS "Database Name",
       pg_size_pretty(pg_database_size(datname)) AS "Size"
  FROM pg_database;

posted @ 2023-11-05 02:56  广州大雄  阅读(583)  评论(0编辑  收藏  举报