Blocking, deadlock conditions, or other SQL Server issues when you connect to the BizTalkMsgBoxDb database in BizTalk Server
This article provides information about resolving SQL Server issues when you connect to the BizTalkMsgBoxDb
database in Microsoft BizTalk Server.
Original product version: BizTalk Server
Original KB number: 917845
Symptoms
In BizTalk Server, you experience blocking, deadlock conditions, or other Microsoft SQL Server issues when you try to connect to the BizTalkMsgBoxDb
database.
Cause
This issue may occur if one or more of the following conditions are true:
- The Auto Create Statistics option is enabled on the
BizTalkMsgBoxDb
database. - The Auto Update Statistics option is enabled on the
BizTalkMsgBoxDb
database. - The max degree of parallelism option is set to a value other than 1 for the
BizTalkMsgBoxDb
database or the SQL instance hosting this database. - You defragment or rebuild an index in the
BizTalkMsgBoxDb
database when BizTalk Server is processing data.
Resolution 1: Disable the Auto Create Statistics option and the Auto Update Statistics option
To resolve this issue, disable the Auto Create Statistics and the Auto Update Statistics options on the BizTalkMsgBoxDb
database in SQL Server.
Resolution 2: Set the max degree of parallelism option to 1
To resolve this issue, set the max degree of parallelism option to 1 in the BizTalkMsgBoxDb
database setting or the SQL instance hosting this database.
Resolution 3: Don't rebuild an index when BizTalk Server is processing data
To resolve this issue, don't run the bts_RebuildIndexes
stored procedure or any SQL command that rebuilds an index in a BizTalk Server database when BizTalk Server is processing data.
Note
Defragmenting an index in a BizTalk Server database isn't supported.
The bts_RebuildIndexes stored procedure
The only supported method to rebuild an index in the BizTalkMsgBoxDb
database is to run the bts_RebuildIndexes
stored procedure. On BizTalk Server 2006 and later versions, you can run the dtasp_RebuildIndexes
stored procedure to rebuild indexes in the BizTalkDTADb
database.
Most of the BizTalk indexes are GUID-based. Many tests have shown that as long as the tables are not scanned, GUID-based indexes can perform better than identity-based indexes for BizTalk-specific workloads. This may cause fragmentation. However, because data flows in and out of the tables at a steady pace, fragmentation may not cause any issues. If lots of data is expected to build up in the BizTalkMsgBox
database, you can periodically rebuild indexes during scheduled downtime. The same guidelines apply to the tracking database.
You can use the DBCC DBREINDEX
SQL command to rebuild an index in the other BizTalk Server databases. For an example of how to use the DBCC DBREINDEX
SQL command, right-click the bts_RebuildIndexes
stored procedure, and then click Properties.
Microsoft only supports rebuilding database indexes during BizTalk Server downtime. You should stop all host instances and SQL Server Agent before you rebuild an index. When you run the bts_RebuildIndexes
stored procedure in BizTalk Server 2006 and later versions, you may receive one of the following error messages:
Error message 1
Msg 5239, Level 16, State 1, Procedure bts_RebuildIndexes, Line 4 Unable to process object ID 674101442 (object 'TrackingData')
This database consistency checker (DBCC) command does not support this kind of object.Error message 2
Msg 5239, Level 16, State 1, Procedure bts_RebuildIndexes, Line 4 Unable to process object ID 722101613 (object 'TrackingData') because this DBCC command does not support objects of this type.
This problem occurs because the TrackingData
object is a view in BizTalk Server 2006 and later versions. To resolve this problem, do the following and then execute the bts_RebuildIndexes
stored procedure:
Comment out the following line in the
bts_RebuildIndexes
stored procedure.DBCC DBREINDEX ('[dbo].[TrackingData]') WITH NO_INFOMSGS
Add the following lines to the
bts_RebuildIndexes
stored procedure.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