我的理解是,synchronous_commit
如果您的服务器具有本地电池备份存储控制器,则可以关闭。
在我的环境中,我在一个块存储通过 iSCSI 连接的 VM 上,其中 iSCSI 节点使用 DRBD,并且主节点和辅助节点都有电池备份控制器。
FWIW,具体如下:
我可以安全关闭synchronous_commit
吗?
我的理解是,如果您的服务器具有本地电池备份存储控制器,则关闭 synchronous_commit 是可以的。
实际上,这有点倒退。打开synchronous_commit
关闭是不安全的,无论是什么,因为它允许数据库丢失最近提交的事务,如果它崩溃。无论是否使用 BBU 或防碰撞 SSD 存储,都是如此。
是什么synchronous_commit = off
做的是让你当你在存储在那里,所以你想批量他们,并希望避免客户等待时间,而应用程序等待冲洗冲洗价格昂贵耐久性交易速度。它对刷新速度较快的存储的影响要小得多,因为您等待提交发生的时间更少 - 所以它几乎都是缺点并且几乎没有好处。
在一般情况下,你应该不设置synchronous_commit
全局关闭。正如文档所建议的那样,您应该SET LOCAL synchronous_commit = off
在不需要持久的特定事务中,否则将其启用。这样,您可能会丢失您不太关心的交易,但不会丢失那些正在进行重要更改的交易。
如果您根本无法承受客户认为已提交的事务的潜在损失,您可能需要考虑 a commit_delay
,它会在刷新之前暂停以尝试将几个提交批处理在一起。这可以提高 I/O 子系统的吞吐量,刷新速度非常慢,而不会牺牲持久性。
您可能还需要考虑将UNLOGGED
表用于在崩溃中可以承受的特定表。如果 Pg 在表变脏时崩溃,它将截断它,您必须重新填充它,但不会有更广泛的数据库损坏。
如果有人告诉你fsync
关闭 - 请不要。它应该被称为eat_my_data = on
,并且完全不适合任何东西,除了可以在崩溃后轻松重建该批次的一次性实例。
归档时间: |
|
查看次数: |
749 次 |
最近记录: |