Номер ошибки: 187868 (Content Maintenance)VSTS: 1340145
Корпорация Майкрософт распространяет исправления Microsoft SQL Server 2012 в один загружаемый файл. Так как исправления являются накопительными, каждый выпуск содержит все исправления и все исправления безопасности, входившие в состав предыдущих 2012 SQL Server выпуска обновления.
Симптомы
Рассмотрим следующий сценарий:
-
Создайте хранимую процедуру, которая использует параметр табличное (TVP) в Microsoft SQL Server 2012.
-
С помощью профилировщика SQL или расширенных событий SQL Server запись RPC: запуск и RPC: завершена события.
-
Запустите запрос, который использует TVP.
-
Время ожидания запроса.
В этом случае выдается ошибка невыполненных планировщика и запросы, которые выполняются на тот же планировщик работать медленно. Кроме того мини-дамп файл создается в папке журнала SQL Server.
При возникновении этой проблемы появляется сообщение об ошибке, подобное приведенному ниже:System.Data.SqlClient.SqlException (0x80131904): Время ожидания истекло. Время ожидания истекло до завершения операции или сервер не отвечает.
в System.Data.SqlClient.SqlInternalConnection.OnError (исключение SqlException, логическое breakConnection) в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() в System.Data.SqlClient.TdsParserStateObject.ReadSniError (TdsParserStateObject stateObj, ошибка UInt32) в System.Data.SqlClient.TdsParserStateObject.ReadSni (DbAsyncResult asyncResult, stateObj, TdsParserStateObject) в System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket() в System.Data.SqlClient.TdsParserStateObject.ReadByte() в System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, преобразование SqlDataReader, BulkCopySimpleResultSet bulkCopyHandler, stateObj, TdsParserStateObject) в System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, RunBehavior runBehavior, resetOptionsString строка) в System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, returnStream типа Boolean, логическое async) в System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, returnStream типа Boolean, строки метод, результат DbAsyncResult) в System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (DbAsyncResult результат, имя_метода строка, логическое sendToPipe) в System.Data.SqlClient.SqlCommand.ExecuteNonQuery() в TVPApp.Program.Main (String [] args)В журнале ошибок SQL Server регистрируется ошибка планировщика невыполненных вместе с сообщение об ошибке, подобное приведенному ниже:
< Дата >< время > с использованием сервера «dbghelp.dll» версия "4.0.5»
Сервер времени > < Дата >< *** не удается получить контекст потока для spid # <Date><Time> Server * ******************************************************************************* Сервер времени > < Дата >< * Сервер времени > < Дата >< * начало стека: Сервер времени > < Дата >< * spid время > < Дата >< # Сервер времени > < Дата >< * Сервер времени > < Дата >< * невыполненных планировщика Сервер времени > < Дата >< * <Date><Time> Server * ******************************************************************************* < Дата >< время > сервер подпись стека для дампа является 0x000000000000002C < Дата >< внешнего сервера времени > дамп процесса возврата кода 0x20000001. Внешние дамп процесса возвращается без ошибок. Процесс сервера < Дата >< время > 0:0:0 (0x1670) работника 0x0000000004EDE160 кажется невыполненных планировщика 5. Время создания потока: 13014210386757. Используется около поток ЦП: ядра 0 мс, г-жа пользователя 70106 процесс использования 16%. 77% Бездействие системы. Интервал: 70140 мс. Процесс сервера < Дата >< время > 0:0:0 (0x1670) работника 0x0000000004EDE160 кажется невыполненных планировщика 5. Время создания потока:Причина
Эта проблема возникает из-за ошибки в ядре СУБД SQL Server 2012. Текстовые столбцы TVP, реализуются в качестве вставки строк или буферов и увеличение числа строк увеличивается количество буферов. Тем не менее процесс, который освобождает буферы занимает много времени. Таким образом, не давая планировщик ошибка при выпуске и сжатие операций происходят.
Примечание. Как проблема была устранена в следующей статье базы знаний Майкрософт. Однако в накопительный пакет обновления, описанного в статье не для ошибки времени ожидания запроса.ИСПРАВИТЬ 2520808 : ошибка планировщика невыполненных при выполнении запроса, который использует TVP в SQL Server 2008 или SQL Server 2008 R2 при использовании профилировщика SQL или расширенных событий SQL Server
Решение
Информация о накопительном пакете обновления
Накопительный пакет обновления 5 для SQL Server 2012 Пакет обновления 1 (SP1)
Исправление этой уязвимости первого выпуска накопительного обновления 5. Дополнительные сведения о том, как получить этот накопительный пакет обновления для SQL Server 2012, щелкните следующий номер статьи базы знаний Майкрософт:
2861107 накопительного обновления 5 для SQL Server 2012Примечание. Поскольку построения являются накопительными, каждый новый выпуск исправление содержит все исправления и все исправления, входившие в состав предыдущих 2012 SQL Server исправления выпуска. Мы рекомендуем рассмотреть применение последнего выпуска исправления, содержащего это исправление. Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
2772858 SQL Server 2012 выполняется построение, выпущенных после выпуска SQL Server 2012 Пакет обновления 1
Временное решение
Чтобы обойти эту проблему, воспользуйтесь одним из следующих методов:
-
Не используйте SQL Profiler или расширенными событиями SQL Server.
-
Снимите флажок RPC: запуск и RPC: завершена флажки в определении трассировки.
Дополнительные сведения
Это исправление не применяется к SQL Server 2008 или SQL Server 2008 R2 при публикации эту статью. Если все пользователи сталкиваются с этой проблеме в SQL Server 2008 или SQL Server 2008 R2 даже после установки пакета, как описано в следующей статье, проверить в случае тайм-аута запроса и определить, можно ли разрешить тайм-аута. В противном случае отправьте запрос для исправления для SQL Server 2008 или SQL Server 2008 R2.
ИСПРАВИТЬ 2520808 : ошибка планировщика невыполненных при выполнении запроса, который использует TVP в SQL Server 2008 или SQL Server 2008 R2 при использовании профилировщика SQL или расширенных событий SQL Server
Сведения о стеке вызова
sqlmin!CLinkedMap<__int64,CCheckReadersAndWriters::CCounts>::FLookup+0x29sqlmin!CCheckReadersAndWriters::Release+0x69
sqlmin!CMainIlb::{dtor}+0x3d sqlmin!CMainIlb::`scalar deleting destructor'+0x3d sqlmin!CBlobHandleFactoryMain::ReleaseILockBytes+0x13 sqlmin!CMainIlb::Release+0xf0 sqllang!CTraceRpcBinaryStream::~CTraceRpcBinaryStream+0x80 sqllang!CTraceTvpData::{dtor}+0x14 sqllang!CTraceTvpData::`scalar deleting destructor'+0x1e sqllang!CRpcTraceHelper::CleanUpTraceTvpData+0x33 sqllang!CRpcTraceHelper::~CRpcTraceHelper+0x70 sqllang!CRPCExecEnv::~CRPCExecEnv+0x2ab sqllang!CRPCExecEnv::`scalar deleting destructor'+0x14 sqllang!process_request+0x10b1 sqllang!process_commands+0x51c sqldk!SOS_Task::Param::Execute+0x21e sqldk!SOS_Scheduler::RunTask+0xa8 sqldk!SOS_Scheduler::ProcessTasks+0x299 sqldk!SchedulerManager::WorkerEntryPoint+0x261 sqldk!SystemThread::RunWorker+0x8f sqldk!SystemThreadDispatcher::ProcessWorker+0x3c8 sqldk!SchedulerManager::ThreadEntryPoint+0x236 kernel32!BaseThreadInitThunk+0xd ntdll!RtlUserThreadStart+0x1d
sqlmin!CLinkedMap<__int64,CCheckReadersAndWriters::CCounts>::FDelete+0x34sqlmin!CCheckReadersAndWriters::Release+0xfb
sqlmin!CMainIlb::{dtor}+0x3d sqlmin!CMainIlb::`scalar deleting destructor'+0x3d sqlmin!CBlobHandleFactoryMain::ReleaseILockBytes+0x13 sqlmin!CMainIlb::Release+0xf0 sqllang!CTraceRpcBinaryStream::~CTraceRpcBinaryStream+0x80 sqllang!CTraceTvpData::{dtor}+0x11 sqllang!CRpcTraceHelper::CleanUpTraceTvpData+0x55 sqllang!CRpcTraceHelper::TracePostExec+0x1bf sqllang!CRPCExecEnv::OnExecFinish+0xaa sqllang!CProtocolHeaderInfo::{dtor}+0xffffffff`ffb158e2 sqllang!process_request+0x764 sqllang!process_commands+0x51c sqldk!SOS_Task::Param::Execute+0x21e sqldk!SOS_Scheduler::RunTask+0xa8 sqldk!SOS_Scheduler::ProcessTasks+0x29a sqldk!SchedulerManager::WorkerEntryPoint+0x261 sqldk!SystemThread::RunWorker+0x8f sqldk!SystemThreadDispatcher::ProcessWorker+0x3c8 sqldk!SchedulerManager::ThreadEntryPoint+0x236 kernel32!BaseThreadInitThunk+0x1a ntdll!RtlUserThreadStart+0x1d
Статус
Корпорация Майкрософт подтверждает, что это проблема продуктов Майкрософт, перечисленных в разделе "Относится к".
Author: jannaw
Writer: v-yipli Технический редактор: pradm; jannaw; hozhan Editor: v-mordew