postgresql - 如果我将某些表的 autovacuum 比例因子设置为零,会对数据库产生不利影响吗?

标签 postgresql psql postgresql-9.2 autovacuum

我们在Centos 操作系统上使用postgres 9.2 版本。我们有大约 1300 多张 table 。我们启用了以下自动真空设置。仍然很少有总是很忙的表(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 比例因子设置为零,请告诉我是否对数据库有任何不利影响。如果是,效果如何,如何测试。

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 提高到 2000 左右,这决定了 autovacuum 在多少工作后“小睡”。

如果这不起作用,请将指定小睡持续时间的 autovacuum_vacuum_cost_delay 降低到 0。这是您能做的最好的事情。

您可以使用 ALTER TABLE ... SET (...) 仅更改具有高 liveness 的表的设置。

关于postgresql - 如果我将某些表的 autovacuum 比例因子设置为零,会对数据库产生不利影响吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51818949/

相关文章:

postgresql - Pg-promise 客户端无法从 ElephantSQL 云数据库中正确检索特殊字符

postgresql - psql 可以输出所有表的描述,但只输出表吗?

linux - PostgreSQL 不同版本

postgresql - 修复 PostgreSQL 9.2.9 中的无效内存分配请求

php - 在 Laravel 5 中使用数据库 session 存储时更改 last_activity 列的类型

node.js - JSON stringify 和 PostgreSQL bigint 合规性

postgresql - `= function()` 和 `= (select function())` 之间有区别吗?

postgresql - 这个 "psql (9.4.8, server 9.3.23)"是什么意思?

postgresql - "psql"中的语法错误,命令未执行

postgresql - DateTime 相当于 PostgreSQL 9.2 中的 Sql Server 2008