Batas waktu kedaluwarsa. Periode waktu habis berlalu sebelum penyelesaian operasi atau server tidak merespons. Pernyataan itu telah dihentikan

296

Saya memiliki banyak pengguna di situs web saya (20000-60000 per hari), yang merupakan situs pengunduhan untuk file seluler. Saya memiliki akses jarak jauh ke server saya (windows server 2008-R2).
Saya telah menerima kesalahan "Server tidak tersedia" sebelumnya, tetapi sekarang saya melihat kesalahan batas waktu koneksi.
Saya tidak terbiasa dengan ini - mengapa itu terjadi dan bagaimana saya bisa memperbaikinya?

Kesalahan lengkapnya adalah di bawah ini:

Kesalahan Server dalam Aplikasi '/'. Batas waktu kedaluwarsa. Periode waktu habis berlalu sebelum penyelesaian operasi atau server tidak merespons. Pernyataan itu telah dihentikan. Deskripsi: Pengecualian yang tidak ditangani terjadi selama eksekusi permintaan web saat ini. Harap tinjau jejak tumpukan untuk informasi lebih lanjut tentang kesalahan dan dari mana asalnya dalam kode.

Detail Pengecualian: System.Data.SqlClient.SqlException: Timeout kedaluwarsa. Periode waktu habis berlalu sebelum penyelesaian operasi atau server tidak merespons. Pernyataan itu telah dihentikan.

Kesalahan Sumber:

Pengecualian yang tidak tertangani dihasilkan selama eksekusi permintaan web saat ini. Informasi mengenai asal dan lokasi pengecualian dapat diidentifikasi menggunakan jejak tumpukan pengecualian di bawah ini.

Jejak Tumpukan:

[SqlException (0x80131904): Waktu tunggu habis. Periode waktu habis berlalu sebelum penyelesaian operasi atau server tidak merespons. Pernyataan tersebut telah diakhiri.]
System.Data.SqlClient.SqlConnection.OnError (SqlException pengecualian, Boolean breakConnection) +404
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning () +412
System.Data.SqlCliver.Berikutnya. , SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +1363
System.Data.SqlClient.SqlCommand.FinishExecuteReaderAtara, apakah akan berjalan lebih baik jika dijalankan dengan senda
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +6389442
System.Data.SqlClient.SqlCommand.Tingkah laku saat menjalankan sebuah perilaku, jika tidak, perilaku ini akan berjalan dengan perilaku yang lebih baik, jika tidak, perilaku, perilaku, perilaku, perilaku, atau perilaku. 538
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (DbAsyncHasil hasil, String methodName, Boolean sendToPipe) +689
System.Data.SqlClient.SqlCommand.ExecuteNonQuery () +327
NovinMake String data) , Int32 & rowsAffected) +209
DataLayer.OnlineUsers.Update_SessionEnd_And_Online (Obyek Session_End, Boolean Online) +440
NiceFileExplorer.Global.Application_Start (Pengirim objek, EventArgs e) +163

[HttpException (0x80004005): Waktu tunggu habis. Periode waktu habis berlalu sebelum penyelesaian operasi atau server tidak merespons. Pernyataan tersebut telah dihentikan.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (HttpContext konteks, aplikasi HttpApplication) +4052053
System.Web.HttpApplication.RegisterEventSubscriptionWithIIS (IntPtr apppertextttttttttttttttttpttpttpttppp.pdf)
. InitSpecial (status HttpApplicationState, MethodInfo [], IntPtr appContext, konteks HttpContext) +352
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr appContext, konteks HttpContext konteks) +407Peningkatan
ProyekPertama.Terkuat dengan ProyekPertambahan.

[HttpException (0x80004005): Waktu tunggu habis. Periode waktu habis berlalu sebelum penyelesaian operasi atau server tidak merespons. Pernyataan tersebut telah diakhiri.]
System.Web.HttpRuntime.FirstRequestInit (HttpContextext) +11686928 System.Web.HttpRuntime.PastikanFirstRequestInit (HttpContext konteks) +141 System.Web.HttpRuntime.Teks teks KonteksAku


EDIT SETELAH JAWABAN:
saya Application_Startdi Global.asaxadalah seperti di bawah ini:

protected void Application_Start(object sender, EventArgs e)
{
    Application["OnlineUsers"] = 0;

    OnlineUsers.Update_SessionEnd_And_Online(
        DateTime.Now,
        false);

    AddTask("DoStuff", 10);
}

Prosedur tersimpan yang dipanggil adalah:

ALTER Procedure [dbo].[sp_OnlineUsers_Update_SessionEnd_And_Online]
    @Session_End datetime,
    @Online bit
As
Begin
    Update OnlineUsers
    SET
        [Session_End] = @Session_End,
        [Online] = @Online

End

Saya memiliki dua metode untuk mendapatkan pengguna online:

  1. menggunakan Application["OnlineUsers"] = 0;
  2. yang lain menggunakan basis data

Jadi, untuk metode # 2 saya mengatur ulang semua Pengguna Online di Application_Start. Ada lebih dari 482.751 catatan dalam tabel itu.

SilverLight
sumber
1
Seperti yang tertulis di sini Default adalah 15 detik
V4Vendetta
1
Lebih baik membuat analisis akar penyebab, Ada berbagai alasan untuk menyebabkan masalah seperti itu. Paling mendasar adalah struktur kueri yang kompleks. Saya menghadapi masalah yang sama ketika saya mengambil Gambar yang disimpan sebagai nilai Hex dalam tabel.
Vijay Kumbhoje
Selain penyebab di atas, saya akan menambahkan satu lagi: Kunci waktu habis: docs.microsoft.com/en-us/sql/t-sql/statements/... Jika utas ini menunggu kunci terlalu lama, maka akan habis berdasarkan pada dokumen di atas.
Herbert Yu

Jawaban:

344

Sepertinya Anda memiliki kueri yang membutuhkan waktu lebih lama dari yang seharusnya. Dari jejak stack dan kode Anda, Anda harus dapat menentukan dengan tepat apa itu query.

Jenis waktu habis ini dapat memiliki tiga penyebab;

  1. Ada jalan buntu di suatu tempat
  2. Statistik dan / atau cache rencana kueri basis data salah
  3. Permintaannya terlalu rumit dan perlu disetel

Jalan buntu bisa sulit untuk diperbaiki, tetapi mudah untuk menentukan apakah itu masalahnya. Terhubung ke database Anda dengan Sql Server Management Studio. Di panel kiri klik kanan pada node server dan pilih Activity Monitor . Lihatlah proses yang sedang berjalan. Biasanya sebagian besar akan diam atau berjalan. Ketika masalah terjadi, Anda dapat mengidentifikasi proses yang diblokir oleh negara proses. Jika Anda mengklik kanan pada proses dan memilih detail itu akan menunjukkan kepada Anda permintaan terakhir yang dieksekusi oleh proses.

Masalah kedua akan menyebabkan database menggunakan rencana kueri yang tidak optimal. Itu dapat diatasi dengan menghapus statistik:

exec sp_updatestats

Jika itu tidak berhasil, Anda juga bisa mencoba

dbcc freeproccache

Anda seharusnya tidak melakukan ini ketika server Anda berada di bawah beban berat karena untuk sementara waktu akan menimbulkan hit kinerja yang besar karena semua procs dan kueri yang disimpan dikompilasi ulang ketika pertama kali dieksekusi. Namun, karena Anda menyatakan masalah terkadang terjadi , dan jejak tumpukan menunjukkan aplikasi Anda mulai, saya pikir Anda menjalankan kueri yang hanya dijalankan sesekali. Anda mungkin lebih baik dengan memaksa SQL Server untuk tidak menggunakan kembali rencana permintaan sebelumnya. Lihat jawaban ini untuk perincian tentang bagaimana melakukan itu.

Saya sudah menyentuh masalah ketiga, tetapi Anda dapat dengan mudah menentukan apakah kueri perlu disetel dengan menjalankan kueri secara manual, misalnya menggunakan Sql Server Management Studio. Jika kueri membutuhkan waktu terlalu lama untuk diselesaikan, bahkan setelah mengatur ulang statistik, Anda mungkin perlu menyetelnya. Untuk bantuan dengan itu, Anda harus memposting kueri yang tepat dalam pertanyaan baru.

Marnix van Valen
sumber
39
Saya mengalami kesalahan yang sama tetapi dalam kueri yang 'hanya' mengambil 8secs ... dan tip Anda tentang exec sp_updatestatsmemecahkan masalah saya. Terimakasih banyak!
nrod
2
Memecahkan masalah seperti ini hampir tidak pernah menjadi masalah penyetelan waktu tunggu atau ukuran kumpulan koneksi. Anda harus menyelam dan mencari tahu penyebab dasarnya. Jika Anda memerlukan bantuan untuk menyelesaikan akar penyebab itu, Anda dapat memposting pertanyaan Anda sendiri.
Marnix van Valen
5
Ini tentu saja bukan jalan buntu. Ini mungkin disebabkan oleh pemblokiran yang berlebihan, tetapi kebuntuan diselesaikan dalam sedetik, dan mereka menghasilkan kesalahan yang berbeda. Ini mungkin pemblokiran berlebihan, tetapi bukan jalan buntu.
Michael J Swart
1
apakah kami yakin ini adalah Timeout Perintah dan bukan Timeout Koneksi? "System.Data.SqlClient.SqlConnection.OnError" kepada saya menunjukkan masalah Sambungan.
Mike W
1
@ PrashantPimpale Itu tergantung Jika Anda memiliki masalah serius dalam produksi di mana statistik yang salah menghasilkan rencana eksekusi yang buruk, ya, ini bisa menjadi solusi. Kecuali masalah luar biasa (seperti kegagalan perangkat keras), memperbarui statistik tidak akan merusak basis data Anda. Ini mungkin menyebabkan sedikit permintaan lebih lambat. Pada akhirnya, itu adalah panggilan Anda.
Marnix van Valen
155

Dalam kode tempat Anda menjalankan prosedur tersimpan, Anda harus memiliki sesuatu seperti ini:

SqlCommand c = new SqlCommand(...)
//...

Tambahkan baris kode seperti itu:

c.CommandTimeout = 0;

Ini akan menunggu sebanyak waktu yang diperlukan agar operasi selesai.

Elastep
sumber
143
Anda juga harus menyadari bahwa nilai 0 tidak direkomendasikan : Nilai 0 indikasi tanpa batas, dan harus dihindari dalam CommandTimeout karena upaya untuk mengeksekusi perintah akan menunggu tanpa batas. Lebih baik untuk belajar berapa banyak waktu yang dibutuhkan perintah, dan meningkatkan nilai Timeout jika diperlukan.
Otiel
7
Saya setuju dengan Otiel dan menurunkan jawaban Anda: Saat mengatur commandTimeout ke 0, Anda tidak memberikan server web kesempatan untuk memulihkan dari server database yang tidak merespons. Kedua ketika Anda mencapai batas waktu default Anda harus mempertimbangkan untuk melihat penyebabnya. Dalam kebanyakan kasus, lebih baik untuk memperbaiki kueri daripada menaikkan batas waktu.
Maarten Kieft
10
Saya tidak akan jatuh ke dalam perangkap karena tidak merekomendasikannya. Ini sangat berguna bagi saya dan tugas-tugas terjadwal harian saya: Memiliki batas waktu tak terbatas tidak menghentikan proses penyelesaian dan mengembalikan kesalahan jika terjadi kesalahan. Sederhananya, itu hanya memungkinkan Anda untuk membiarkan permintaan selesai kapan pun diperlukan, tanpa memberi Anda masalah nanti, karena Anda belum mengalokasikan cukup waktu untuk proses untuk menyelesaikan. Anda juga dapat menghindari mengunci program Anda dengan multi-threading.
WonderWorker
2
Ya untuk transfer data besar yang tidak mengatur ini tidak masuk akal. Jika Anda mentransfer jutaan baris, maka apa yang dikatakan Otiel dan BlackHawkDesign tidak masuk akal.
bluerubez
Dalam 20 tahun pengembangan data-sentris, saya tidak pernah perlu melakukan ini. Hampir selalu ada solusi yang cukup sederhana yang memberikan kinerja yang lebih baik dan tidak menciptakan peluang bagi satu proses tunggal untuk dihancurkan di database sepanjang hari. Sebagian besar masalah kinerja db dapat disetel ke tempat mereka melakukan beberapa urutan besaran lebih cepat. Yaitu, proses yang Anda tunggu 3 jam untuk selesai, mungkin bisa disetel hingga 3 menit atau bahkan 3 detik.
b_levitt
25

Anda bisa mengatur CommandTimeoutproperti dari Perintah SQL untuk memungkinkan transaksi SQL berjalan lama.

Anda mungkin juga perlu melihat SQL Query yang menyebabkan batas waktu.

Kev Ritchie
sumber
hai, "atau Anda perlu melihat SQL Query yang menyebabkan batas waktu" -> di sql server 2008 di mana saya harus memeriksa batas waktu itu?
SilverLight
Anda mungkin perlu menguji Prosedur Tersimpan yang dipanggil dari DataLayer.OnlineUsers.Update_SessionEnd_And_Online karena Stack Trace tampaknya mengarah ke sana. Ambil salinan live database untuk diuji dan jalankan Prosedur Tersimpan dengan melewati parameter yang diperlukan, jika perlu lebih dari 30 detik untuk menyelesaikan, itu sebabnya Anda mendapatkan waktu istirahat. Saya berasumsi Anda memiliki akses ke SQL Server Management Studio.
Kev Ritchie
ya, saya punya akses ke sql server 2008. saya harus mencoba cara Anda.
SilverLight
Jika Anda menemukan prosedur tersimpan yang menyebabkan masalah, Anda dapat menjalankan kueri yang terkandung dalam prosedur tersimpan melalui Penasihat Penyesuaian Database yang akan menyarankan jika Anda memerlukan indeks dll. Tautan di sini msdn.microsoft.com/en-us/library /ms174202.aspx
Kev Ritchie
12

Sementara semua tanggapan sebelumnya membahas masalah ini, mereka tidak mencakup semua kasus.

Microsoft telah mengakui masalah ini dan memperbaikinya pada 2011 untuk sistem operasi yang didukung, jadi jika Anda mendapatkan jejak tumpukan seperti:

Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)

Anda mungkin perlu memperbarui majelis .NET Anda.

Masalah ini terjadi karena kesalahan dalam algoritma koneksi-coba lagi untuk mirrored database.

Ketika algoritma coba lagi digunakan, penyedia data menunggu panggilan baca (SniReadSync) yang pertama selesai. Panggilan dikirim ke komputer back-end yang menjalankan SQL Server, dan waktu tunggu dihitung dengan mengalikan nilai batas waktu koneksi dengan 0,08. Namun, penyedia data salah mengatur koneksi ke status terkutuk jika respons lambat dan jika panggilan SniReadSync pertama tidak selesai sebelum waktu tunggu berakhir.

Lihat KB 2605597 untuk detailnya

https://support.microsoft.com/kb/2605597

Matcheek
sumber
9

Mungkin itu akan bermanfaat bagi seseorang. Saya menghadapi masalah yang sama dan dalam kasus saya alasannya adalah SqlConnection dibuka dan tidak dibuang dalam metode yang saya panggil secara berulang dengan sekitar 2500 iterasi. Kolam koneksi habis. Pembuangan yang tepat memecahkan masalah.

kekekalan
sumber
ini! tepatnya ini. Masalah saya adalah saya melepaskan metode pada utas yang berbeda tanpa menunggu mereka (karena pengguna tidak memerlukan hasil dari metode itu, skrip latar belakang). Tanpa membuang (memanfaatkan usingblok) saya punya masalah batas waktu ini. Ini sepertinya menyelesaikannya.
CularBytes
apakah Anda mendapatkan kesalahan batas waktu dengan jumlah koneksi maks tercapai atau Batas waktu habis. Periode waktu habis berlalu sebelum penyelesaian operasi atau server tidak merespons. Karena, jika Anda menerima kumpulan maks yang dicapai, masuk akal untuk melihat koneksi yang bocor. tetapi, saya mendapatkan server tidak merespons kesalahan.
Jeeva Subburaj
8

Saya menghadapi masalah yang sama bekerja di sekitar 3 hari. Saya perhatikan karena jumlah rekaman kami tidak banyak, pengembang senior kami menyimpan 2 gambar dan Sidik Jari di basis data. Ketika saya mencoba mengambil nilai hex ini butuh waktu lama, saya menghitung waktu rata-rata untuk menjalankan prosedur saya sekitar 38 detik. Commandtimeout default adalah 30 detik sehingga kurang dari waktu rata-rata yang diperlukan untuk menjalankan prosedur tersimpan saya. Saya mengatur timeout perintah saya seperti di bawah ini

cmd.CommandTimeout = 50

dan itu berfungsi dengan baik tetapi kadang-kadang jika permintaan Anda membutuhkan lebih dari 50 detik itu akan meminta kesalahan yang sama.

Vijay Kumbhoje
sumber
8

Anda harus mengatur atribut CommandTimeout. Anda dapat mengatur atribut CommandTimeout di kelas anak DbContext.

public partial class StudentDatabaseEntities : DbContext
{
    public StudentDatabaseEntities()
        : base("name=StudentDatabaseEntities")
    {
        this.Database.CommandTimeout = 180;
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<StudentDbTable> StudentDbTables { get; set; }
}
Siddarth Kanted
sumber
4

Saya menemukan kesalahan ini baru-baru ini dan setelah beberapa penyelidikan singkat, menemukan penyebabnya karena kami kehabisan ruang pada disk yang memegang basis data (kurang dari 1GB).

Segera setelah saya memindahkan file database (.mdf dan .ldf) ke disk lain di server yang sama (dengan lebih banyak ruang), halaman yang sama (menjalankan kueri) yang telah habis waktu dimuat dalam tiga detik.

Satu hal lain untuk diselidiki, ketika mencoba menyelesaikan kesalahan ini, adalah ukuran file log basis data. File log Anda mungkin hanya perlu dikecilkan.

Hafiz Adewuyi
sumber
3

Saya memiliki masalah dengan perhitungan besar dalam sp_foo yang membutuhkan waktu besar jadi saya memperbaiki
dengan kode bit kecil ini

public partial class FooEntities : DbContext
{
   public FooEntities()
         : base("name=FooEntities")
    {
        this.Configuration.LazyLoadingEnabled = false;

        // Get the ObjectContext related to this DbContext
        var objectContext = (this as IObjectContextAdapter).ObjectContext;

        // Sets the command timeout for all the commands
        objectContext.CommandTimeout = 380;
    }
Nabeel Iqbal
sumber
3

Batas waktu default adalah 15 detik, untuk mengubah itu, 0 tidak terbatas, angka lainnya adalah jumlah detik.

Dalam kode

using (SqlCommand sqlCmd = new SqlCommand(sqlQueryString, sqlConnection))
   {
      sqlCmd.CommandTimeout = 0; // 0 = give it as much time as it needs to complete
      ...
    }

Di Web.Config Anda, "Command Timeout = 0;" jangan jeda, atau di bawah 1 jam (3600 detik)

  <add name="ConnectionString" connectionString="Data Source=ServerName;User ID=UserName;Password=Password;Command Timeout=3600;" providerName="System.Data.SqlClient" />
David C Fuchs
sumber
2
Itu adalah dua timeout yang berbeda. Saran pertama Anda menjawab pertanyaan itu. Yang kedua hanya akan berfungsi jika penyedia koneksi mendukungnya, yang SqlClient tidak. Bagaimanapun, batas waktu 0 tidak pernah merupakan ide yang baik dalam produksi. 30 detik adalah standar yang biasa.
Suncat2000
2

@ SilverLight .. Ini jelas masalah dengan objek Database. Ini bisa berupa kueri yang ditulis dengan buruk, atau indeks hilang. Tetapi sampai sekarang saya tidak akan menyarankan Anda untuk menambah batas waktu tanpa menyelidiki masalah dengan objek Database Anda

NovinMedia.Data.DbObject.RunProcedure(String storedProcName, IDataParameter[] parameters, Int32& rowsAffected) +209

Letakkan breakpoint pada baris kode ini untuk menemukan nama prosedur dan kemudian mengoptimalkan prosedur dengan melihat rencana pelaksanaannya.

Saya tidak dapat membantu Anda lebih lanjut hingga saat Anda memposting detail tentang prosedur tersimpan.

Amit Rai Sharma
sumber
Prosedur Tersimpan tidak melakukan hal-hal mewah. Namun sepertinya tabel OnlineUsers sedang dikunci saat prosedur sedang dijalankan. Coba profiler SQL untuk melihat apa yang terjadi di Application_Start
Amit Rai Sharma
2

mencoba

EXEC SP_CONFIGURE 'remote query timeout', 1800
reconfigure
EXEC sp_configure

EXEC SP_CONFIGURE 'show advanced options', 1
reconfigure
EXEC sp_configure

EXEC SP_CONFIGURE 'remote query timeout', 1800
reconfigure
EXEC sp_configure

lalu bangun kembali indeks Anda

maksoud
sumber
8
Bisakah Anda menjelaskan solusinya?
Hp93
0

Batas waktu kedaluwarsa karena kueri sql mengambil lebih banyak waktu daripada yang Anda atur di properti sqlCommand.CommandTimeout.

Jelas Anda dapat meningkatkan CommandTimeout untuk menyelesaikan masalah ini, tetapi sebelum melakukan itu Anda harus mengoptimalkan kueri Anda dengan menambahkan indeks. Jika Anda menjalankan kueri di studio manajemen server Sql termasuk rencana pelaksanaan aktual maka studio manajemen server Sql akan menyarankan Anda indeks yang tepat. Sebagian besar kasus Anda akan menyingkirkan masalah batas waktu jika Anda dapat mengoptimalkan permintaan Anda.

Khabir
sumber
0

TLDR :

  1. Mem-boot ulang aplikasi dan server DB adalah perbaikan tercepat di mana volume data, pengaturan jaringan, dan kode tidak berubah. Kami selalu melakukannya sebagai suatu peraturan
  2. Mungkin indikator kegagalan hard drive yang perlu diganti - periksa pemberitahuan sistem

Saya sering menemui kesalahan ini karena berbagai alasan dan memiliki berbagai solusi, termasuk:

  1. refactoring kode saya untuk menggunakan SqlBulkCopy
  2. meningkatkan nilai Timeout, seperti yang dinyatakan dalam berbagai jawaban atau memeriksa penyebab yang mendasarinya ( mungkin tidak terkait data )
  3. Connection Timeout (Default 15s) - Berapa lama waktu yang dibutuhkan untuk menunggu koneksi dibuat dengan server SQL sebelum mengakhiri - Terkait TCP / PORT - dapat melalui daftar periksa pemecahan masalah (artikel MSDN yang sangat berguna)
  4. Command Timeout (Default 30s) - Berapa lama waktu yang dibutuhkan untuk menunggu pelaksanaan kueri - Eksekusi kueri / lalu lintas jaringan - juga memiliki proses pemecahan masalah (artikel MSDN lain yang sangat berguna)
  5. Reboot server - baik aplikasi & DB Server (jika terpisah) - di mana kode dan data tidak berubah, lingkungan harus berubah - Hal pertama yang harus Anda lakukan. Biasanya disebabkan oleh tambalan (sistem operasi, .Net Framework atau tambalan atau pembaruan SQL Server). Khususnya jika pengecualian batas waktu muncul seperti di bawah ini (bahkan jika kami tidak menggunakan Azure):
    • System.Data.Entity.Core.EntityException: Pengecualian telah dimunculkan yang kemungkinan karena kegagalan sementara. Jika Anda terhubung ke database SQL Azure pertimbangkan untuk menggunakan SqlAzureExecutionStrategy. ---> System.Data.Entity.Core.EntityCommandExecutionException: Terjadi kesalahan saat menjalankan definisi perintah. Lihat pengecualian dalam untuk detailnya. ---> System.Data.SqlClient.SqlException: Kesalahan tingkat transportasi telah terjadi ketika menerima hasil dari server. (penyedia: Penyedia TCP, kesalahan: 0 - Periode waktu habis semaphore telah kedaluwarsa.) ---> System.ComponentModel.Win32Exception: Periode waktu habis semaphore telah kedaluwarsa
pengguna919426
sumber
0

Pastikan juga Anda tidak memiliki transaksi yang tertunda. :)

Saya melakukan beberapa tes di sekitar dan memulai transaksi untuk menjadi aman tetapi tidak pernah menutupnya. Saya berharap kesalahannya akan lebih eksplisit tetapi oh well!

jeromej
sumber
0

Kami mengalami masa-masa sulit Timeout expired/max pool reached Sqlexception. Sebagai solusi dan untuk mencegah restart server atau layanan, kami memodifikasi MAX SERVER MEMORYvariabel dalam SQL Server (baik melalui SQL Managment Studio atau T-SQL):

DECLARE @maxMem INT = 3000 --Max. memory for SQL Server instance in MB
EXEC sp_configure 'show advanced options', 1
RECONFIGURE

Ini sementara memperbaiki masalah sampai terjadi lagi. Dalam kasus kami, kami menduga itu ada hubungannya dengan kebocoran koneksi di tingkat aplikasi.

Santiago berhenti SO
sumber
0

Kami baru-baru ini ditingkatkan ke versi NuGet dari SqlClient( Microsoft.Data.SqlClient) yang berisi bug . Bug ini diperkenalkan selama siklus 1.x dan telah diperbaiki. Perbaikan akan tersedia dalam rilis 2.0.0 yang tidak tersedia pada saat penulisan ini. Pratinjau tersedia.

Anda dapat memeriksa detailnya di sini: https://github.com/dotnet/SqlClient/issues/262

Noel Widmer
sumber