我非常了解使用SingleWrite的时间和地点可以作为MQ中的日志算法.它有利于高吞吐量,低并发工作负载.当工作负载更加并发时,TripleWrite的开销不是一个因素.
我不明白并且正在努力寻找任何信息是如何实际实现TripleWrite(自v6以来的Websphere MQ的默认值).我知道它实际上并没有将每个事务写入日志三次,并且当涉及到部分页面时,它的行为与SingleWrite不同.但它有什么不同的做法?它会调用fsync三次吗?
我没有任何真正的实际目的或问题需要解决,这比任何事情都更具好奇心.我已经使用Websphere MQ几年了,并希望更好地理解这一点.
有人能够放弃任何光明吗?
编辑:
我已经考虑了一些,其中一个选择是类似于InnoDB的DoubleWrite.InnoDB有一个双写缓冲区,在将更新写入数据文件之前,所有更改都按顺序写入.在恢复时,您有一个完整的成功编写的双写缓冲区可以从中恢复,或者表数据从未被修改过.
我不确定这是否与MQ的TripleWrite相似,因为它已在几个不同的实例中断言TripleWrite不会重复写入所有页面,并且TripleWrite在应用于部分页面时的行为与SingleWrite不同.
ibm-mq ×1