Các hoạt động chờ đã hết thời gian chờ khi chạy SQL Server trong Hyper-V


22

Tôi đang chạy SQL Server (2012) trên phiên bản Hyper-V. Nó có nhiều tài nguyên và 25% dự trữ trong tổng số tài nguyên, VHD được đặt trên ổ SSD rất nhanh để có thời gian phản hồi nhanh.

Thỉnh thoảng khi các ứng dụng sử dụng SQL Server không được truy cập trong một thời gian, chúng sẽ gặp lỗi "Thao tác chờ đã hết thời gian". Khi tải lại hoặc thử lại để truy cập cơ sở dữ liệu, nó dường như đã được "đánh thức" và nhanh hơn bao giờ hết.

Có cách nào để đảm bảo rằng chế độ ngủ mềm này không xảy ra trên loại môi trường này không?

Thêm

Chi tiết ngoại lệ: System.ComponentModel.Win32Exception: Thao tác chờ đã hết thời gian


1
Một khả năng để kiểm tra là trên các tùy chọn cơ sở dữ liệu, đảm bảo rằng Tự động đóng được đặt thành Sai. Bạn sẽ có thể thấy các sự kiện đóng và mở trong nhật ký SQL nếu điều này xảy ra.
Jason Cumberland

Thay đổi AutoClose không hoạt động, có lẽ đó không phải là cơ sở dữ liệu chậm. Vấn đề rất có thể liên quan đến Kết hợp máy chủ Hyper-V & SQL.
Eric Herlitz

Nếu các câu trả lời khác không hoạt động, hãy thử stackoverflow.com/a/28626223/1290868 để biết phải làm gì trên support.microsoft.com/en-us/kb/2605597 Điều này có thể giúp ích.
myuce

Đối với Sql Server, mục tiêu phải được bảo lưu 100%.
Joel Coel

Câu trả lời:


22

Hãy thử thực hiện lệnh này:

thực hiện sp_updatestats

Nó, vô cùng, giải quyết vấn đề.

Mã ở trên lỗi của nó trước khi lệnh đã được thực thi.

[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
Đừng đơn giản chạy lệnh này mà không hiểu hậu quả. sqlperformance.com/2013/07/sql-statistic/statistic-updatesstackoverflow.com/questions/23440770/
trộm

2
Bạn nên biết hậu quả có thể xảy ra trước khi chạy lệnh này (thực tế là mọi lệnh bạn chạy).
Sohail xIN3N

3
Tôi thực sự quan tâm đến mối quan tâm của bạn về hậu quả của việc này? Bài đăng được liên kết nói rằng "thực sự có thể gây ra nhiều thiệt hại tốt hơn, và là lựa chọn ít được khuyến nghị nhất." - nhưng có vẻ như vấn đề duy nhất là nó có thể làm những việc mà kế hoạch bảo trì của bạn đã làm hoặc không hiệu quả - nếu thay thế là một phiên bản máy chủ SQL bị hỏng hoàn toàn - tôi không chắc tại sao bạn lại nghĩ rằng nó có thể bị chậm hay dư thừa?
Ian Grainger

1
Tôi đang tự hỏi điều tương tự như @IanGrainger ... bất cứ ai quan tâm đến việc giải thích tại sao thực thi exec sp_updatestatslà một ý tưởng tồi?
Flo

1

Tôi gặp vấn đề tương tự. Chạy exec sp_updatestatsđôi khi làm việc, nhưng không phải luôn luôn. Tôi quyết định sử dụng NOLOCKcâu lệnh trong các truy vấn của mình để tăng tốc các truy vấn. Chỉ cần thêm NOLOCKsau mệnh đề TỪ của bạn, ví dụ:

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

Đọc toàn bộ bài viết ở đây .


1

Tôi đã có cùng một vấn đề và tôi thấy rằng nguyên nhân là do không đủ phân bổ bộ nhớ trên Hyper-V VM. Tôi có bộ nhớ được đặt thành động nhưng nó không tăng theo yêu cầu - chuyển sang một lượng bộ nhớ cố định, trong trường hợp của tôi là 32GB, đã giải quyết được vấn đề. Sự tương tác giữa SqlBulkCopy và Sql Server dường như không thể có thêm bộ nhớ khi được yêu cầu ??

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.