"Операція очікування закінчилася" під час запуску SQL Server в Hyper-V


22

Я запускаю SQL Server (2012) в екземплярі Hyper-V. У ньому багато ресурсів і 25% зарезервовано від загальних ресурсів, VHD розміщується на дуже швидкому SSD-накопичувачі для швидкого часу відгуку.

Раз у раз, коли додатки, які використовують SQL Server, не були доступні деякий час, вони отримують помилку "Операція очікування вичерпана". Під час перезавантаження або повторного спроби отримати доступ до бази даних, здається, він "прокинувся" і проходить так само швидко, як ніколи.

Чи є спосіб переконатись, що цей режим м’якого сну не відбувається в таких умовах?

Додано

Деталі винятку : System.ComponentModel.Win32Exception: Операція очікування закінчилася


1
Однією з можливостей перевірити є параметри бази даних, переконайтеся, що для параметра Автозакриття встановлено значення False. Ви могли б бачити події закриття та відкриття в журналі SQL, якби це відбувалося.
Джейсон Камберленд

Зміна функції автоматичного закриття не спрацювало, ймовірно, це не те, що сповільнюється. Проблема, швидше за все, стосується комбінації Hyper-V & SQL Server.
Ерік Герліц

Якщо інші відповіді не спрацьовують, спробуйте stackoverflow.com/a/28626223/1290868, який вказує зробити те, що є на support.microsoft.com/en-us/kb/2605597 Це може допомогти.
мюс

Для сервера Sql мета повинна бути зарезервована на 100%.
Джоель Коель

Відповіді:


22

Спробуйте виконати цю команду:

exec sp_updatestats

Це, неймовірно, вирішило проблему.

Код вище його помилки до виконання команди.

[Win32Exception (0x80004005): The wait operation timed out]

[SqlException (0x80131904): Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +1742110
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5279619
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +242
   System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +1434
   System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +61
   System.Data.SqlClient.SqlDataReader.get_MetaData() +90
   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +365
   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite) +1355
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +175
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +53
   System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +134
   System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +41
   System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) +10
   System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +140
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +316
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) +86
   System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +1482
   System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +21
   System.Web.UI.WebControls.DataBoundControl.PerformSelect() +138
   System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +30
   System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +79
   System.Web.UI.WebControls.BaseDataBoundControl.OnPreRender(EventArgs e) +22
   System.Web.UI.Control.PreRenderRecursiveInternal() +83
   System.Web.UI.Control.PreRenderRecursiveInternal() +155
   System.Web.UI.Control.PreRenderRecursiveInternal() +155
   System.Web.UI.Control.PreRenderRecursiveInternal() +155
   System.Web.UI.Control.PreRenderRecursiveInternal() +155
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +974

3
Не виконуйте цю команду, не розуміючи наслідків. sqlperformance.com/2013/07/sql-statistics/statistics-updates і stackoverflow.com/questions/23440770 / ...
Rosdi

2
Ви повинні знати ймовірні наслідки, перш ніж виконувати цю команду (фактично кожну команду, яку ви виконуєте).
Sohail xIN3N

3
Мене щиро цікавить ваше питання про наслідки цього? Повідомлення, пов’язане з публікацією, говорить: "насправді це може принести більше шкоди, і це найменш рекомендований варіант". - але, здається, єдина проблема полягає в тому, що вона може робити речі, які вже роблять ваші плани технічного обслуговування, або бути неефективною - якщо альтернативою є повністю порушений екземпляр сервера SQL - я не впевнений, чому ви б заперечили, що це може бути повільним чи зайве?
Ян Грінґер

1
Мені цікаво те саме, що і @IanGrainger ... комусь важливо детальніше пояснити, чому виконання exec sp_updatestats- це погана ідея?
Flo

1

У мене було те саме питання. Біг exec sp_updatestatsпрацював іноді, але не завжди. Я вирішив використовувати NOLOCKоператор у своїх запитах, щоб пришвидшити запити. Просто додайте NOLOCKпісля пункту FROM, наприклад:

SELECT clicks.entryURL, clicks.entryTime, sessions.userID
FROM sessions, clicks WITH (NOLOCK)
WHERE sessions.sessionID = clicks.sessionID AND clicks.entryTime > DATEADD(day, -1, GETDATE())

Прочитайте повну статтю тут .


1

У мене була точно така ж проблема, і я виявив, що це було викликано недостатньою розподілом пам'яті на Hyper-V VM. У мене було встановлено динамічну пам’ять, але вона не розширювала масштаб, як потрібно - перехід на фіксовану кількість пам'яті, в моєму випадку 32 Гб, вирішив проблему. Взаємодія між SqlBulkCopy та Sql Server, здається, не може отримати більше пам'яті, коли потрібно ??

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.