克里斯托夫·佩图斯:VACUUM(INDEX_CLEANUP 关闭)被认为有害

💡 原文英文,约500词,阅读约需2分钟。
📝

内容提要

PostgreSQL 12引入了VACUUM命令的INDEX_CLEANUP选项,但不建议使用。该选项会导致无法清理索引中的死元组,影响查询性能,虽然可以加快速度,但会导致表和索引膨胀。除非紧急情况,否则应避免使用。

🎯

关键要点

  • PostgreSQL 12引入了VACUUM命令的INDEX_CLEANUP选项,但不建议使用。
  • INDEX_CLEANUP选项会导致无法清理索引中的死元组,影响查询性能。
  • 虽然使用INDEX_CLEANUP可以加快速度,但会导致表和索引膨胀。
  • VACUUM的主要任务是查找死元组并回收它们作为空闲空间。
  • INDEX_CLEANUP OFF会关闭从索引中移除死元组的功能,实际上会使VACUUM失去意义。
  • 在某些情况下,PostgreSQL无法完全“冻结”表,可能会导致数据损坏。
  • 使用INDEX_CLEANUP的原因是为了在接近数据损坏的情况下跳过索引清理。
  • 即使使用INDEX_CLEANUP,仍需定期对表进行常规VACUUM。
  • INDEX_CLEANUP OFF的VACUUM会被误认为是常规VACUUM,可能导致表和索引严重膨胀。
  • 除非在紧急情况下,否则应避免使用INDEX_CLEANUP选项。

延伸问答

什么是PostgreSQL中的INDEX_CLEANUP选项?

INDEX_CLEANUP选项是PostgreSQL 12中VACUUM命令的一个新选项,用于控制是否清理索引中的死元组。

使用INDEX_CLEANUP选项有什么风险?

使用INDEX_CLEANUP选项会导致无法清理索引中的死元组,从而影响查询性能,并可能导致表和索引膨胀。

在什么情况下可以考虑使用INDEX_CLEANUP选项?

在接近数据损坏的紧急情况下,可以考虑使用INDEX_CLEANUP选项以跳过索引清理,但应谨慎使用。

VACUUM命令的主要功能是什么?

VACUUM命令的主要功能是查找死元组并将其回收为空闲空间。

关闭INDEX_CLEANUP会对VACUUM产生什么影响?

关闭INDEX_CLEANUP会使VACUUM无法清理死元组,实际上使VACUUM失去意义。

为什么不建议在常规情况下使用INDEX_CLEANUP?

因为INDEX_CLEANUP会导致表和索引严重膨胀,影响查询性能,除非在紧急情况下,否则应避免使用。

➡️

继续阅读