当专门用于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,这意味着永远等待查询的完成。
我还不清楚哪一种更好,每种方法的确切利弊是什么?
发布于 2016-03-02 15:58:15
有了hot_standby_feedback,真空仍然可以做,但它将是不太有效的,因为一些元组,否则将真空现在必须推迟到以后的真空。据我所知,唯一真正的缺点是肿胀的增加。这有多大的缺点完全取决于你的使用。最糟糕的情况是,如果数据库中有小的、更新频繁的表,比如工作队列表。可能会非常臃肿。如果你没有那种桌子,你可能就不会有问题了。
max_standby_*_delay的问题在于,在待机状态下运行的其他查询也会被潜在的大量问题所抑制,如果你拖延足够长的等待时间,累积的未重播的WAL文件将填满硬盘驱动器,您将失去备用文件。
发布于 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。
https://dba.stackexchange.com/questions/130622
复制相似问题