“A operação de espera atingiu o tempo limite” ao executar o SQL Server no Hyper-V

21

Estou executando o SQL Server (2012) em uma instância do Hyper-V. Ele tem muitos recursos e 25% dos recursos totais, o VHD é colocado em uma unidade SSD muito rápida para tempos de resposta rápidos.

De vez em quando, quando os aplicativos que usam o SQL Server não são acessados há algum tempo, eles recebem o erro "A operação de espera atingiu o tempo limite". Ao recarregar ou tentar acessar o banco de dados, parece ter sido "acordado" e está mais rápido do que nunca.

Existe alguma maneira de garantir que este modo de suspensão não ocorra neste tipo de ambiente?

Adicionado

Detalhes da exceção: System.ComponentModel.Win32Exception: a operação de espera expirou

    
por Eric Herlitz 22.08.2012 / 13:43

3 respostas

21

Tente executar este comando:

exec sp_updatestats

Isso, incrivelmente, resolveu o problema.

O código acima é o erro antes do comando ser executado.

[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
    
por 25.10.2012 / 15:33
1

Eu tive o mesmo problema. A execução de exec sp_updatestats funcionou às vezes, mas nem sempre. Decidi usar a instrução NOLOCK em minhas consultas para acelerar as consultas. Basta adicionar NOLOCK após sua cláusula FROM, por exemplo:

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

Leia o artigo completo aqui .

    
por 02.09.2015 / 17:36
1

Eu tive exatamente o mesmo problema e descobri que isso foi causado por falta de alocação de memória na VM do Hyper-V. Eu tinha memória definida para dinâmica, mas não estava aumentando conforme necessário - a mudança para uma quantidade fixa de memória, no meu caso 32GB, resolveu o problema. A interação entre o SqlBulkCopy e o Sql Server não parece conseguir mais memória quando necessário ??

    
por 26.07.2016 / 09:54