老师您好, 结合6.3 和 6.11 的一个问题, 对redolog如何保证可靠性的一个疑问.
- redolog 从操作系统理解, 它是个文件, 也会有一部分数据在操作系统以页缓存的形式存在, 那么redolog 是写内存 -> 写binlog ->提交事务 (此时redolog的新内容还在内存里)-> 然后给客户端响应事务提交成功吗 ? 最后根据图中策略进行异步刷盘.
- 如果 1 是, 那么写内存之后就给客户端返回了事务提交成功, 此时mysql服务进程突然死了, redolog 在页缓存的那一部分, 也就是给客户端返回事务提交成功到异步刷盘之前的时间窗口内, redolog在内存中的内容就丢了, 但mysql又是持久性可靠的, 它是如何保证的呢, redolog都没持久化, 也没办法重做啊 ?
- 如果1 不是, 是刷盘之后才给客户端响应事务提交成功吗, 这样是不是性能就很差了, 因为每次客户端知道事务提交成功都意味着服务端都要操作磁盘IO
最核心的疑问就是: 像mysql这种持久化的存储技术, 面对可靠性和性能之间, 如何既保证可靠性又有相当的性能的, 因为即便是顺序写的预写日志, 也会在内存中有缓存, 对刷盘和给客户端响应成功这个过程不理解 .