SQL Server 2012 Standard sürümünde, maksimum kullanıcı bağlantı sayısının 32,767 olduğunu biliyorum. Bu numaraya yöneliyorsam DBA olarak ne yapmalıyım?
Şu anda 30.000 kullanıcı bağlantısı var ve bu sayının artması bekleniyor.
SQL Server 2012 Standard sürümünde, maksimum kullanıcı bağlantı sayısının 32,767 olduğunu biliyorum. Bu numaraya yöneliyorsam DBA olarak ne yapmalıyım?
Şu anda 30.000 kullanıcı bağlantısı var ve bu sayının artması bekleniyor.
Yanıtlar:
Maksimum bağlantı sayısı SQL Server sürümleri arasında ve sürümleri 32767 olduğunu.
Şu anda kaç tane SQL Server bağlantısına sahip olduğunuzu belirleyebilirsiniz:
SELECT ConnectionStatus = CASE WHEN dec.most_recent_sql_handle = 0x0
THEN 'Unused'
ELSE 'Used'
END
, CASE WHEN des.status = 'Sleeping'
THEN 'sleeping'
ELSE 'Not Sleeping'
END
, ConnectionCount = COUNT(1)
FROM sys.dm_exec_connections dec
INNER JOIN sys.dm_exec_sessions des ON dec.session_id = des.session_id
GROUP BY CASE WHEN des.status = 'Sleeping'
THEN 'sleeping'
ELSE 'Not Sleeping'
END
, CASE WHEN dec.most_recent_sql_handle = 0x0
THEN 'Unused'
ELSE 'Used'
END;
Yukarıdaki sorgudan kullanılmış ve kullanılmamış bağlantılar arasındaki oran ilgili ise, bağlantı havuzunun sunucuya bağlı istemci uygulamaları tarafından etkinleştirilmesi ve bu bağlantıların verimli kullanılmaması muhtemeldir. Geliştiricilerin, bu havuzlar için bağlantı havuzunun boyutunu sınırlamak üzere bağlantı dizesini değiştirmelerini ve bağlantıları uygun şekilde atmalarını sağlamak isteyebilirsiniz. Bağlantılar doğru şekilde kurulmuyorsa, istemci uygulaması çalıştığı sürece açık kalacaktır.
Kendinizi çok kederli hissediyorsanız ve yakın zamanda herhangi bir şey yapmayan tüm bağlantılardan kurtulmanız gerekiyorsa ( şu anda gerçekten çalışmakta olup olmadıklarına bakılmaksızın ), aşağıdaki kodu çalıştırabilirsiniz; öldürülebilir. Komutları gerçekten çalıştırmak için oluşturulan komutları kopyalayıp yeni bir SSMS penceresine yapıştırmanız gerekir. Ayrıca özgeçmişinizi kadar güncel olan öneriyoruz ihtimale karşı .
DECLARE @cmd NVARCHAR(MAX); SET @cmd = ''; SELECT @cmd = @cmd + CASE WHEN @cmd = '' THEN '' ELSE CHAR(13) + CHAR(10) END + 'KILL ' + CONVERT(VARCHAR(MAX), dec.session_id) + ';' FROM sys.dm_exec_connections dec WHERE dec.most_recent_sql_handle = 0x0;
PRINT @cmd;
Birden fazla SQL Server düğümünde verileri paylaşarak, bağlantı sayısını 32,767'nin ötesine doğrusal olarak ölçeklendirmek mümkündür. Ancak, bence, paylaşmanın, bağlantı sayısındaki sınırın aşılması için bir yol olarak kullanılması, bir örümceği öldürmek için bir atom bombası kullanmaya benzer. Bu olacak örümcek öldürmek, ama sadece belki günün sonunda büyük sorunlarımız var. Bir atom bombası inşa etmenin çok zor olduğunu söylemeye gerek yok, aletlerin düzgünce yapılmasından bahsetmiyorum bile.
is_user_process
olacaktır ve kesinlikle last_request_start_time
yeni olan bir seansı dışlamak kesinlikle zarar vermez . Ne kadar yakın? Başka bir güzel soru.
Geçmişte bağlantı havuzlama ile garip davranışlarda bulundum ve senaryo bu durumlardan biriyle iyi uyum gösteriyor. Uygulamanız bağlantı havuzu kullanıyorsa (ve bu hala spekülasyonsa, bu noktada, siz onaylayıncaya veya reddedene kadar) o zaman açık kalan birçok bağlantınız olacak. Bu, tasarım gereğidir.
Bağlantı havuzu oluşturma, veritabanı bağlantısı oluşturma yükünü azaltmayı amaçlar. Örneğin 3'lük bir bağlantı havuzu alalım. Yaşam döngüsünün söyleyebileceğim kadarıyla (soğuk bağlantı havuzu önbelleğinden başlayarak) şöyle bir şey olur:
sp_reset_connection
parçacığı üzerinde bağlantı havuzu sorunları 1Bu bir aşırı basitleştirmedir, ancak göze çarpan noktalar şunlardır:
sp_reset_connection
.İşte bu sonuçlara geldiğim referans malzemesi.