微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql-server – 最大用户连接数

sql Server 2012标准版中,我知道最大用户连接数为32,767.如果我正朝着这个数字迈进,我应该怎么做DBA?

目前有30,000个用户连接,预计这个数字会增加.

解决方法

sql Server版本和版本的 maximum number of connections是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的连接数.但是,在我看来,使用分片作为绕过连接数限制的方法类似于使用原子弹杀死蜘蛛.它会杀死蜘蛛,但你可能会在一天结束时遇到更大的问题.更不用说制造原子弹非常难了,更不用说正确实现分片了.

原文地址:https://www.jb51.cc/mssql/80142.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐