Хранимая процедура выполняет обновление связанного сервера внутри транзакции. Он хорошо работает для нескольких клиентских сред, за исключением одной конкретной клиентской среды.
Поведение заключается в том, что SP вызывается через пользовательский интерфейс ASP.net и зависает, пока не истечет время ожидания команды 30 секунд. Выполнение сценария sp_WhoIsActive показывает, что SP застрял в операторе UPDATE LS с wait_info из PREEMPTIVE_COM_QUERYINTERFACE.
Странно то, что после первоначального тайм-аута при повторной попытке операции в пользовательском интерфейсе она становится успешной. Но время ожидания снова всплывает время от времени без четкой картины.
Кажется, это связано с MSDTC из-за оператора, в котором происходит событие ожидания. Это может быть разрешение или параметр конфигурации, поскольку в других средах эта проблема не встречается. Но MSDTC, похоже, настроен правильно, поскольку иногда выполнение выполняется успешно. Кто-нибудь имеет опыт работы с этой информацией об ожидании PREEMPTIVE_COM_QUERYINTERFACE?
Базы данных для локальной и удаленной базы данных - это базы данных SQL Server 2008 R2, использующие собственный клиент SQL 10.0 для объекта LS.
Обновление:
Мы проверили журналы приложений Windows и во время зависания SP; появляется это сообщение об ошибке.
СОБЫТИЕ ID 4359
MS DTC не может связаться с MS DTC в удаленной системе. MS DTC в первичной системе установил привязку RPC к MS DTC во вторичной системе. Однако вторичная система не создала обратную привязку RPC к основной системе MS DTC до истечения времени ожидания. Пожалуйста, убедитесь, что между двумя системами есть сетевое соединение. Особенности ошибок:
Проверка уже выполнена:
- Конфигурация MSDTC (т.е. разрешить входящий, разрешить исходящий и т. Д.)
- HKEY_CLASSES_ROOT CID на обеих машинах не идентичны
На компьютерах установлена Symantec Endpoint Protection, поэтому мы выясняем, может ли это быть фактором.