Zaman aşımı süresi doldu. İşlemin tamamlanmasından önce geçen zaman aşımı süresi veya sunucu yanıt vermiyor. Açıklama sona erdirildi


296

Mobil dosyalar için bir indirme sitesi olan web sitemde (günde 20000-60000) birçok kullanıcı var. Sunucuma uzaktan erişimim var (Windows Server 2008-R2).
Daha önce "Sunucu kullanılamıyor" hataları alıyorum, ancak şimdi bir bağlantı zaman aşımı hatası görüyorum.
Buna aşina değilim - neden ortaya çıkıyor ve nasıl düzeltebilirim?

Tam hata aşağıdadır:

'/' Uygulamasında Sunucu Hatası Zaman aşımı süresi doldu. İşlemin tamamlanmasından önce geçen zaman aşımı süresi veya sunucu yanıt vermiyor. Açıklama sona erdirildi. Açıklama: Geçerli web isteğinin yürütülmesi sırasında işlenmeyen bir özel durum oluştu. Hata ve kodun nereden kaynaklandığı hakkında daha fazla bilgi için lütfen yığın izlemesini inceleyin.

Özel Durum Ayrıntıları: System.Data.SqlClient.SqlException: Zaman aşımı süresi doldu. İşlemin tamamlanmasından önce geçen zaman aşımı süresi veya sunucu yanıt vermiyor. Açıklama sona erdirildi.

Kaynak Hatası:

Geçerli web isteğinin yürütülmesi sırasında işlenmeyen bir özel durum oluşturuldu. Kural dışı durumun kaynağı ve yeri ile ilgili bilgiler aşağıdaki kural dışı durum yığını izlemesi kullanılarak tanımlanabilir.

Yığın izleme:

[SqlException (0x80131904): Zaman aşımı süresi doldu. İşlemin tamamlanmasından önce geçen zaman aşımı süresi veya sunucu yanıt vermiyor. Deyim sonlandırıldı.]
System.Data.SqlClient.SqlConnection.OnError (SqlException istisnası, Boolean breakConnection) +404
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning () +412
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning ( ) +412 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning ( ) +412 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning () +412 System.Data.SqlClient.TdsParserBBserBRserBBser.Bhavior. , SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +1363
System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader1swuntime dsBhaviorDsbhaviorDsBhaviorDsBhaviorSs
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, Bool returnStream, Boolean async) +6389442
System.Data.SqlClient.SqlCommand.RunExecuteReader (commandBhavior, Davranış, Davranış, Davranış Davranısı 538
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (DbAsyncResult sonucu, Dize methodName, Boolean sendToPipe) +689
System.Data.SqlClient.SqlCommand.ExecuteNonQuery () +327
NovinMedia.Data.DbObjectPataNot.AdıAdreRun.AdıAdre , Int32 & rowsAffected) +209
DataLayer.OnlineUsers.Update_SessionEnd_And_Online (Object Session_End, Boolean Online) +440
NiceFileExplorer.Global.Application_Start (Nesne göndericisi, EventArgs e) +163

[HttpException (0x80004005): Zaman aşımı süresi doldu. İşlemin tamamlanmasından önce geçen zaman aşımı süresi veya sunucu yanıt vermiyor. Deyim sonlandırıldı.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (HttpContext bağlamı, HttpApplication uygulaması) +4052053
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (Intptr appContext, HttpContext hand.Con.Context.Context System
. yöntemi) InitSpecial (HttpApplicationState durumu, MethodInfo [] işleyicileri, IntPtr appContext, HttpContext bağlamı) +352
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr appContext, HttpContext bağlamı) +352 System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr appContext, HttpContext bağlamı) +407
System.Web.Hosting.PipelineRuntime.IntextizeAppAppContinConticonAppContinContinContextContextContik

[HttpException (0x80004005): Zaman aşımı süresi doldu. İşlemin tamamlanmasından önce geçen zaman aşımı süresi veya sunucu yanıt vermiyor. Deyim sonlandırıldı.]
System.Web.HttpRuntime.FirstRequestInit (HttpContext bağlam) +11686928 System.Web.HttpRuntime.EnsureFirstRequestInit (HttpContextInit (HttpContext bağlamı) +11686928 System.Web.HttpRuntime.EnsureFirstRequestInit (HttpContextInit (HttpContext bağlamı) +11686928 System.Web.HttpRuntime.EnsureFirstRequestInit (HttpContextIntext) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate (IIS7Worker bağlamı)


CEVAP SONRA DÜZENLEME:
Benim Application_Startde Global.asaxaşağıda gibidir:

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

    OnlineUsers.Update_SessionEnd_And_Online(
        DateTime.Now,
        false);

    AddTask("DoStuff", 10);
}

Aranan saklı yordam:

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

Çevrimiçi kullanıcıları almak için iki yöntemim var:

  1. kullanma Application["OnlineUsers"] = 0;
  2. diğeri veritabanı kullanıyor

Bu nedenle, yöntem # 2 için adresindeki tüm Çevrimiçi Kullanıcıları sıfırladım Application_Start. Bu tabloda 482.751'den fazla kayıt bulunmaktadır.


1
Burada söylediği gibi Varsayılan 15 saniyedir
V4Vendetta

1
Kök neden analizi yapmak daha iyi, böyle bir soruna neden olmak için çeşitli nedenler vardır. En temel sorgu karmaşık yapısıdır. Tabloda Onaltılı değerler olarak saklanan Görüntüleri getirirken aynı sorunla karşılaştım.
Vijay Kumbhoje

Yukarıdaki nedenlerden başka bir tane daha ekleyeceğim: Kilit zaman aşımı: docs.microsoft.com/en-us/sql/t-sql/statements/… Bu iş parçacığı kilidi çok uzun süre beklerse, Yukarıdaki belge.
Herbert Yu

Yanıtlar:


345

Görünüşe göre daha uzun süren bir sorgunuz var gibi görünüyor. Yığın izlemenizden ve kodunuzdan tam olarak hangi sorgunun olduğunu belirleyebilmeniz gerekir.

Bu zaman aşımı türünün üç nedeni olabilir;

  1. Bir yerlerde bir kilitlenme var
  2. Veritabanının istatistikleri ve / veya sorgu planı önbelleği yanlış
  3. Sorgu çok karmaşık ve ayarlanması gerekiyor

Bir kilitlenmenin düzeltilmesi zor olabilir, ancak durumun bu olup olmadığını belirlemek kolaydır. Sql Server Management Studio ile veritabanınıza bağlanın. Sol bölmede sunucu düğümüne sağ tıklayın ve Etkinlik Monitörü'nü seçin . Çalışan işlemlere bir göz atın. Normalde çoğu boşta veya çalışır durumda olur. Sorun oluştuğunda, engellenen herhangi bir işlemi işlem durumuna göre tanımlayabilirsiniz. İşlemi sağ tıklatıp ayrıntıları seçerseniz , işlem tarafından yürütülen son sorguyu gösterir.

İkinci sorun, veritabanının en uygun olmayan sorgu planını kullanmasına neden olur. İstatistikleri temizleyerek çözülebilir:

exec sp_updatestats

Bu işe yaramazsa, deneyebilirsiniz

dbcc freeproccache

Sunucunuz ağır yük altındayken bunu yapmamalısınız çünkü saklanan tüm procs ve sorgular ilk yürütüldüğünde yeniden derlendiğinden geçici olarak büyük bir performans isabetine neden olur. Ancak, sorunun bazen oluştuğunu ve yığın izlemenin uygulamanızın başlatıldığını gösterdiğinden, yalnızca zaman zaman çalıştırılan bir sorgu çalıştırdığınızı düşünüyorum. SQL Server'ı önceki bir sorgu planını yeniden kullanmamaya zorlayarak daha iyi olabilirsiniz. Bunun nasıl yapılacağı ile ilgili ayrıntılar için bu cevaba bakınız .

Üçüncü konuya çoktan değindim, ancak sorguyu ayarlamayı gerekip gerekmediğini kolayca sorgulayabilirsiniz, örneğin Sql Server Management Studio'yu kullanarak. Sorgunun tamamlanması çok uzun sürüyorsa, istatistikleri sıfırladıktan sonra bile muhtemelen ayarlamanız gerekir. Bununla ilgili yardım için sorguyu yeni bir soruya göndermelisiniz.


39
Ben de aynı hatayı yapıyordum ama 'sadece' 8secs aldı bir sorguda ... ve exec sp_updatestatsbenim ipucu hakkında sorunumu çözdü. Çok teşekkürler!
nrod

2
Böyle bir sorunu çözmek neredeyse hiç zaman aşımı veya bağlantı havuzu boyutu ayarlama meselesi değildir. Dalmanız ve temel nedeni bulmanız gerekir. Bu temel nedeni çözmek için yardıma ihtiyacınız varsa, kendi sorunuzu gönderebilirsiniz.
Marnix van Valen

5
Bu kesinlikle bir kilitlenme değil. Aşırı blokajdan kaynaklanabilir, ancak kilitlenmeler bir saniyede çözülür ve farklı hatalar üretir. Bu aşırı engelleme olabilir, ancak bir kilitlenme olmayabilir.
Michael J Swart

1
bunun bir Bağlantı Zaman Aşımı değil, bir Bağlantı Zaman Aşımı olduğundan emin misiniz? "System.Data.SqlClient.SqlConnection.OnError" bana bir Bağlantı sorunu olduğunu gösterir.
Mike W

1
@PrashantPimpale Duruma göre yanlış istatistikler sonra kötü yürütme planları oluşturup oluşturmadığını üretiminde ciddi sorun varsa, evet, bu bir çözüm olabilir. İstisnai sorunları (donanım hatası gibi) engellemek, istatistikleri güncellemek veritabanınızı bozmaz. Biraz daha yavaş sorgulara neden olabilir. Sonunda, bu senin çağrın.
Marnix van Valen

155

Saklı yordamı çalıştırdığınız kodunuzda şöyle bir şey olmalıdır:

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

Böyle bir kod satırı ekleyin:

c.CommandTimeout = 0;

Bu işlemin tamamlanması için gereken süre kadar bekler.


144
Ayrıca, 0 değerinin önerilmediğini de bilmelisiniz : 0 değeri sınırsızdır ve bir CommandTimeout'ta bundan kaçınılmalıdır çünkü bir komutu yürütme girişimi süresiz olarak bekler. Komutun ne kadar zaman aldığını öğrenmek ve gerekirse Zaman Aşımı değerini artırmak daha iyidir.
Otiel

7
Otiel ile hemfikirim ve cevabınızı reddettim: commandTimeout'u 0 olarak ayarlarken web sunucusuna yanıt vermeyen bir veritabanı sunucusundan kurtarma şansı vermezsiniz. İkincisi, varsayılan zaman aşımına bastığınızda nedene bakmayı düşünmelisiniz. Çoğu durumda sorguyu düzeltmek, zaman aşımı süresini yükseltmekten daha iyidir.
Maarten Kieft

10
Tavsiye değil tuzağına düşmek olmaz. Benim ve günlük planlanan görevlerim için çok faydalı oldu: Sonsuz bir zaman aşımı olması, bir şeyin yanlış gitmesi durumunda bir işlemi tamamlamayı ve hata döndürmeyi durdurmaz. Basitçe söylemek gerekirse, daha sonra kendinize sorun vermeden, bir sorgunun gerektiğinde bitirmesine izin vermeniz gerekir, çünkü işlemin bitmesi için yeterli zaman ayırmamışsınızdır. Programınızı çoklu iş parçacığıyla kilitlemekten de kaçınabilirsiniz.
WonderWorker

2
Evet, büyük veri aktarımları için bu ayarın yapılması mantıklı değildir. Milyonlarca satırı aktarıyorsanız, Otiel ve BlackHawkDesign'ın söyledikleri mantıklı değil.
bluerubez

Veri merkezli 20 yıllık gelişimde, bunu hiç yapmam gerekmedi. Neredeyse her zaman daha iyi performans sağlayan ve tek bir işlem için gün boyu bir veritabanında öğütme fırsatı yaratmayan neredeyse basit bir çözüm vardır. Db performans sorunlarının büyük çoğunluğu, birkaç büyüklük sırasını daha hızlı gerçekleştirdikleri yere ayarlanabilir. Yani, 3 saatin tamamlanmasını beklediğiniz işlem muhtemelen 3 dakika hatta 3 saniyeye ayarlanabilir.
b_levitt

25

CommandTimeoutSQL Komutunun özelliğini, uzun süredir çalışmakta olan SQL işlemine izin verecek şekilde ayarlayabilirsiniz .

Zaman aşımına neden olan SQL Sorgusu'na da bakmanız gerekebilir.


merhaba "ya da zaman aşımına neden olan SQL Sorgusu bakmanız gerekir" -> sql server 2008'de bu zaman aşımı için nerede kontrol etmeliyim?
SilverLight

Yığın İzi buna işaret ettiği için DataLayer.OnlineUsers.Update_SessionEnd_And_Online'dan çağrılan Saklı Yordamı sınamanız gerekebilir. Canlı veritabanının bir kopyasını test edin ve gerekli parametrelerden geçen Kayıtlı Prosedürü çalıştırın, tamamlanması 30 saniyeden uzun sürerse, bu yüzden bir mola alıyorsunuz. SQL Server Management Studio'ya erişiminiz olduğunu varsayıyorum.
Kev Ritchie

evet, ben sql server 2008 erişim var. ben yolunuzu denemek gerekir.
SilverLight

Soruna neden olan saklı yordamı bulursanız, herhangi bir dizin seo burada gerekiyorsa önereceğim hangi Veritabanı Ayarlama Danışmanı aracılığıyla saklı yordam bulunan sorguyu çalıştırabilirsiniz msdn.microsoft.com/en-us/library /ms174202.aspx
Kev Ritchie

12

Önceki tüm yanıtlar sorunu ele alırken, tüm vakaları kapsamamıştır.

Microsoft sorunu kabul etti ve 2011'de desteklenen işletim sistemleri için düzeltti, bu nedenle yığın izlemesini aşağıdaki gibi alırsanız:

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)

.NET derlemelerinizi güncellemeniz gerekebilir.

Bu sorun, yansıtılmış veritabanları için bağlantı yeniden deneme algoritmasında bir hata nedeniyle oluşur.

Yeniden deneme algoritması kullanıldığında, veri sağlayıcı ilk okunan (SniReadSync) çağrının bitmesini bekler. Çağrı SQL Server çalıştıran arka uç bilgisayara gönderilir ve bekleme süresi, bağlantı zaman aşımı değeri 0.08 ile çarpılarak hesaplanır. Ancak, yanıt yavaşsa ve bekleme süresi sona ermeden ilk SniReadSync çağrısı tamamlanmazsa, veri sağlayıcı hatalı bir mahkum durumuna bağlantı kurar.

Ayrıntılar için KB 2605597'ye bakın

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


9

Belki birileri için yararlı olacaktır. Aynı sorunla karşı karşıya kaldım ve benim durumumun nedeni SqlConnection'ın açılmış olması ve yaklaşık 2500 iterasyonla döngüde çağırdığım yöntemde bertaraf edilmemiş olmasıydı. Bağlantı havuzu tükendi. Doğru şekilde imha edilmesi sorunu çözdü.


bu! kesinlikle bu. Benim sorunum, onları beklemeden farklı bir iş parçacığı üzerinde yöntemleri ateş oldu (çünkü kullanıcı bu yöntem, arka plan komut dosyası bir sonucu gerekmez). Bertaraf etmeden ( usingblokları kullanarak) bu zaman aşımı sorununu yaşadım. Bu çözülmüş gibiydi.
CularBytes

bağlantı havuzu max ulaşıldı veya zaman aşımı süresi ile zaman aşımı hatası aldınız. İşlemin tamamlanmasından önce geçen zaman aşımı süresi veya sunucu yanıt vermiyor. Ancak, sunucu yanıt vermiyor hata alıyorum.
Jeeva Subburaj

8

Yaklaşık 3 gün boyunca aynı problemle karşılaştım. Kayıt sayımızın çok fazla olmadığını fark ettim, üst düzey geliştiricimiz veritabanında 2 görüntü ve Parmak İzi tutuyor. Uzun süren bu onaltılı değerleri almaya çalıştığımda, prosedürümü yürütmek için ortalama süreyi 38 saniye civarında hesaplıyorum. Varsayılan komut zaman aşımı 30 saniyedir, bu nedenle saklı yordamımı çalıştırmak için gereken ortalama süreden daha azdır. Komut zaman aşımı süremi aşağıdaki gibi ayarladım

cmd.CommandTimeout = 50

ve iyi çalışıyor ancak bazen sorgunuz 50 saniyeden fazla sürerse aynı hatayı isteyecektir.


8

CommandTimeout özniteliğini ayarlamanız gerekir. CommandTimeout özniteliğini DbContext alt sınıfında ayarlayabilirsiniz.

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; }
}

4

Son zamanlarda bu hatayla karşılaştım ve kısa bir araştırmadan sonra, veritabanını tutan diskte (1GB'tan az) alanımızın tükenmesinin nedenini buldum.

Veritabanı dosyalarını (.mdf ve .ldf) aynı sunucudaki (çok daha fazla alana sahip) başka bir diske taşıdığımda, zaman aşımına uğramış aynı sayfa (sorguyu çalıştıran) üç saniye içinde yüklenir.

Araştırılacak diğer bir şey, bu hatayı çözmeye çalışırken veritabanı günlük dosyalarının boyutudur. Günlük dosyalarınızın küçültülmesi gerekebilir.


3

Ben
bu küçük bit kodu ile sabit böylece büyük zaman alan sp_foo büyük hesaplama ile ilgili sorun var

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;
    }

3

Varsayılan zaman aşımı 15 saniyedir, değiştirmek için 0 sınırsızdır, başka herhangi bir sayı saniye sayısıdır.

Kod İçinde

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

Web.Config konsolunuzda, "Komut Zaman Aşımı = 0;" zaman aşımı yapmayın veya 1 saatin altında (3600 saniye)

  <add name="ConnectionString" connectionString="Data Source=ServerName;User ID=UserName;Password=Password;Command Timeout=3600;" providerName="System.Data.SqlClient" />

2
Bunlar iki farklı zaman aşımı. İlk öneriniz soruyu ele alıyor. İkinciniz yalnızca bağlantı sağlayıcı desteklediğinde çalışır, ki bu SqlClient tarafından desteklenmez. Her halükarda, 0 zaman aşımı üretimde asla iyi bir fikir değildir. Genel varsayılan 30 saniyedir.
Suncat2000

2

@SilverLight .. Bu açıkça bir Veritabanı nesnesiyle ilgili bir sorundur. Kötü yazılmış bir sorgu veya eksik dizinler olabilir. Ancak şimdilik Veritabanı nesnelerinizle ilgili sorunu araştırmadan zaman aşımını artırmanızı önermeyeceğim

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

Prosedür adını bulmak için bu kod satırına bir kesme noktası koyun ve ardından yürütme planına bakarak prosedürü optimize edin.

Saklı yordam hakkında ayrıntıları gönderene kadar size daha fazla yardımcı olamam.


Saklı Yordam süslü bir şey yapmaz. Ancak, yordam yürütülürken OnlineUsers tablosu kilitli gibi görünüyor. Application_Start'da neler olduğunu görmek için SQL profiler'i deneyin
Amit Rai Sharma

2

Deneyin

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

sonra dizininizi yeniden oluşturun


9
Çözümünüzü açıklayabilir misiniz?
Hp93

0

Sql sorgusunun sqlCommand.CommandTimeout özelliğinde ayarladığınızdan daha uzun sürmesi nedeniyle zaman aşımı süresi doldu.

Açıktır ki, bu sorunu çözmek için CommandTimeout'u artırabilirsiniz, ancak bunu yapmadan önce dizin ekleyerek sorgunuzu optimize etmelisiniz. Eğer sorgunuzu çalıştırırsanız SQL Server Management Studio dahil gerçek yürütme planı sonra SQL Server Management Studio size uygun endeksi önerir. Sorgunuzu optimize edebilirseniz, zaman aşımı sorunundan kurtuluruz.


0

TLDR :

  1. Hem uygulamanın hem de DB sunucularının yeniden başlatılması, veri hacmi, ağ ayarları ve kodun değişmediği en hızlı çözümdür. Bunu her zaman kural olarak yaparız
  2. Değiştirilmesi gereken sabit sürücü arızasının göstergesi olabilir - sistem bildirimlerini kontrol edin

Bu hatayı çeşitli nedenlerle sık sık karşılaştım ve aşağıdakiler de dahil olmak üzere çeşitli çözümler yaşadım:

  1. SqlBulkCopy kullanmak için kodumu yeniden düzenleme
  2. Çeşitli yanıtlarda belirtildiği gibi Zaman Aşımı değerlerini artırmak veya altta yatan nedenleri kontrol etmek ( verilerle ilgili olmayabilir )
  3. Bağlantı Zaman Aşımı (Varsayılan 15s) - Sonlandırmadan önce SQL sunucusuyla bağlantı kurulmasını beklemek ne kadar sürer - TCP / PORT ile ilgili - bir sorun giderme kontrol listesinden geçebilir (çok kullanışlı MSDN makalesi)
  4. Komut Zaman Aşımı (Varsayılan 30 sn) - Bir sorgunun yürütülmesini beklemek ne kadar sürer - Sorgu yürütme / ağ trafiği ile ilgili - ayrıca bir sorun giderme işlemi vardır (başka bir çok kullanışlı MSDN makalesi)
  5. Kod ve verilerin değişmediği, ortamın değişmiş olduğu sunucuların - hem uygulama hem de DB Sunucusunun (ayrıysa) yeniden başlatılması - Yapmanız gereken ilk şey. Genellikle yamalar nedeniyle oluşur (işletim sistemi, .Net Framework veya SQL Server yamaları veya güncelleştirmeleri). Özellikle zaman aşımı istisnası aşağıdaki gibi görünüyorsa (Azure kullanmasak bile):
    • System.Data.Entity.Core.EntityException: Geçici bir arıza nedeniyle büyük olasılıkla bir istisna oluştu. Bir SQL Azure veritabanına bağlanıyorsanız, SqlAzureExecutionStrategy kullanmayı düşünün. ---> System.Data.Entity.Core.EntityCommandExecutionException: Komut tanımı yürütülürken bir hata oluştu. Ayrıntılar için iç istisnayı inceleyin. ---> System.Data.SqlClient.SqlException: Sunucudan sonuçlar alınırken aktarım düzeyinde bir hata oluştu. (sağlayıcı: TCP Sağlayıcısı, hata: 0 - Semafor zaman aşımı süresi doldu.) ---> System.ComponentModel.Win32Exception: Semafor zaman aşımı süresi doldu

0

Ayrıca beklemede olan bir işleminiz olmadığından emin olun. :)

Etrafta bazı testler yapıyordum ve güvenli olmak için bir işleme başladım ama asla kapatmadım. Keşke hata daha açık olurdu ama oh iyi!


0

Zor zamanlar geçirdik Timeout expired/max pool reached Sqlexception. Bir çalışma ortamı olarak ve sunucunun veya hizmetin yeniden başlatılmasını önlemek için, MAX SERVER MEMORYdeğişkeni SQL Server'da değiştiririz (SQL Managment Studio veya T-SQL aracılığıyla):

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

Bu, sorunu tekrar oluşana kadar geçici olarak giderir. Bizim durumumuzda, bunun uygulama düzeyinde bağlantı sızıntıları ile ilgili olduğundan şüpheleniyoruz.


0

Son zamanlarda bir hata içeren SqlClient( Microsoft.Data.SqlClient) NuGet sürümüne geçtik . Bu hata, 1.x döngüsünün ömrü boyunca tanıtılmıştır ve zaten düzeltilmiştir. Düzeltme, bu yazı sırasında mevcut olmayan 2.0.0 sürümünde bulunacaktır. Bir önizleme kullanılabilir.

Ayrıntıları buradan inceleyebilirsiniz: https://github.com/dotnet/SqlClient/issues/262

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.