SQL-SERVER数据库连接超时的原因分析
2020-12-28黄黎明
黄黎明
摘要:本文主要讨论Microsoft SQL Server 数据库连接超时并不响应的原因分析及相关可能解决办法,以供从事SQL Server 数据库运维工作工程师处理日常问题提供一些参考。
关键词:SQL Server;数据库;连接超时;运维
中图分类图:TP311 文献标识码:A
文章编号:1009-3044(2020)31-0049-02
1引言
SQL Server 是微软公司开发的一个大型的关系型数据库系统,它为用户提供了一个安全、可靠、易管理、高端的客户、服务器数据库平台。它是一种高性能的关系型数据库系统,使用客户机/服务器为设计结构,支持多个当前主流开发平台,支持企业应用程序,支持XML等,它是一个全面的数据管理和业智能平台,为关键业务提供了企业级的可扩展性、数据仓库、安全、高级分析、和报表支持。主要有三个特点:一,可信任,使得公司可以以很高的安全性、可靠性和扩展性来运行关键任务;二,高效,使公司可以降低开发和管理其数据基础设施的时间和成本;三,智能,提供了一个全面的平台,可以在用户需要时给其发送观察和信息。作为当前世界主流的关系型数据库在国内应用很广泛,无论是教育、医疗、银行等各行各业都有在使用。它极大地方便了数据的存储、管理、使用及分析提取。但是,在日常使用中我们难免遇到各种各样的问题,有时候让我们这些数据库运维管理人员很头疼,不知道怎么解决。本文作者在一次日常维护中遇到了访问数据库特别慢的问题,通过查阅各种资料,终于解决了问题,于是想着把这些经验写出来供大家参考。
2 问题描述
某三甲医院HIS(医院信息系统)突然运行特别慢,还报“连接超时时间一到。在尝试使用预登录握手确认时超过了此超时时间。这可能是因为预登录握手失败或服务器未能及时响应。尝试连接到此服务器时花费的持续时间是 pre-login initialization = 15 handshake = 14993; Microsoft SQL Server 等待的操作过时”错误,如图1所示,同时数据库管理员登录数据库管理系统也提示数据库连接超时,在尝试使用预登录握手确认时超过了此超时时间。
此问题初次出现是由于临床科室医生放映开医嘱特别慢,应用程序报连接数据库超时错误,HIS系统有问题,当试图通过SQL Server企业管理器用账号登录数据库时,前面6次左右连接都是报连接失败已超时,登录失败;登录成功之后再执行 SQL語句查询时,也很长时间不响应。EMR(电子病历系统),PACS(放射影像系统),LIS(检验系统)等其他业务系统正常,同时HIS服务器其他业务如web业务,邮箱业务,ftp业务等都是正常。医院目前所有的系统都是架构在由8台物理主机构建的VWWARE虚拟机上,虚拟机平台是VSPHERE6.0 ,操作系统是Windows Server 2012, 数据库是SQL Server 2008R2 服务器网卡是VMXNET3虚拟网卡,物理机的网卡是万兆网卡。
3原因分析
在以下情况下,通常会出现“连接超时预登录握手超时SQL Server”错误:
SQL Server数据库引擎的实例未运行。
SQL Server浏览器服务未运行。
TCP / IP被禁用。
存在网络问题。
数据库引擎实例的TCP / IP端口被防火墙阻止。
客户端和服务器未配置为使用相同的网络协议。
磁盘空间不足
4 问题解决
在本节中,我们将更详细地说明上述“连接超时预登录握手超时SQL Server ”的根本原因。
4.1 SQL Server数据库引擎的实例未运行
应通过执行以下操作确保每个SQL Server数据库引擎已启动并正常运行。
打开SQL Server配置管理器如图2确保SQL Server服务状态正在运行。如果它没有运行,请尝试启动它。如果启动不了!请检查下SQL Server服务。
4.2 SQL Server浏览器服务未运行
再次打开SQL Server配置管理器如图3 确保SQL Server浏览器服务正常运行。
4.3TCP/IP 被禁用
再次打开SQL Server配置管理器如图4 确保TCP/IP协议已启用。
4.4检查网络连接
在应用程序服务器上,尝试以管理员身份打开CMD运行telnet命令:telnet ip address 1433以确保该端口已打开且可访问。
4.5 检查数据库引擎实例的TCP/IP端口是否被防火墙阻止
TCP / IP的默认端口为1433。因此,我们应确保数据库引擎正在侦听已分配的TCP / IP端口,默认为1433。然后在防火墙中允许SQL Server TCP / IP端口。在数据库服务器>打开Windows防火墙选择入站规则,然后右键单击入站规则>选择新的入站规则,如图5。
然后单击步骤>检查端口,在“协议和端口”上,单击“步骤>选择TCP,特殊本地端口>输入SQL端口”然后点击保存,如图6所示:
4.6客户端和服务器未配置为使用相同的网络协议
打开网络连接检查客户端和服务器本地适配器是否启用了相同网络协议如IPV4和IPV6。首先我们打开服务器上的网络和共享中心,点击适配器设置>右键本地连接>属性。
如果IPV6是选中的,那么客户端上也应该被选中。如何IPV6没有被选中,那么客户端上也不应该不选中。
4.7 磁盘空间不足
检查服务器磁盘空间是否不足,打开数据库服务器,检查数据库所在磁盘空间是否剩余很少,如果剩余空间不足20%,尝试磁盘扩容看是否解决问题。
5 结束语
本案例中,最后发现是由于数据库所在磁盘空间不足引起的I/0很慢导致的性能瓶颈。在这个过程中总共花费了一周时间。因为之前检查服务器的时候,发现数据库所在磁盘总共空间是800GB还剩100GB,我们就没怀疑是磁盘空间不足的原因。我们首先想到的是防火墙拦截1433的端口导致的。因为我们在服务器上用local host登录数据库时响应速度很快,用127.0.0.1和服务器IP地址甚至服务器计算机名登录数据库都很慢。我们就想是不是因为非local host登录要走网卡和防火墙。我们就一直怀疑是网卡或者防火墙的原因。其中我们更换了服务器网卡,修改了防火墙规则,还参照网上关闭虚拟机的rsc(接收段合并)技术,都没有效果,后面磁盘扩容是在把本文前面提到的问题都排除之后才采取的措施。这中间经历了很多弯路,希望读者借鉴,以节约处理此类问题的时间。笔者建议此类问题还是先从常规手段排查开始,以免走进死胡同。本文结合作者日常工作中遇到的问题出发详细列出了SQL Server数据库连接超时,连接慢的问题,并提出了可能的几种原因并提出了相应的解决办法,以供读者参考。
参考文献:
[1] 黄钊吉,熊章立.SQL Server On Linux运维实战[M].北京:人民邮电出版社,2019.
[2] 邓立国,佟强,杨姝,蒋宁.数据库原理与应用[M].北京:清华大学出版社,2017.
[3] 明日科技.SQL Server从入门到精通[M].北京:清华大学出版社,2014.
【通联编辑:梁书】