"Operasi tunggu habis" saat menjalankan SQL Server di Hyper-V

22

Saya menjalankan SQL Server (2012) pada contoh Hyper-V. Ini memiliki banyak sumber daya dan cadangan 25% dari total sumber daya, VHD ditempatkan pada drive SSD yang sangat cepat untuk waktu respons yang cepat.

Sesekali ketika aplikasi yang menggunakan SQL Server belum diakses untuk sementara waktu mereka mendapatkan kesalahan "Operasi tunggu habis". Ketika memuat ulang atau mencoba lagi untuk mengakses database sepertinya telah "bangun" dan secepat sebelumnya.

Apakah ada cara untuk memastikan bahwa mode tidur lunak ini tidak terjadi pada lingkungan seperti ini?

Ditambahkan

Detail Pengecualian: System.ComponentModel.Win32Exception: Operasi tunggu habis

Eric Herlitz
sumber
1
Satu kemungkinan untuk memeriksa adalah pada opsi basis data, pastikan bahwa Tutup Otomatis diatur ke Salah. Anda akan dapat melihat peristiwa penutupan dan pembukaan di log SQL jika ini terjadi.
Jason Cumberland
Mengubah AutoClose tidak berfungsi, mungkin bukan basis data yang melambat. Masalah ini kemungkinan besar terkait dengan Kombinasi Hyper-V & SQL Server.
Eric Herlitz
Jika jawaban lain tidak berfungsi, coba stackoverflow.com/a/28626223/1290868 yang memberi tahu untuk melakukan apa yang ada di support.microsoft.com/en-us/kb/2605597 Ini mungkin membantu.
Myuce
Untuk Sql Server, tujuannya harus 100% dicadangkan.
Joel Coel

Jawaban:

22

Cobalah untuk menjalankan perintah ini:

exec sp_updatestats

Ini, luar biasa, menyelesaikan masalah.

Kode di atas adalah kesalahannya sebelum perintah dijalankan.

[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
Jeferson Tenorio
sumber
3
Jangan hanya menjalankan perintah ini tanpa memahami konsekuensinya. sqlperformance.com/2013/07/sql-statistics/statistics-updates dan stackoverflow.com/questions/23440770/…
Rosdi
2
Anda harus mengetahui konsekuensi yang mungkin terjadi sebelum menjalankan perintah ini (sebenarnya setiap perintah yang Anda jalankan).
Sohail xIN3N
3
Saya benar-benar tertarik dengan kekhawatiran Anda tentang konsekuensi dari ini? Tulisan bertautan mengatakan "sebenarnya bisa melakukan lebih banyak kerusakan yang baik, dan merupakan opsi yang paling tidak direkomendasikan." - tetapi tampaknya satu-satunya masalah adalah bahwa hal itu mungkin melakukan hal-hal yang sudah dilakukan rencana pemeliharaan Anda, atau menjadi tidak efisien - jika alternatifnya adalah contoh server SQL yang benar-benar rusak - Saya tidak yakin mengapa Anda keberatan bahwa itu bisa lambat atau berlebihan?
Ian Grainger
1
Saya bertanya-tanya hal yang sama dengan @IanGrainger ... ada yang peduli untuk menjelaskan mengapa mengeksekusi exec sp_updatestatsadalah ide yang buruk?
Flo
1

Saya memiliki masalah yang sama. Berlari exec sp_updatestatsmemang bekerja kadang-kadang, tetapi tidak selalu. Saya memutuskan untuk menggunakan NOLOCKpernyataan itu di pertanyaan saya untuk mempercepat pertanyaan. Cukup tambahkan NOLOCKsetelah klausa FROM Anda, misalnya:

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

Baca artikel selengkapnya di sini .

Flo
sumber
1

Saya memiliki masalah yang sama persis dan saya menemukan bahwa itu disebabkan oleh alokasi memori yang tidak cukup pada Hyper-V VM. Saya memiliki memori yang diatur ke dinamis tetapi tidak ditingkatkan sesuai kebutuhan - beralih ke jumlah memori yang tetap, dalam kasus saya 32GB, memecahkan masalah. Interaksi antara SqlBulkCopy dan Sql Server tampaknya tidak bisa mendapatkan lebih banyak memori saat diperlukan ??

TRex
sumber