首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于长期运行的分析查询的备用工作负载,打开hot_standby_feedback还是将max_standby_*_delay设置设置为-1更好?

对于长期运行的分析查询的备用工作负载,打开hot_standby_feedback还是将max_standby_*_delay设置设置为-1更好?
EN

Database Administration用户
提问于 2016-02-27 00:09:05
回答 2查看 2.9K关注 0票数 5

当专门用于BI/Analytics目的的热备用服务器(其中长时间运行的查询可能是常见的)时,打开hot_standby_feedback还是将max_standby_*_delay设置设置为-1?

我的理解是,hot_standby_feedback阻止主程序执行像VACUUM这样的操作,直到在max_standby_*_delay设置允许VACUUM在主机上开始的情况下,在待机上也可以这样做,但是如果有必要,备用将等待应用任何可能与长时间运行的查询发生冲突的真空清理。

此外,docs状态 for hot_standby_feedback

如果待机查询取消的次数被认为是不可接受的,则存在补救的可能性。第一个选项是设置参数hot_standby_feedback,该参数防止真空移除最近死亡的行,因此不会发生清理冲突。如果这样做,您应该注意到这将延迟清理主表上的死行,这可能会导致表膨胀。但是,清理情况将不会比直接在主服务器上运行备用查询更糟糕,而且您仍然可以从将执行卸载到备用服务器上获得好处。

对于max_standby_*_delay,docs状态:

如果备用服务器被指定为用于决策支持查询的额外服务器,则可以将最大延迟值设置为多个小时,甚至-1,这意味着永远等待查询的完成。

我还不清楚哪一种更好,每种方法的确切利弊是什么?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2016-03-02 15:58:15

有了hot_standby_feedback,真空仍然可以做,但它将是不太有效的,因为一些元组,否则将真空现在必须推迟到以后的真空。据我所知,唯一真正的缺点是肿胀的增加。这有多大的缺点完全取决于你的使用。最糟糕的情况是,如果数据库中有小的、更新频繁的表,比如工作队列表。可能会非常臃肿。如果你没有那种桌子,你可能就不会有问题了。

max_standby_*_delay的问题在于,在待机状态下运行的其他查询也会被潜在的大量问题所抑制,如果你拖延足够长的等待时间,累积的未重播的WAL文件将填满硬盘驱动器,您将失去备用文件。

票数 4
EN

Database Administration用户

发布于 2016-02-27 04:49:30

hot_standby_feedback影响主服务器的活动,而max_standby_*_delay影响备用服务器的活动。

hot_standby_feedback的缺点很明显:当冲突发生时,主元组不能删除死元组。

max_standby_*_delay用于备用服务器,不影响主服务器的活动。这是这些对白的优点之一。它们的缺点如下:当在待机状态下发生冲突时,它的备用状态将挂起对max_standby_*_delay的重放WAL日志。因此,如果查询发生一次冲突,则后续查询读取旧数据(冲突发生前数据库的快照),由于备用挂起重放WAL,因此无法读取最新数据。

如果在备用服务器上只运行一个查询,我认为可以将-1设置为max_standby_*_delay。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/130622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档