Let's break autovacuum in Postgres: reproducing failures to make it observable
9 hours ago
- 自动清理可防止膨胀和事务ID回卷,但故障静默且难以监控。
- 使用原始死元组数量具有误导性;计算'自动清理压力'(死元组/阈值)以获得归一化信号。
- Coroot通过结合压力大于2倍且至少512MiB的死数据来检测问题,然后通过系统视图识别根本原因。
- 五种常见故障模式:表上自动清理禁用、长时间事务持有边界、复制槽固定边界、所有工作进程繁忙、清理被限速。
- 每种故障都有独特的检测特征:reloptions、持有者的xmin年龄、工作进程数、等待事件。
- 该工具提供具体的发现结果,包括表名、原因和修复方法,减少猜测。
- 该方法使用现有的Postgres系统视图(pg_stat_user_tables、pg_stat_activity、pg_stat_progress_vacuum等)并进行了智能聚合。