dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Home/SQL Server/Hata Kodları (Errors)/sqlserver-connection-pool-timeout
[Teşhis]SQL Server SQL Server 2019 / 2022Advanced
5 dk okuma

SQL Server Pool Timeout: Bağlantı Havuzu Tükenmesi Çözümü

SQL Server Bağlantı Havuzu Timeout: Sorgu mu Yavaş, Havuz mu Tükendi?

Yazar / Standart:Kıdemli Veritabanı Mimarı & SRE (dataiotech Labs)
Timeout expired... obtaining a connection from the pool
İlk 60 Saniye Teşhis Protokolü:

Hata mesajı semptomdur, kök neden değildir. Sunucuyu yeniden başlatmadan veya rastgele ayar değiştirmeden önce aşağıdaki "Nedeni ayırt eden tek sorgu"yu çalıştırarak gerçek senaryoyu netleştirin.

▸Belirti

plaintext
Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.

İki kritik hata mesajını birbirinden ayırın:

  • •`Timeout expired prior to obtaining a connection from the pool`: Havuzda boş bağlantı yok (Uygulama tarafı sızıntı / blokaj).
  • •`Execution Timeout Expired`: Sorgu belirtilen sürede bitmedi (Sorgu optimizasyonu / kilit).

▸Adım adım teşhis

1. Sunucu tarafında oturum dağılımı:

sql
SELECT login_name, program_name, COUNT(*) AS oturum FROM sys.dm_exec_sessions WHERE is_user_process = 1 GROUP BY login_name, program_name ORDER BY oturum DESC;

2. Boşta oturan mı, çalışan sorgular mı?

sql
SELECT s.session_id, s.login_name, s.status, s.host_name, r.status AS istek_durumu, r.wait_type, r.total_elapsed_time / 1000 AS saniye, SUBSTRING(t.text, 1, 200) AS sorgu FROM sys.dm_exec_sessions s LEFT JOIN sys.dm_exec_requests r ON r.session_id = s.session_id OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) t WHERE s.is_user_process = 1 ORDER BY r.total_elapsed_time DESC;

s.status = 'sleeping' ağırlıklıysa sızıntı; r.status = 'running' ağırlıklıysa yavaş sorgu veya blokaj vardır.

3. Blokaj zinciri kontrolü:

sql
SELECT blocking_session_id, session_id, wait_type, wait_time / 1000 AS bekleme_sn, wait_resource FROM sys.dm_exec_requests WHERE blocking_session_id <> 0;

▸Kalıcı Çözüm (.NET & Mimari)

  • •DbContext ömrü: Asla Singleton olmamalıdır; her HTTP isteğine özel Scoped yaşamalıdır.
  • •Dispose garantisi: await using veya using blokları ile bağlantılar kesin kapatılmalıdır.
  • •Havuz Boyutu Formülü:
plaintext
toplam bağlantı = pod sayısı × Max Pool Size × (1 + eşzamanlı payı)

Örnek: 4 pod × 100 = 400 bağlantı; 200 worker thread'lik sunucuyu kilitler. Havuzu büyütmek yerine küçültüp sorguları hızlandırın.


▸İlgili Mühendislik Rehberleri ve İç Linkler

SQL Server Diğer Üretim Rehberleri

Aynı veritabanı motoruna ait doğrulanmış diğer içerikler.

Tümünü Gör