我有一个MQ集群环境。在某些时候,其中一个部分存储库qmgr崩溃,而另一个qmgr中的队列 SYSTEM.CLUSTER.REPOSITORY.QUEUE
的深度不断增加。
我有点不理解为什么会这样。我从这个链接http://www-01.ibm.com/support/docview.wss?uid=swg21193012走过技术说明 但我不明白。有人可以帮助更详细,更清楚地解释一下吗?
由于
答案 0 :(得分:5)
存储库队列包含表示集群状态的消息。完整存储库跟踪集群中所有对象和QMgrs的状态,而集群成员QMgrs仅跟踪他们需要了解的对象。由于这通常是一个子集,普通的集群QMgrs有时被称为“部分存储库”,因为它们包含的内容 - 完整存储库信息的部分子集。
存储库队列中消息的实际格式未公开记录。 Technote解释的是,信息经常被重新排列和压缩,因此您不应期望群集对象的数量与存储库队列的深度之间存在线性关系。根据时间安排,存储库队列上的一条消息可能表示多个集群对象的状态,或者只表示一个。甚至可能存在表示已删除群集对象状态的存储库消息。通常,部分存储库在存储库队列中的消息少于完整存储库,但如果不是,则通常不会出现任何问题。
Technote没有解释的是存储库队列中的消息保存在同步点下,这会使QDepth失真。例如,QMgr将在启动时读取所有集群存储库消息。如果需要进行更改,它会在相关消息的同步点下执行GET。在这些消息处于同步点的时间内,即使消息仍在那里,队列深度也会减少。表观深度和实际深度仅在COMMIT
或ROLLBACK
之后匹配。随着群集状态的更改,新消息将被放入队列以反映新状态。即使交易处于待处理状态COMMIT
或ROLLBACK
,这些也会立即增加明显的QDepth。此外,写入的消息数量可能远远多于或少于队列更新所获得的数量。
所以Technote的结果和我的建议是接受SYSTEM.CLUSTER.REPOSITORY.QUEUE是不稳定的,不要担心它的深度。相反,如果您有监视代理程序,请监视队列上始终存在打开的输入句柄,或者集群存储库管理器进程(amqrrmfa
)正在运行,或者两者都在运行。