“ การดำเนินการรอหมดเวลา” เมื่อใช้ SQL Server ใน Hyper-V


22

ฉันใช้ SQL Server (2012) ในอินสแตนซ์ Hyper-V มันมีทรัพยากรมากมายและสงวนไว้ 25% ของทรัพยากรทั้งหมด VHD นั้นถูกวางไว้บนไดรฟ์ SSD ที่เร็วมากสำหรับเวลาตอบสนองที่รวดเร็ว

ทุกครั้งที่แอปพลิเคชันที่ใช้ SQL Server ไม่สามารถเข้าถึงได้ในขณะที่พวกเขาได้รับข้อผิดพลาด "การดำเนินการรอหมดเวลา" เมื่อโหลดใหม่หรือลองใหม่เพื่อเข้าถึงฐานข้อมูลดูเหมือนว่าจะ "ถูกปลุกให้ตื่นขึ้น" และเร็วที่สุดเท่าที่เคยมีมา

มีวิธีใดบ้างที่จะมั่นใจได้ว่าโหมดสลีปหลับนี้จะไม่เกิดขึ้นในสภาพแวดล้อมแบบนี้?

ที่เพิ่ม

รายละเอียดข้อยกเว้น: System.ComponentModel.Win32Exception: การดำเนินการรอหมดเวลา


1
ความเป็นไปได้อย่างหนึ่งในการตรวจสอบอยู่ในตัวเลือกฐานข้อมูลตรวจสอบให้แน่ใจว่าตั้งปิดอัตโนมัติเป็นเท็จ คุณจะสามารถเห็นเหตุการณ์การปิดและเปิดในบันทึก SQL หากสิ่งนี้เกิดขึ้น
Jason Cumberland

การเปลี่ยน AutoClose ไม่ทำงานอาจไม่ใช่ฐานข้อมูลที่ช้าลง ปัญหานี้น่าจะเกี่ยวข้องกับ Hyper-V & SQL Server Combination มากที่สุด
Eric Herlitz

หากคำตอบอื่น ๆ ไม่ทำงานลองstackoverflow.com/a/28626223/1290868ซึ่งบอกให้ทำสิ่งที่อยู่ในsupport.microsoft.com/en-us/kb/2605597สิ่งนี้อาจช่วยได้
myuce

สำหรับเซิร์ฟเวอร์ SQL เป้าหมายควรได้รับการสงวน 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-updatesและstackoverflow.com/questions/23440770/…
Rosdi

2
คุณควรทราบถึงผลลัพธ์ที่เป็นไปได้ก่อนที่จะเรียกใช้คำสั่งนี้ (อันที่จริงทุกคำสั่งที่คุณเรียกใช้)
Sohail xIN3N

3
ฉันสนใจอย่างแท้จริงเกี่ยวกับความกังวลของคุณเกี่ยวกับผลที่ตามมาของสิ่งนี้หรือไม่? โพสต์ที่เชื่อมโยงกล่าวว่า "สามารถสร้างความเสียหายได้ดีกว่าและเป็นตัวเลือกที่แนะนำน้อยที่สุด" - แต่ดูเหมือนว่าปัญหาเดียวคือมันอาจทำในสิ่งที่แผนการบำรุงรักษาของคุณทำไปแล้วหรือไม่มีประสิทธิภาพ - ถ้าทางเลือกเป็นอินสแตนซ์ของเซิร์ฟเวอร์ SQL ที่เสียอย่างสมบูรณ์ - ฉันไม่แน่ใจว่าทำไมคุณถึงคิดว่ามันช้า หรือซ้ำซ้อน?
Ian Grainger

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 ฉันมีการตั้งค่าหน่วยความจำแบบไดนามิก แต่มันไม่ได้ปรับขนาดตามที่ต้องการ - การเปลี่ยนไปใช้หน่วยความจำคงที่ในกรณีของฉัน 32GB แก้ไขปัญหาได้ การโต้ตอบระหว่าง SqlBulkCopy และ SQL Server ไม่สามารถรับหน่วยความจำเพิ่มเติมได้เมื่อต้องการ?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.