SQL OLEDB вызов зависает

У меня есть проблема, когда поток просто зависает и никогда не возвращается после вызова SQL OLE DB CCommand< Команда Taccessor, TRowset> :: Open () с использованием активной библиотеки шаблонов Microsoft.

Вот как выглядит звонок:

hr = CCommand< TAccessor, TRowset >::Open( DB::Instance()->GetSession(), CComBSTR(strCmd), pPropSet, pRowsAffected, DBGUID_DEFAULT, true, 0 );

CCommand<> :: Open () метод выполняет хранимую процедуру на SQL Server по сети.

Мне удалось захватить трассировку стека из Process Explorer, и я просто искал какие-либо подсказки или предложения относительно направления, чтобы помочь понять, что здесь происходит … Я включил трассировку стека ниже:

ntoskrnl.exe!KeWaitForMultipleObjects+0xc0a
ntoskrnl.exe!KeAcquireSpinLockAtDpcLevel+0x732
ntoskrnl.exe!KeWaitForMutexObject+0x19f
ntoskrnl.exe!NtWaitForSingleObject+0xde
ntoskrnl.exe!KeSynchronizeExecution+0x3a23
wow64cpu.dll!TurboDispatchJumpAddressEnd+0x6c0
wow64cpu.dll!TurboDispatchJumpAddressEnd+0x4a8
wow64.dll!Wow64SystemServiceEx+0x1ce
wow64.dll!Wow64LdrpInitialize+0x429
ntdll.dll!RtlIsDosDeviceName_U+0x24c87
ntdll.dll!LdrInitializeThunk+0xe
ntdll.dll!ZwWaitForSingleObject+0x15
ntdll.dll!RtlIntegerToUnicodeString+0x20b
MSDART.DLL!?ConvertExclusiveToShared@CReaderWriterLock3AR@@QAEXXZ+0xb8
sqloledb.dll!DllUnregisterServer+0xa29b
sqloledb.dll!DllUnregisterServer+0xa05b
sqloledb.dll!DllUnregisterServer+0x9f70
sqloledb.dll+0x16e92
MyService.exe+0xea26a

Этот код работал очень хорошо в течение многих лет. Это 32-битное приложение C ++, созданное с помощью MS Visual Studio 2010. У нас начались проблемы после того, как произошли 2 изменения, и не уверены, связано ли это или нет, одно 32-битное приложение теперь выполняется в 64-битной среде Windows для первого время .. и два, база данных sql больше не является локальной на сервере, а находится в сети.

Это сервер большого объема, выполняющий сотни или даже тысячи транзакций в минуту, и каждые несколько дней или дольше, это совершенно случайно, код просто зависнет в том же месте, с той же трассировкой стека, что и выше.

Действительно был бы признателен за любые предложения относительно того, как выяснить, что происходит с sqloledb ??

Первый вопрос для начала: почему трассировка стека показывает, что sqloledb вызывает DllUnregisterServer?

Из трассировки стека видно, что sql ole db ожидает чего-то с последним вызовом WaitForMultipleObjects, но как я могу выяснить, чего он ждет?

Спасибо.

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]