Sql-Server
最大使用者連接數
在 SQL Server 2012 標準版中,我知道最大使用者連接數為 32,767。如果我正朝著這個數字前進,作為 DBA,我應該怎麼做?
目前有 30,000 個使用者連接,預計這個數字還會增加。
跨 SQL Server 版本和版本的最大連接數為 32,767。
您可以通過查看以下內容來確定 SQL Server 目前有多少連接:
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;
如果上述查詢中的已使用和未使用連接之間的比率有關,則連接池很可能是由連接到伺服器的客戶端應用程序啟用的,並且這些連接沒有得到有效使用。您可能希望開發人員修改這些應用程序的連接字元串以限制連接池的大小,並確保它們正確地處理連接。如果連接未正確處理,只要客戶端應用程序正在執行,它們就會保持打開狀態。
如果您感覺特別狂熱,並且需要擺脫所有最近沒有執行任何操作的連接(無論它們目前是否正在執行工作),您可以執行以下程式碼,這將生成一個會話列表可以被殺死。您需要將生成的命令複製並粘貼到新的 SSMS 視窗中才能實際執行這些命令。我還建議你更新你的簡歷以防萬一。
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;
通過跨多個 SQL Server 節點分片數據,可以線性擴展超過 32,767 的連接數。但是,在我看來,使用分片來繞過連接數的限制類似於使用原子彈殺死蜘蛛。它會殺死蜘蛛,但最終你可能會遇到更大的問題。更不用說製造原子彈非常困難,更不用說正確實施分片了。