Корпорація Майкрософт розповсюджує виправлення Microsoft SQL Server 2012 в одному завантажуваному файлі. Оскільки виправлення сукупні, кожен новий випуск містить усі виправлення та всі оновлення системи безпеки, які входили в попередній випуск оновлення SQL Server 2012 року.
Ознаки
Розглянемо такий сценарій:
-
Створюється збережена процедура, яка використовує табличного параметра (TVP) у Microsoft SQL Server 2012.
-
Використовується SQL Profiler або SQL Server Extended Events, щоб записувати події RPC:Starting і RPC:Completed.
-
Виконання запиту, який використовує TVP.
-
Час очікування запиту вичерпано.
У цьому випадку виникає помилка неприбуткового планувальника, і запити, які виконуються в одному планувальнику, виконуються повільно. Крім того, у папці журналу SQL Server створюється файл міні-дампа.Коли ця проблема виникає, з'являється повідомлення про помилку приблизно такого вигляду:
System.Data.SqlClient.SqlException (0x80131904): час очікування завершився. Проміжок часу очікування минув до завершення операції або сервер не відповідає.at System.Data.SqlClient.SqlInternalConnection.OnError(виняток SqlException, Boolean breakConnection)at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObject, Помилка UInt32)у system.Data.SqlClient.TdserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObject stateObject)at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()at System.Data.SqlClient.TdsParserStateObject.ReadByte()at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObject stateObj)at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)на System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()at TVPApp.Program.Main(String[] args)
Помилка не пов'язаний планувальник разом із повідомленням про помилку, подібне до наведеного нижче, записується в журнал помилок SQL Server:
<><час> сервера за допомогою версії "dbghelp.dll" "4.0.5"<дати><час> server ***Не вдалося отримати контекст потоку для spid #<><час> server * *******************************************************************************><2 Дата><> сервер *><6 дата><час> server * BEGIN STACK DUMP:><0 date><Time> Server * <Date><Time> spid #><8 Date><Time> Server *><2><дати> server * Не пов'язаний планувальник><6 дати><час> server *<дата><час> Server * *******************************************************************************<дата><час> серверний сигнатура стека для дампа 0x000000000000002C<дата><час> сервер зовнішній дамп процес повертає код 0x20000001.Зовнішній процес дампа не повернув помилок.<><час> серверний процес 0:0:0 (0x1670) робочий 0x0000000004EDE160, як видається, не поступається в планувальнику 5. Час створення потоку: 13014210386757. Використовується ЦП потоку приблизно: ядра 0 мс, користувач 70106 мс. Використання процесів 16%. Бездіяльність системи 77%. Інтервал: 70140 мс.<><час> серверний процес 0:0:0 (0x1670) робочий 0x0000000004EDE160, як видається, не поступається в планувальнику 5. Час створення потоку:
Причина
Ця проблема виникає через помилку в обробнику баз даних SQL Server 2012. Текстові стовпці в ТВП реалізуються як рядки або буфери, а збільшення кількості рядків збільшує кількість буферів. Проте процес, який випускає буфери, займає багато часу. Таким чином, не пов'язані з планувальником помилка створюється під час випуску і стискання операції відбуваються. Примітка. Аналогічну проблему вирішено в наведеній нижче статті бази знань Майкрософт. Однак, сукупний пакет оновлень, описане в статті не для запиту, час очікування проблеми.
2520808 ВИПРАВЛЕННЯ: Помилка не пов'язаний планувальник під час виконання запиту, який використовує TVP у SQL Server 2008 або SQL Server 2008 R2, якщо використовується SQL Profiler або SQL Server розширені події
Спосіб вирішення
Сукупні відомості про оновлення
Сукупний пакет оновлень 5 для пакета оновлень 1 (SP1) SQL Server 2012
Виправлення цієї проблеми вперше випущено в сукупному пакеті оновлень 5. Щоб отримати додаткові відомості про те, як отримати цей пакет сукупний пакет оновлень для SQL Server 2012 клацніть номер статті в базі знань Microsoft Knowledge Base:
2861107 Сукупний пакет оновлень 5 для SQL Server 2012Note, оскільки збірки сукупні, кожен новий випуск виправлення містить усі виправлення та всі виправлення системи безпеки, які входили в попередній випуск виправлення SQL Server 2012. Радимо застосувати останній випуск виправлення, який містить це виправлення. Щоб отримати докладні відомості, клацніть номер цієї статті бази знань Microsoft:
2772858 Збірки SQL Server 2012, випущені після випуску пакета оновлень 1 SQL Server 2012
Інші способи вирішення
Щоб вирішити цю проблему, скористайтесь одним із запропонованих нижче способів.
-
Не використовуйте SQL Profiler або SQL Server extended Events.
-
Зніміть прапорці RPC:Starting і RPC:Completed у визначенні трасування.
Стан
Корпорація Майкрософт підтвердила, що це проблема в продуктах Microsoft, перелічених у розділі "Стосується".