Hyper-V에서 SQL Server를 실행할 때 "대기 작업 시간이 초과되었습니다"


22

Hyper-V 인스턴스에서 SQL Server (2012)를 실행하고 있습니다. 리소스가 많고 총 리소스를 25 % 보유하고 있으며 VHD는 빠른 응답 시간을 위해 매우 빠른 SSD 드라이브에 배치됩니다.

때때로 SQL Server를 사용하는 응용 프로그램에 잠시 동안 액세스하지 않은 경우 "대기 작업 시간이 초과되었습니다"라는 오류가 발생합니다. 데이터베이스를 다시로드하거나 다시 액세스 할 때 데이터베이스가 "깨어 난"것처럼 보이며 그 어느 때보 다 빠릅니다.

이런 종류의 환경에서이 소프트 슬립 모드가 발생하지 않도록하는 방법이 있습니까?

추가

예외 정보 : System.ComponentModel.Win32Exception : 대기 작업 시간이 초과되었습니다.


1
확인할 한 가지 가능성은 데이터베이스 옵션에서 자동 닫기가 False로 설정되어 있는지 확인하십시오. 이것이 발생한 경우 SQL 로그에서 닫기 및 열기 이벤트를 볼 수 있습니다.
Jason Cumberland

자동 닫기를 변경해도 작동하지 않습니다. 속도가 느려지는 데이터베이스가 아닐 수도 있습니다. 이 문제는 대부분 Hyper-V 및 SQL Server 조합과 관련이 있습니다.
Eric Herlitz

다른 답변이 작동하지 않으면 stackoverflow.com/a/28626223/1290868 을 시도하십시오 . support.microsoft.com/en-us/kb/2605597 에서 수행 할 작업 을 지시합니다 . 도움이 될 수 있습니다.
myuce

Sql Server의 경우 목표는 100 % 예약되어 있어야합니다.
Joel Coel

답변:


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-updatesstackoverflow.com/questions/23440770/…
Rosdi

2
이 명령을 실행하기 전에 (실제로 실행하는 모든 명령) 가능한 결과를 알아야합니다.
Sohail xIN3N

3
이 결과에 대한 귀하의 우려에 대해 정말로 관심이 있습니까? 링크 된 게시물에 따르면 "실제로 더 많은 피해를 줄 수 있으며 가장 권장되는 옵션은 아닙니다." -그러나 유일한 문제는 유지 관리 계획이 이미 수행하거나 비효율적 일 수 있다는 것입니다. 대안이 완전히 고장난 SQL Server 인스턴스 인 경우-왜 이것이 느릴 수 있는지 잘 모르겠습니다. 또는 중복?
Ian Grainger

1
@IanGrainger와 같은 것이 궁금합니다. 왜 실행 exec sp_updatestats이 나쁜 아이디어 인지를 자세히 설명하는 사람 이 있습니까?
Flo

1

나는 같은 문제가 있었다. 달리기 exec sp_updatestats는 때때로 효과가 있었지만 항상 그런 것은 아닙니다. NOLOCK쿼리 속도를 높이기 위해 쿼리에서 명령문 을 사용하기로 결정했습니다 . NOLOCKFROM 절 뒤에 추가 하십시오. 예 :

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에서 메모리 할당이 충분하지 않기 때문에 발생했습니다. 메모리를 동적으로 설정했지만 필요에 따라 확장하지 못했습니다. 필자의 경우 32GB의 고정 메모리로 전환하면 문제가 해결되었습니다. SqlBulkCopy와 Sql Server 간의 상호 작용으로 필요할 때 더 많은 메모리를 확보 할 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.