postgresql - 如果我将某些表的 autovacuum 比例因子设置为零,是否会对 DB 产生不利影响?
问题描述
我们在 Centos 操作系统上使用 postgres 9.2 版本。我们有大约 1300 多张桌子。我们启用了以下自动真空设置。仍然很少有总是很忙的表(84 个表)没有被清理。这些表中的死元组超过 5000 个。由于这些表正在膨胀,并且观察到的区域很少有性能下降。
autovacuum = on
log_autovacuum_min_duration = 100
autovacuum_max_workers = 5
autovacuum_naptime = 1min
autovacuum_vacuum_threshold = 40
autovacuum_analyze_threshold = 20
autovacuum_vacuum_scale_factor = 0.1
autovacuum_analyze_scale_factor = 0.05
autovacuum_freeze_max_age = 200000000
autovacuum_vacuum_cost_delay = 30ms
autovacuum_vacuum_cost_limit = 1200
# - Cost-Based Vacuum Delay -
#vacuum_cost_delay = 0ms # 0-100 milliseconds
#vacuum_cost_page_hit = 1 # 0-10000 credits
#vacuum_cost_page_miss = 10 # 0-10000 credits
#vacuum_cost_page_dirty = 20 # 0-10000 credits
vacuum_cost_limit = 200 # 1-10000 credits
为了避免表膨胀和性能下降,我们想为繁忙的表设置'autovacuum_vacuum_scale_factor'(零)和'autovacuum_vacuum_threshold'(200)设置,如下所示。如果我将某些表的 autovacuum 比例因子设置为零,请告诉我是否对 DB 有任何不利影响。如果是,效果如何,如何测试。
ALTER TABLE cmdevice SET (autovacuum_vacuum_scale_factor = 0, autovacuum_vacuum_threshold = 200);
请让我知道 autovacuum_vacuum_cost_delay 和 autovacuum_vacuum_cost_limit 设置的作用。
解决方案
该措施不会有效。虽然它会导致 autovacuum 一直在桌子上运行,但它不会让它更快。
首先尝试提高autovacuum_vacuum_cost_limit
哪个决定了 autovacuum 工作后将“小睡”到 2000 左右。
如果这不起作用,autovacuum_vacuum_cost_delay
请将小睡的持续时间设置为 0。这是你能做的最好的事情。
您可以使用 仅更改具有高活动性的表的设置ALTER TABLE ... SET (...)
。
推荐阅读
- c# - WPF 材料设计文本框通过幻灯片显示。有解决方法吗?
- windows-runtime - Inference of onnx model (opset11) in Windows 10 c++?
- javascript - packages not loaded when migrating to webpacker
- r - 如何在R中组合两个函数?
- kubernetes - Kubernetes-pod 有哪些不同的日志级别?它的作用是什么?
- python - 加快python中的嵌套循环和调用函数
- python - 使用python循环遍历列表并插入str.contains(并计算存在多个项目的df的行)
- python - 使用 Python 读取本地 JSON 文件
- swift - 分析语音并采取行动
- php - Paypal 单一支付与 codeignetor 的集成