连接到 BizTalk Server 中的 BizTalkMsgBoxDb 数据库时出现阻塞、死锁条件或其他 SQL Server 问题
本文提供有关在 Microsoft BizTalk Server 中连接到 BizTalkMsgBoxDb
数据库时解决 SQL Server 问题的信息。
原始产品版本: BizTalk Server
原始 KB 数: 917845
现象
在 BizTalk Server 中,尝试连接到 BizTalkMsgBoxDb
数据库时遇到阻塞、死锁条件或其他Microsoft SQL Server 问题。
原因
如果出现下述一个或多个情况,则可能发生此问题:
- 数据库上
BizTalkMsgBoxDb
启用了“自动创建统计信息”选项。 - 在数据库上
BizTalkMsgBoxDb
启用了自动更新统计信息选项。 - 最大 并行度 选项设置为数据库或托管此数据库的 SQL 实例的 1
BizTalkMsgBoxDb
以外的值。 - 在 BizTalk Server 处理数据时,对数据库中的索引
BizTalkMsgBoxDb
进行碎片整理或重新生成。
解决方法 1:禁用“自动创建统计信息”选项和“自动更新统计信息”选项
若要解决此问题,请禁用 SQL Server 中数据库的“自动创建统计信息 ” 和“自动更新统计信息 ”选项 BizTalkMsgBoxDb
。
解决方法 2:将最大并行度选项设置为 1
若要解决此问题,请在数据库设置或托管此数据库的 SQL 实例中BizTalkMsgBoxDb
将最大并行度选项设置为 1。
解决方法 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