确认提交意味着什么
在提供完全持久提交的配置下,数据库报告事务完成以前,需要把足以恢复其效果的信息存入能够承受所承诺故障的存储。进程随即崩溃,也应能够重建已确认提交的结果。
这不要求每次提交都把所有修改过的数据页立即写回原处。PostgreSQL可以先持久化相应预写日志,随后写入数据页;重启时再用日志补做尚未反映到数据文件的修改。
缓存链条参与保证
应用缓冲、操作系统缓存、控制器与设备缓存可能处在真正持久介质之前。写入调用返回,并不必然说明数据已承受断电;同步接口和设备对刷新请求的实际执行共同影响保证。
带断电保护的缓存与普通易失写回缓存,能承受的故障不同。数据库软件需要可信的存储行为,备份又应覆盖介质损坏等更大故障;持久性总要说明所保护的范围。
参考:[2]
异步确认改变承诺
PostgreSQL的异步提交可以在日志真正刷入持久存储前返回成功,以降低小事务等待。若在这个窗口崩溃,最近已报告完成的事务可能丢失,因此使用者选择的是较弱的确认保证。
文档区分这种损失与任意数据库损坏:恢复仍沿已持久化的日志重建一致状态。它也不同于随意关闭所有同步保护。评价吞吐提升时,须同时核对成功回执究竟承诺了什么。
参考:[3]