一、查詢 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;