SQL Server Pool Timeout: Bağlantı Havuzu Tükenmesi Çözümü
SQL Server Bağlantı Havuzu Timeout: Sorgu mu Yavaş, Havuz mu Tükendi?
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
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ı:
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ı?
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ü:
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
Singletonolmamalıdır; her HTTP isteğine özelScopedyaşamalıdır. - •Dispose garantisi:
await usingveyausingblokları ile bağlantılar kesin kapatılmalıdır. - •Havuz Boyutu Formülü:
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 Login Failed (Error 18456)
- •SQL Server Deadlock (Error 1205)
- •Test edilen sürümler: SQL Server 2019 / 2022
SQL Server Diğer Üretim Rehberleri
Aynı veritabanı motoruna ait doğrulanmış diğer içerikler.
SQL Server Error 18456: State Kodlarına Göre Gerçek Neden
18456 hatasında State numarası gerçek nedeni söyler. State 5, 8, 11, 18, 38 ve 40 için ayrı çözümler, ERRORLOG okuma komutları.
SQL Server Error 1205 Deadlock: Grafiği Bulma ve Önleme
SQL Server 1205 hatasında deadlock grafiğini system_health oturumundan çıkarma, kurban seçimini anlama ve kalıcı önleme yöntemleri.
SQL Server Msg 9002: Transaction Log Full Hatası Çözümü
9002 hatasında log_reuse_wait_desc çıktısını okumak, LOG_BACKUP / ACTIVE_TRANSACTION / AVAILABILITY_REPLICA nedenlerine göre ayrı çözümler ve VLF yönetimi.