foo*_*100 5 postgresql replication performance business-intelligence postgresql-performance
当专门为 BI/Analytics 目的启动热备用服务器时,长时间运行的查询可能很常见,是打开hot_standby_feedback
还是将max_standby_*_delay
设置设置为 -1更好?
我的理解是,这会hot_standby_feedback
阻止主服务器执行类似操作,VACUUM
直到可以安全地在备用服务器上执行同样的操作,其中max_standby_*_delay
设置允许VACUUM
在主服务器上开始,但备用服务器(如有必要)会等待应用任何可能与长时间冲突的真空清理运行查询。
此外,文档状态为hot_standby_feedback
:
如果发现备用查询取消的次数不可接受,则存在补救的可能性。第一个选项是设置参数 hot_standby_feedback,它可以防止 VACUUM 删除最近死的行,因此不会发生清理冲突。如果你这样做,你应该注意这会延迟主节点上死行的清理,这可能会导致不受欢迎的表膨胀。但是,清理情况不会比备用查询直接在主服务器上运行更糟糕,并且您仍然可以从将执行卸载到备用服务器上获得好处。
对于max_standby_*_delay
文档状态:
如果备用服务器的任务是作为决策支持查询的附加服务器,那么将最大延迟值设置为许多小时或什至 -1 可能是可以接受的,这意味着永远等待查询完成。
我仍然不清楚哪个更好,每个的确切优点和缺点是什么?
打开hot_standby_feedback
后,仍然可以进行真空处理,但效率会降低,因为一些原本会被真空处理的元组现在必须延迟到稍后的真空处理。据我所知,唯一真正的缺点是膨胀增加。这有多大的缺点完全取决于您的使用情况。最糟糕的情况是,如果您的数据库具有小型且频繁更新的表,例如工作队列表。这些可能会变得非常臃肿。如果你没有那种桌子,你可能不会有问题。
max_standby_*_delay 的问题在于,在备用数据库上运行的其他查询也可能会受到大量潜在的影响,并且如果您将备用数据库保留足够长的时间,累积的未重播的 WAL 文件将填满您的硬盘驱动器并且您将失去待机状态。
归档时间: |
|
查看次数: |
2674 次 |
最近记录: |