在每篇专栏文章中,“WebSphere 反向投资者”将回答问题、提供指导和讨论与 WebSphere 产品相关的基础主题,经常会给出与流行的看法相悖的经过实践验证的建议。
沼泽地怪物
我最近回复了一个电子邮件询问,结果在几天的过程中导致了一系列更多的电子邮件,这提示我回想起了我以前的经理非常喜欢的一句谚语:
当您深陷入鳄鱼口中的时候,很容易忘记当初为什么想要排干沼泽地的水。
您会问,这会让人想起什么呢?言归正传,该询问是咨询“IBM 要向对消息引擎数据库运行 DB2 重组和 runstat 的客户提供的建议”,虽然我并不以为是在全权代表 IBM 发言,但我的建议是不要操心去那样做。由于不喜欢鳄鱼,我通常尽量避免排干沼泽地的水,虽然为什么沼泽地可能根本不需要排干的原因对我来说似乎很清楚—— 或者对此例来说,为什么不需要对消息引擎数据库运行数据库实用工具——但是此建议并不是很适合该客户。虽然我并不确定客户最终是否被说服了,但是我想我应该在这里与您分享我的基本原理和方法,以便您能够决定什么可能最适合于您的环境。
调查沼泽地
在排干沼泽地的水之前,始终最好对其进行调查。在消息引擎数据库的情况下,您可以在 WebSphere Application Server 信息中心开始您的调查,其中提供了有关数据库结构的信息:
表 1. 消息数据库表
表 | 用途 |
SIBOWNER | 确保某个活动的消息引擎对数据存储进行独占访问。 |
SIBCLASSMAP | 对数据存储中不同的对象类型编录。 |
SIBLISTING | 对 SIBnnn 表编录。 |
SIBXACTS | 维护活动的两阶段提交事务的状态。 |
SIBKEYS | 为消息引擎中的对象分配唯一标识符。 |
SIBnnn,其中 nnn 为数字 | 包含持久化的对象,例如消息和订阅信息;这些表同时包含持久和非持久对象,并对不同类型的数据使用单独的表。 |
困扰客户的其中一个问题是包含独占锁的 SIBOWNER 表,WebSphere Application Server 信息中心对此进行了阐述,其中陈述到(节选):
数据存储中的 SIBOWNER 表将锁作为一对唯一标识符包含在单个行中。消息引擎在启动时使用这两个标识符获取和维护其独占锁:
MEUUID
消息引擎的唯一标识符,每当消息引擎启动和停止,此标识符保持相同。
INCUUID
消息引擎的具体标识符,在消息引擎每次启动时更改。
这些标识符确定哪一个消息引擎在使用某个数据存储。这些标识符还确定消息引擎的运行实例是否在其运行期间的时段中维护其独占锁。
当消息引擎启动时,它获得 SIBOWNER 表上的一个独占表锁。
消息引擎持有独占锁的结果在于,数据库维护实用工具无法以首选的方式运行,该方式旨在对数据库中的所有表进行维护。
需要改造?
现在您知道了沼泽地——即数据库——的大致情况,您真的需要将其排干吗?您可以通过停止正在使用消息引擎数据库的消息引擎,从而查看下表的内容:
>db2 select * from ibmme0.sibowner
ME_UUID INC_UUID VERSION MIGRATION_VERSION
---------------- ---------------- ----------- -----------------
E4C0B7CC5E3B76D3 4C224C2252CE2BDD 1 0
1 record(s) selected.