启用这样一个选项的风险是否真的高于丢失最后 N 秒的交易?
让我解释一下我为什么要问这个问题。想象一下,DB 服务器刚刚处理了一个事务 T,并因此修改了一组索引页。这些索引页中很少有已经刷新到磁盘,但很少有其他索引页没有。但是 T 进行的所有操作还没有刷新到磁盘事务日志中。现在我们关闭电源。
因此,当数据库服务器重新启动并尝试恢复时,它在事务日志中看不到任何 T 操作。但是它的一些索引实际上反映了这些操作,因为一些被 T 修改的索引页在断电之前被刷新了。即结果,T 被部分应用——并且可能以导致索引结构不一致的方式(例如,表 X 的主索引不反映 T 所做的任何更改,但它的一些二级索引却反映)。
所以我想知道如果我延迟事务日志刷新,这样的事情真的可能发生,如果没有,数据库服务器实际上做了什么来防止这种情况(MySQL 5.5 w/InnoDB 对我来说是最有趣的情况)。