一、查询 pgsql 自动清理的历史统计信息
-- 查询 pgsql 自动清理的历史统计信息
SELECT relname 表名,
seq_scan 全表扫描记录数,
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 最后一次手动清理时间,
last_autovacuum 最后一次自动清理时间,
last_analyze 最后一次手动分析时间,
last_autoanalyze 最后一次自动分析时间,
vacuum_count 手动清理的次数,
autovacuum_count 自动清理的次数,
analyze_count 手动分析此表的次数,
autoanalyze_count 自动分析此表的次数,
(CASE
WHEN n_live_tup > 0 THEN n_dead_tup :: float8 / n_live_tup :: float8
ELSE 0 END) ::NUMERIC(12, 2) AS "死/活元组的比例"
FROM pg_stat_all_tables
WHERE schemaname = 'public'
ORDER BY n_dead_tup::float8 DESC;
二、查询 psql 当前数据库表已经达到自动清理条件的表及相关信息
-- 查询 psql 当前数据库表已经达到自动清理条件的表及相关信息
SELECT c.relname 表名,
(current_setting('autovacuum_analyze_threshold')::NUMERIC(12, 4)) +
(current_setting('autovacuum_analyze_scale_factor')::NUMERIC(12, 4)) * reltuples AS 自动分析阈值,
(current_setting('autovacuum_vacuum_threshold')::NUMERIC(12, 4)) +
(current_setting('autovacuum_vacuum_scale_factor')::NUMERIC(12, 4)) * reltuples AS 自动清理阈值,
reltuples::DECIMAL(19, 0) 活元组数,
n_dead_tup::DECIMAL(19, 0) 死元组数
FROM pg_class c
LEFT JOIN pg_stat_all_tables d
ON C.relname = d.relname
WHERE c.relname LIKE 'tb%'
AND reltuples > 0
AND n_dead_tup > (current_setting('autovacuum_analyze_threshold')::NUMERIC(12, 4)) +
(current_setting('autovacuum_analyze_scale_factor')::NUMERIC(12, 4)) * reltuples;
三、查询 pgsql 正在进行自动清理的表及相关信息
-- 查询 pgsql 正在进行自动清理的表及相关信息
SELECT c.relname 对象名称,
l.pid 进程id,
psa.STATE 查询状态,
psa.query 执行语句,
now() - query_start 持续时间
FROM pg_locks l
INNER JOIN pg_stat_activity psa ON (psa.pid = l.pid)
LEFT OUTER JOIN pg_class C ON (l.relation = C.oid)
WHERE psa.query like 'autovacuum%'
and l.fastpath = 'f'
ORDER BY query_start asc;
四、查看用例下所有数据库的磁盘空间占用情况
-- 查看用例下所有数据库的磁盘空间占用情况
SELECT table_schema || '.' || table_name AS table_full_name,
pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) AS size
FROM information_schema.tables
ORDER BY pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') desc;