在事务性和非事务性队列之间交替时,MSMQ性能急剧下降?

时间:2013-01-31 12:45:42

标签: msmq

我一直在运行一些测试来检查MSMQ的性能,并测试它是否适合我们将大量消息传递给单独服务来处理的需求。我们的要求是某些消息很重要,必须使用交易以可恢复的方式提供,而其他消息则不能。

我的实验包括向MSMQ发送1000个长度为108字节的文本,并执行50次,以获得平均值并记录每批1000条消息的最小,最大和平均性能。

我正在使用C ++服务将消息分发到两个本地专用队列,一个非事务性队列,一个必要的事务处理。我跑了四个实验,这些是:

1)只有交易发送

2)只有非交易发送

3)非交易地发送每组1000条消息中的500条,然后以其他方式发送其他500条消息

4)以交易方式发送500条消息,以非交易方式发送500条消息,在事务性和非事务性之间交替,以便每个事务后跟一个非事务性等等

我已经消除了任何其他外部因素,我得到的结果相当奇怪,因此我想知道是否有人可以解释?结果如下:

1)交易

Average: 1436   
Min: 398
Max: 1902

2)非交易

Average: 35
Min: 30
Max: 100

3)混合跟进

Average: 40
Min: 29
Max: 323

4)混合穿插

Average: 4944
Min: 1214
Max: 5941

令我困惑的两个问题是,首先在事务性发送和非事务性发送之间交替导致在事务上发送所有内容的性能大约下降5倍 - 我认为以事务方式发送所有内容将比仅发送更昂贵事务性消息的一半,无论这种方式如何,都不会慢5倍。其次,在500个非事务性消息之后发送500个事务性消息似乎实际上加速了事务性发送,相比之下,当它们作为单个1000个单独事务发送时,通过该测试的平均发送速率仅为40ms来判断。 p>

将单个消息写入事务,然后是非事务性队列,是否由于MSMQ必须在同步方式之间切换到的文件之间切换,或者某些此类消息之间是否重复?

作为参考,我正在使用内置于MSMQ中的单个消息事务。我也进行了几次这些实验,数字总是很相似。我还验证了数据是否正确计算。

有助于解释切换队列的性能损失,以及在事务性队列之前发送到非事务性队列的性能提升将非常受欢迎。

提前致谢。

0 个答案:

没有答案