Ibm mq 单写与三写

Ibm mq 单写与三写,ibm-mq,Ibm Mq,我对在MQ中何时何地使用SingleWrite作为日志算法具有优势有着相当好的理解。它有利于高吞吐量、低并发性工作负载。当工作负载更并发时,TripleWrite的开销就更少了 我不理解并且正在努力寻找关于TripleWrite(自v6以来Websphere MQ的默认值)的实际实现方式的任何信息。我知道它实际上并不是将每个事务都写入日志三次,而且当涉及部分页面时,它的行为与SingleWrite不同。但它有什么不同之处呢?它会调用fsync三次吗 我没有任何实际的目的或问题要解决,这比任何事情

我对在MQ中何时何地使用SingleWrite作为日志算法具有优势有着相当好的理解。它有利于高吞吐量、低并发性工作负载。当工作负载更并发时,TripleWrite的开销就更少了

我不理解并且正在努力寻找关于TripleWrite(自v6以来Websphere MQ的默认值)的实际实现方式的任何信息。我知道它实际上并不是将每个事务都写入日志三次,而且当涉及部分页面时,它的行为与SingleWrite不同。但它有什么不同之处呢?它会调用fsync三次吗

我没有任何实际的目的或问题要解决,这比任何事情都更好奇。我已经在WebSphereMQ上工作了几年,希望能更好地理解这一点

有人能透露一些信息吗

编辑:

我考虑了很多,其中一个选择是它类似于InnoDB的DoubleWrite。InnoDB有一个双写缓冲区,在将更新写入数据文件之前,所有更改都会先顺序写入该缓冲区。恢复时,您可能有一个完整的成功写入的双写缓冲区要从中恢复,或者从未修改过表数据


我不确定这是否与MQ的TripleWrite类似,因为在几个不同的实例中都断言TripleWrite不会重复写入所有页面,并且TripleWrite仅在应用于部分页面时与SingleWrite的行为不同。

大致说来,它类似于以下内容(请记住,问题只涉及部分页面,随着MQ版本的升级,这些页面的可能性越来越小——这就是为什么单次写入的好处在很大程度上是微乎其微的。)


假设MQ在一个页面中写入了10个字节,因此日志页面中剩余了大量空间(大小固定)。当MQ想要写入更多字节时(要么页面的其余部分现在已移动,要么可能(不太可能)再写入少量数据),它不能只写该页,因为磁盘可能会在写入过程中崩溃,并可能损坏为保持完整性而需要保留的内容(前10个字节)。因此,第二次写入(包含更多数据)发生在其他地方,然后是在原始页面上的第三次写入。因为它总是知道哪些写入成功,所以它知道在恢复步骤中应该使用原始页面还是“其他地方”页面。

这里是一个关于三次写入的有趣讨论-我认为很有用-感谢链接,但我已经通过了呃,之前的讨论并没有提供我想要的具体信息。我正在寻找TripleWrite如何与底层IO子系统交互的描述。我想我可以尝试对正在运行的TripleWrite QM进行扫描,看看这是否有帮助。谢谢,这很有意义。看起来与InnoDB Double Write非常相似。