在评论中,唯一一个含糊不清的人就是“Zoredache”.
在以下情况下,您只会丢失数据
>您已通过设置fsync = off将PostgreSQL配置为不安全.
>您正在使用UNLOGGED表,这些表不是崩溃安全的(在这种情况下,您只会丢失未记录表中的数据);
>底层存储系统不是崩溃安全或忽视fsync,就像许多廉价的消费者SSD在没有适当备用电源的情况下对易失性缓存进行回写缓存;
我在in a blog post a few months ago上写了很多.
即使您使用廉价的SSD,只有当您的系统实际断电时,您仍然不会在突然重启时丢失数据.我已经看到一些系统在重置时对磁盘进行电源循环,如果使用廉价的SSD,这些系统会丢失数据.
对于PostgreSQL来说,“干净”关闭几乎是可选的;突然重启的唯一缺点是,由于在恢复期间应用预写日志所需的时间,数据库可能需要更长的时间才能启动,并且(根据文档)UNLOGGED表将被截断.
即使在所谓的“干净”关闭中,大多数init脚本也只会在有限的时间内等待服务器关闭.大多数init脚本使用“快速”关闭模式,这将中止当前事务,拒绝新会话,并快速但干净地关闭服务器.他们通常会超时,如果这需要太长时间而且只是关闭,有效地依赖于PostgreSQL的崩溃安全性.
如果要允许当前事务完成,则需要在关闭系统之前手动执行“智能”关闭,或修改init脚本以使用它.智能关机并不总是非常有用,因为一个长时间运行或被放弃的连接可以阻止整个服务器无限期地关闭,让它坐在那里拒绝所有连接.作为第一次尝试,您可以让它运行一分钟或快速关闭之前.
崩溃安全不是没有采取备份的理由 – 并对其进行测试.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。