SQL Server连接时好时坏的奇怪问题
如果无法定位问题所在,当我们向别人求助时,我们甚至不知道该如何提问。
因为合作商的关系,我们有一台服务器是Windows系统的,运行SQL Server,而团队的所有成员都并不熟悉这套东西。重启了服务器,然后注意到一个问题,数据库连接时好时坏。
我用的是nodejs的mssql模块,非常可恨的是,没有连接成功,也没有报任何错,反正就是什么都没有发生就结束了。
搞这些不熟悉的东西,真是一件让人头疼的事情,但我相信所有的莫名其妙,都必然存在一个被我们忽视的原因。
远端Windows服务器上
> netstat -ano | findstr 1433
TCP 0.0.0.0:1433 0.0.0.0:0 LISTENING 1452
TCP 127.0.0.1:1433 127.0.0.1:50093 ESTABLISHED 1452
TCP 127.0.0.1:50093 127.0.0.1:1433 ESTABLISHED 3636
这说明服务是出于正常监听状态,而且我使用服务器上的SSMS(SQL Server Management Studio)是可以成功连接的。
本地linux机器上
$ nc -z msserver 1433
Connection to msserver port 1433 [tcp/ms-sql-s] succeeded!
这说明端口确实处于正常监听状态。
问题定位
我猜想可能是连接用尽,想查看一下当前连接数,可问题是,连接真的用尽了,我甚至没办法新开一个窗口执行sql语句。我查看了数据库服务器的日志,希望找到一些线索。习惯了linux的操作习惯,打算直接找日志文件,后来才发现windows的日志可以直接通过图形界面查看。发现如下内容:
由于 '4' 用户连接数已达到最大值,因此无法连接。系统管理员可以使用 sp_configure 来提高最大值。该连接已关闭。[客户端: xx.xx.xx.xx]
感觉很明确了,应该就是数据库允许连接数太小,很容易被占满,所以连接时好时坏。定位了问题,解决方案就呼之欲出了,思路是:增大数据库允许的用户连接数
。
找了很多方案,但都不成功,而且因为对SQL Server数据库不熟悉,所以操作上也很不方便,直到找到这篇救命文档,按照上面所说的操作,结合另一篇,修改了允许用户的最大连接数为100,问题成功解决。
解决方案
C:\> sqlcmd -E #这是windows系统的命令行,由此进入数据库配置shell
1> sp_configure 'show advanced options', 1
2> go
配置选项 'show advanced options' 已从 1 更改为 1。请运行 RECONFIGURE 语句进行安装。
1> reconfigure
2> go
1> sp_configure 'user connections', 100
2> go
配置选项 'user connections' 已从 4 更改为 100。请运行 RECONFIGURE 语句进行安装。
1> exec sp_configure 'show advanced options', 0
2> go
配置选项 'show advanced options' 已从 1 更改为 0。请运行 RECONFIGURE 语句进行安装。
1> reconfigure
2> go
1> exit
然后重启SQL Server,配置就生效了。
- 查看数据库允许设置的最大连接数,总是返回32767,也就是用户连接数最大可设置为32767
select @@max_connections
- 查看当前设置的最大连接数
select value from master.dbo.sysconfigures where [config] = 103
- 查看各个用户的当前连接数
select loginame, count(1) as Nums from sys.sysprocesses group by loginame order by 2 desc