首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgresql autovacuum_vacuum

Postgresql autovacuum_vacuum
EN

Stack Overflow用户
提问于 2022-06-28 00:36:19
回答 1查看 47关注 0票数 0

磁盘大小会周期性地增加,即使通过提高自动真空的性能可以减少死元组的计数。插入的数量少于死元组的数量。

测试环境:

  • Centos 7. postgesql 10.7,内存128 G,ssd :600 g,cpu :16核

  • 每天插入4,000万多个。

  • 由于定期更新,大约有1.2亿个死元组。

  • 我将数据保存一个月,每周删除一次。

  • 保存的数据约为12亿。

我定期检查磁盘大小和死元组状态。磁盘大小:

代码语言:javascript
复制
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;

死元组:

代码语言:javascript
复制
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分钟内运行,设置如下:

代码语言:javascript
复制
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);

请告诉我哪一个要复习。

EN

回答 1

Stack Overflow用户

发布于 2022-06-28 06:21:58

如果你有大的删除,你总是会变得臃肿。在本例中,国王的方法是分区:按范围分区,以便您可以在分区上运行DROP TABLE,而不是在大型DELETE上运行。除了更好的性能,这将避免所有的膨胀。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72779577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档