Merhaba,
Bu tamamıyla geriye dönük aldığım notlardan biridir. Bu sorunla ilk etapta Event ID 4227 ile karşılaştım. Detayı şöyle:
“TCP/IP failed to establish an outgoing connection because the selected local endpoint was recently used to connect to the same remote endpoint. This error typically occurs when outgoing connections are opened and closed at a high rate, causing all available local ports to be used and forcing TCP/IP to reuse a local port for an outgoing connection.”
Event ID 4227 – TCP/IP Network Connectivity
Bu hatayı alınca site down oluyor, SQL bağlantım gidiyordu. Üstteki linkte Microsoft’un muazzam önerisi: Sunucuyu yeniden başlatın yazıyor.
Bu yüzden bu konuda araştırma yaptım. Edindiğim bilgileri ve yazdığım basit t-sql sorgularını aşağıda paylaştım.
1. MSSQL maksimum 32,767 user connections destekliyor.
Kaynak: SQL Maximum Connection User
Kaynak2: SQL Connection Limit
SQL sürümünüzdeki max_connection değerini görmek için aşağıdaki T-SQL sorgusunu çalıştırabilirsiniz.
1 |
SELECT @@MAX_CONNECTIONS AS 'Max Connections'; |
Eğer SQL üzerindeki dblerin kaç connection yarattığını görmek istiyorsanız da aşağıdaki iki T-SQL kodu kullanabilirsiniz.
1 2 3 4 |
select a.dbid,b.name, count(a.dbid) as TotalConnections from sys.sysprocesses a inner join sys.databases b on a.dbid = b.database_id group by a.dbid, b.name |
or
1 2 3 4 5 |
SELECT DB_NAME(dbid) as DBName, COUNT(dbid) as NumberOfConnections FROM sys.sysprocesses WHERE dbid > 0 GROUP BY dbid, loginame |
Kaynak:SQL Query to Check Number of Connections
Eğer bu çıktılarda SQL bağlantısını aşan bir connection görüyorsanız yazılımınızı kontrol edin ya da SQL üzerinden sorgu trafiği yaratılarak veritabanına saldırılıyor olabilir. Öneri: Sunucunun ikinci interface local IP verip, sitelerin local IP ile erişmesini sağlayın. SQL portunu değiştirin. SQL remote erişimini Firewall üzerinden Scope tanımlayarak kısıtlayın.
Ayrıca kendi kurguladığım bir komut satırıdır. Eğer bir porta gelen toplam isteği gözlemlemek istiyorsanız aşağıdaki komutu Command Prompt ile çalıştırırsanız görebilirsiniz. (Unutmayın, Windows veya Linux işletim sistemi bir port üzerinde toplam 65535 bağlantıyı destekler. Bu kadar bağlantı görüyorsanız ya saldırı alıyorsunuz ya da yazılımınızda problem mevcut. try catch kullanın. Bu komut ile ” ” arasında port yazarsanız porta gelen isteği, IP yazarsanız IP’ye gelen toplam istek sayısını görmüş olursunuz.
1 |
netstat -a -n | find /c "<ip:port>" |
Ayrıca internetten derlediğim güzel birkaç link daha:
1. ServerFault
İçeriği ilerleyen tarihlerde güncelleyeceğim.
Umarım zamandan kazanmanızı sağlar.