开发者社区 问答 正文

pg 11 pg_class 膨胀,怎么处理?

可以直接使用vaccum full pg_class 吗? 我们现在使用PG11一段时间后,pg_class 膨胀了三倍,我可以直接 使用vaccum full 来处理吗? 虽然我在测试系统跑,一瞬间就OK了. 但在线业务系统库上,不知道对各项业务调用,有多大影响.线上库比测试库要大得多.

展开
收起
nshi 2019-09-29 13:05:31 767 分享
分享
版权
举报
阿里云 AI 助理回答

在PostgreSQL中,VACUUM FULL是一个非常强力的维护命令,它会回收表和索引中的空间,消除由于删除或更新操作导致的碎片,并且在操作完成后重新整理表。这通常会导致数据库表的物理文件大小显著减小,从而解决膨胀问题。然而,直接在生产环境中运行VACUUM FULL对在线业务系统可能有以下几方面的影响:

  1. 阻塞: VACUUM FULL会锁定表,直到操作完成,这意味着在执行期间,对该表的所有读写操作都会被阻塞。对于一个大型的、活跃的在线业务系统,这可能会导致严重的性能问题,甚至服务中断。

  2. 资源消耗: 该操作会消耗大量的CPU和I/O资源,因为它需要重写整个表。在资源紧张的情况下,这可能会影响到其他正在运行的应用程序和服务的性能。

  3. 时间成本: 对于比测试库大得多的线上库,VACUUM FULL可能需要很长时间才能完成,具体取决于表的大小、碎片程度以及系统的I/O能力。

考虑到这些潜在影响,建议采取以下策略:

  • 计划维护窗口: 在业务低峰期或者事先安排好的维护窗口进行此操作,以减少对用户的影响。
  • 使用VACUUM (VERBOSE, ANALYZE)先行分析: 这可以帮助你了解表的实际碎片情况,判断是否真的需要执行VACUUM FULL
  • 考虑使用pg_repackALTER TABLE ... SET WITH (REORGANIZE)(PG12及以上版本): 这些工具或命令可以在不阻塞DML操作的情况下重新组织表,更适合在线业务环境。
  • 监控与备份: 在执行前确保做好充分的数据备份,并在操作过程中密切监控系统资源使用情况和业务响应时间。

总之,虽然在测试环境中VACUUM FULL可能迅速完成了任务,但在生产环境中应谨慎行事,采取适当的预防措施来最小化对业务的影响。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址:
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等