磁盘大小会周期性地增加,即使通过提高自动真空的性能可以减少死元组的计数。插入的数量少于死元组的数量。
测试环境:
我定期检查磁盘大小和死元组状态。磁盘大小:
SELECT nspname || '.' || relname AS "relation",
pg_total_relation_size(C.oid) AS "total_size"
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog', 'information_schema')
AND C.relkind <> 'i'
AND nspname !~ '^pg_toast'
ORDER BY pg_total_relation_size(C.oid) DESC
LIMIT 3;死元组:
SELECT relname, n_live_tup, n_dead_tup,
n_dead_tup / (n_live_tup::float) as ratio
FROM pg_stat_user_tables
WHERE n_live_tup > 0
AND n_dead_tup > 1000
ORDER BY ratio DESC;它需要超过3天的自动真空。我将其更改为在30分钟内运行,设置如下:
ALTER SYSTEM SET maintenance_work_mem ='1GB';
select pg_reload_conf();
alter table pm_reporthour set (autovacuum_vacuum_cost_limit = 1000);
ALTER TABLE PM_REPORTHOUR SET (autovacuum_vacuum_cost_delay =0);请告诉我哪一个要复习。
发布于 2022-06-28 06:21:58
如果你有大的删除,你总是会变得臃肿。在本例中,国王的方法是分区:按范围分区,以便您可以在分区上运行DROP TABLE,而不是在大型DELETE上运行。除了更好的性能,这将避免所有的膨胀。
https://stackoverflow.com/questions/72779577
复制相似问题