关于数据库连接的一些小知识点

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

由于在数据库连接部分,新建连接的时候一直报“出错原因:超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。”于是,我便想查看一下数据库的活动连接,看看究竟是哪个程序占用了过多的数据库连接。

我们可以用sp_who(或sp_who2)来显示所有活动的连接。

USE master;
GO
EXEC sp_who2;
GO

查询的结果如表1。为了可读性,表1中的结果有删减了一些列和一些行。但删去的内容不影响我们要讲的东西。

表1 sp_who2查询的结果

image

从表1中,我们可以看到有很多进程状态(见Status列)显示sleeping,并且当前正在执行的命令类型(见Command)显示AWATING COMMAND

     我们就有疑问,为什么有这么多的连接进程。首先,我们要明确一个概念,SQL Server 不会建立任何连接池,ADO.Net会。当我们在C#代码中打开一个数据库连接后,如果是首次连接,SqlClient就会打开一个SQL Server的连接。当我们从程序里面关闭这个连接时,SqlClient并不是真正地关闭了这个数据库的连接,而是延后一段时间才关闭,默认是60秒。如果你没有在指定延时内重新连接,SqlClient就真正地关闭这个连接。但如果你重连接了,SqlClient就会重用这个连接。这样子,我们就可以使用相同的连接属性。

     但是有几种可能的情况可能导致失败,也就是连接不能重用(或在指定的时间内没有关闭)。比如当你使用ExecuteReader的时候,没有成功地取回所有的行和结果集,继而在连接上没有将reader关闭,可能导致这个问题。

     常用的排查数据库连接问题的方法是运行SQL Server Profiler(使用默认模板)。如果你看到一个Audit Login事件,就说明有一个新的连接已经被建立。如果你看到event RPC:Completed with the text "sp_reset_connection",这说明在连接池中的一个连接被重用。如果你一直没有看到任何的sp_reset_connection,那就意味着你遇到问题了。SQL Server Profiler如图1所示

image

                                                         图1 SQL Server Profiler

 

 

补充知识:

sp_who和 sp_who2的区别

sp_who是官方支持的,有文档可查。sp_who2不是官方支持的,查不到对应的文档,但它更常被使用。他们返回相同的信息:提供有关 Microsoft SQL Server 数据库引擎实例中的当前用户、会话和进程的信息。但是sp_who2额外添加了一些sp_who没有提供的列。并且,sp_who2中的信息更紧凑,更适合用文本来显示。Kalman 写道:它增加了额外的spid列来增加结果的可读性.

 

后记:

”超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小" 这个问题可能是进行查询的时候,没有成功的查询造成的。比如说执行存储过程的时候,原来需要提供给存储过程3个参数,但你只提供了两个,这就会导致查询出现错误。当错误发生的时候,原先的数据库连接就不能成功被释放或重用,这就导致了ADO.Net要继续创建新的数据库连接,最终导致了线程池中达到了池本身能够容纳的指定连接数,最终导致新的连接不能继续在线程池中创建。

参考链接:

SQL Server Profiler使用方法

SQL Server 2005联机丛书

sp_who, sp_who2和sp_who3

SLEEPING/AWAITING COMMAND question

本文转自陈哈哈博客园博客,原文链接http://www.cnblogs.com/kissazi2/p/3216297.html如需转载请自行联系原作者


kissazi2

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
10月前
|
存储 分布式计算 大数据
HBase分布式数据库关键技术与实战:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析了HBase的核心技术,包括数据模型、分布式架构、访问模式和一致性保证,并探讨了其实战应用,如大规模数据存储、实时数据分析及与Hadoop、Spark集成。同时,分享了面试经验,对比了HBase与其他数据库的差异,提出了应对挑战的解决方案,展望了HBase的未来趋势。通过Java API代码示例,帮助读者巩固理解。全面了解和掌握HBase,能为面试和实际工作中的大数据处理提供坚实基础。
540 3
|
存储 SQL 数据管理
数据库系统概论 ---- 第一章 -- 绪论(重要知识点)
数据库系统概论 ---- 第一章 -- 绪论(重要知识点)
数据库系统概论 ---- 第一章 -- 绪论(重要知识点)
|
SQL 存储 Java
Java数据库编程知识点总结
Java数据库编程知识点总结
91 0
|
10月前
|
SQL 存储 Java
Java数据库编程知识点总结
【4月更文挑战第6天】Java数据库编程涉及使用JDBC API与关系型数据库交互。关键知识点包括:JDBC作为标准API用于数据库访问;加载驱动并用DriverManager建立数据库连接;掌握SQL语句的编写与执行;使用PreparedStatement和CallableStatement执行预编译SQL及存储过程;ResultSet处理查询结果;理解事务管理确保数据一致性;批处理优化多SQL执行;连接池提升性能稳定性;以及异常处理如SQLException和ClassNotFoundException的捕获。
67 6
|
9月前
|
SQL 数据库
sql数据库练习题(涵盖大部分知识点)
sql数据库练习题(涵盖大部分知识点)
|
9月前
|
存储 关系型数据库 MySQL
mysql数据库练习题(涵盖几乎所有知识点)
mysql数据库练习题(涵盖几乎所有知识点)
|
10月前
|
SQL Oracle 关系型数据库
干货!sqlserver数据库所有知识点总结整理,含代码(挺全的)
干货!sqlserver数据库所有知识点总结整理,含代码(挺全的)
|
10月前
|
SQL 存储 安全
数据库基础的知识点
数据库基础的知识点
|
存储 SQL 人工智能
数据库系统概论 ---- 第二章 -- 关系数据库(2.1~2.3)(重要知识点)
数据库系统概论 ---- 第二章 -- 关系数据库(2.1~2.3)(重要知识点)
|
存储 SQL Oracle
数据库知识点
数据库知识点