本文提供有关在 Microsoft BizTalk Server 中连接到 BizTalkMsgBoxDb 数据库时解决 SQL Server 问题的信息。
原始产品版本: BizTalk Server
原始 KB 数: 917845
现象
在 BizTalk Server 中,尝试连接到 BizTalkMsgBoxDb 数据库时遇到阻塞、死锁条件或其他Microsoft SQL Server 问题。
原因
如果出现下述一个或多个情况,则可能发生此问题:
- 数据库”选项。
- 在选项。
- 最大 并行度 选项设置为除 1 之外的值,适用于该数据库或托管该数据库的 SQL 实例。
- 在 BizTalk Server 处理数据时,您对
BizTalkMsgBoxDb数据库中的索引进行碎片整理或重新生成。
解决方法 1:禁用“自动创建统计信息”选项和“自动更新统计信息”选项
若要解决此问题,请禁用 SQL Server 中数据库的 “自动创建统计信息 ”和 “自动更新统计信息 ”选项 BizTalkMsgBoxDb 。
解决方法 2:将最大并行度选项设置为 1
若要解决此问题,请在数据库设置或托管此数据库的 SQL 实例中将最大并行度选项设置为 BizTalkMsgBoxDb。
解决方法 3:BizTalk Server 处理数据时不要重新生成索引
若要解决此问题,请不要运行 bts_RebuildIndexes 存储过程或任何 SQL 命令,该命令在 BizTalk Server 处理数据时重新生成 BizTalk Server 数据库中的索引。
注意
不支持对 BizTalk Server 数据库中的索引进行碎片整理。
bts_RebuildIndexes存储过程
在数据库中重新生成索引 BizTalkMsgBoxDb 的唯一支持方法是运行 bts_RebuildIndexes 存储过程。 在 BizTalk Server 2006 及更高版本中,可以运行存储过程以重新生成 dtasp_RebuildIndexes 数据库中的 BizTalkDTADb 索引。
大多数 BizTalk 索引都是基于 GUID 的。 许多测试都表明,只要表没有被扫描,基于 GUID 的索引在 BizTalk 特定工作负荷中可以比基于身份标识的索引表现更好。 这可能会导致数据碎片。 因此,尽管数据以稳定的速度流入和流出表格,但碎片化可能不会引发任何问题。 如果预计 BizTalkMsgBox 数据库中会生成大量数据,则可以在定期计划停机期间重新生成索引。 相同的准则适用于跟踪数据库。
可以使用 DBCC DBREINDEX SQL 命令在其他 BizTalk Server 数据库中重新生成索引。 有关如何使用 DBCC DBREINDEX SQL 命令的示例,请右键单击bts_RebuildIndexes存储过程,然后单击“属性”。
Microsoft仅支持在 BizTalk Server 停机期间重新生成数据库索引。 在重新生成索引之前,应停止所有主机实例和SQL Server 代理。 在 BizTalk Server 2006 及更高版本中运行 bts_RebuildIndexes 存储过程时,可能会收到以下错误消息之一:
错误消息 1
Msg 5239,级别 16,状态 1,过程 bts_RebuildIndexes,第 4 行无法处理对象 ID 674101442(对象“TrackingData”)
此数据库一致性检查器 (DBCC) 命令不支持此类对象。错误消息 2
Msg 5239,级别 16,状态 1,过程bts_RebuildIndexes,第 4 行无法处理对象 ID 722101613(对象“TrackingData”),因为此 DBCC 命令不支持此类型的对象。
出现此问题的原因是对象 TrackingData 是 BizTalk Server 2006 及更高版本中的视图。 若要解决此问题,请执行以下操作,然后执行 bts_RebuildIndexes 存储过程:
在
bts_RebuildIndexes存储过程内注释掉以下这一行。DBCC DBREINDEX ('[dbo].[TrackingData]') WITH NO_INFOMSGS将以下行添加到
bts_RebuildIndexes存储过程。DBCC DBREINDEX ('[dbo].[TrackingData_0_0]') WITH NO_INFOMSGS DBCC DBREINDEX ('[dbo].[TrackingData_0_1]') WITH NO_INFOMSGS DBCC DBREINDEX ('[dbo].[TrackingData_0_2]') WITH NO_INFOMSGS DBCC DBREINDEX ('[dbo].[TrackingData_0_3]') WITH NO_INFOMSGS DBCC DBREINDEX ('[dbo].[TrackingData_1_0]') WITH NO_INFOMSGS DBCC DBREINDEX ('[dbo].[TrackingData_1_1]') WITH NO_INFOMSGS DBCC DBREINDEX ('[dbo].[TrackingData_1_2]') WITH NO_INFOMSGS DBCC DBREINDEX ('[dbo].[TrackingData_1_3]') WITH NO_INFOMSGS