Блокировка, условия взаимоблокировки или другие проблемы с SQL Server при подключении к базе данных Бизталкмсгбоксдб в BizTalk Server

В этой статье приводятся сведения об устранении проблем с SQL Server при подключении к BizTalkMsgBoxDb базе данных в Microsoft BizTalk Server.

Исходная версия продукта:   BizTalk Server
Исходный номер статьи базы знаний:   917845

Симптомы

В BizTalk Server при попытке подключения к базе данных возникают проблемы с блокировкой, взаимоблокировкой или другие проблемы с Microsoft SQL Server BizTalkMsgBoxDb .

Причина

Эта проблема может возникнуть, если выполняется одно или несколько из указанных ниже условий.

  • В базе данных включен параметр автоматического создания статистики BizTalkMsgBoxDb .
  • В базе данных включен параметр автоматического обновления статистики BizTalkMsgBoxDb .
  • В параметре max degree of parallelism задано значение, отличное от 1, на компьютере, на котором выполняется SQL Server и на котором размещается BizTalkMsgBoxDb база данных.
  • Вы дефрагментировать или перестройте индекс в BizTalkMsgBoxDb базе данных, когда BizTalk Server обрабатывает данные.

Решение 1: отключить параметр автоматического создания статистики и параметр автоматического обновления статистики

Чтобы устранить эту проблему, отключите параметр автоматического создания статистики и параметр Автоматическое обновление статистики для BizTalkMsgBoxDb базы данных в SQL Server.

Решение 2: установите для параметра Максимальная степень параллелизма значение 1.

Чтобы устранить эту проблему, установите для параметра Максимальная степень параллелизма значение 1 на компьютере, на котором работает SQL Server.

Решение 3: не перестраивать индекс, когда BizTalk Server обрабатывает данные

Чтобы устранить эту проблему, не выполняйте bts_RebuildIndexes хранимую процедуру или какую-либо команду SQL, которая перестраивает индекс в базе данных BizTalk Server, когда BizTalk Server обрабатывает данные.

Примечание

Дефрагментация индекса в базе данных сервера BizTalk не поддерживается.

Хранимая процедура bts_RebuildIndexes

Единственный поддерживаемый метод для перестроения индекса в BizTalkMsgBoxDb базе данных — выполнение bts_RebuildIndexes хранимой процедуры. В BizTalk Server 2006 и более поздних версиях можно выполнить dtasp_RebuildIndexes хранимую процедуру для перестроения индексов в BizTalkDTADb базе данных.

Большинство BizTalk индексов основаны на идентификаторе GUID. Многие тесты показывают, что при условии, что таблицы не проверяются, индексы на основе GUID могут работать лучше, чем индексы на основе удостоверений для рабочих нагрузок, относящихся к BizTalk. Это может привести к фрагментации. Однако из-за того, что данные передаются в таблицы и из них в стабильном темпе, фрагментация может не вызывать проблем. Если ожидается создание большого количества данных в BizTalkMsgBox базе данных, можно периодически перестраивать индексы во время запланированных простоев. Те же рекомендации применимы к базе данных отслеживания.

Вы можете использовать DBCC DBREINDEX команду SQL для перестроения индекса в других базах данных сервера BizTalk. Чтобы получить пример использования DBCC DBREINDEX команды SQL, щелкните bts_RebuildIndexes хранимую процедуру правой кнопкой мыши и выберите пункт Свойства.

Майкрософт поддерживает перестроение индексов баз данных только во время простоя сервера BizTalk Server. Перед перестроением индекса необходимо остановить все экземпляры узла и агент SQL Server. При выполнении  bts_RebuildIndexes хранимой процедуры в BizTalk Server 2006 и более поздних версиях может появиться одно из следующих сообщений об ошибке:

  • Сообщение об ошибке 1

    MSG 5239, уровень 16, состояние 1, процедура bts_RebuildIndexes, строка 4 не удается обработать объект с ИДЕНТИФИКАТОРом 674101442 (объект "Траккингдата")
    Эта команда проверки согласованности базы данных (DBCC) не поддерживает этот тип объекта.

  • Сообщение об ошибке 2

    Сообщение 5239, уровень 16, состояние 1, процедура bts_RebuildIndexes, строка 4 не удается обработать объект с ИДЕНТИФИКАТОРом 722101613 (объект ' Траккингдата '), так как эта команда DBCC не поддерживает объекты этого типа.

Эта проблема возникает из-за того, что  TrackingData   объект является представлением в BizTalk Server 2006 и более поздних версиях. Чтобы устранить эту проблему, выполните указанные ниже действия, а затем выполните  bts_RebuildIndexes хранимую процедуру.

  1. Закомментируйте приведенную ниже строку в bts_RebuildIndexes хранимой процедуре.

    DBCC DBREINDEX ('[dbo].[TrackingData]') WITH NO_INFOMSGS
    
  2. Добавьте следующие строки в 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