Sql Server Profiler中的“exec sp_reset_connection”是什么意思?
尝试通过发出“sp_reset_connection”来理解Sql Profiler的含义。
我有以下的“exec sp_reset_connection”行,然后是BatchStarting和Completed,
RPC:Completed exec sp_reset_connection SQL:BatchStarting SELECT [c].[TestID] AS [TestID], [c].[Description] AS [Description] FROM [dbo].[Test] AS [c] SQL:BatchCompleted SELECT [c].[TestID] AS [TestID], [c].[Description] AS [Description] FROM [dbo].[Test] AS [c]
基本上第一行“exec sp_reset_connection”是指整个过程(我的连接被打开,select stmt运行,然后连接closures并释放回池)刚刚发生? 或者我的联系还处于开放阶段。
而且,为什么在我自己的select语句之前执行sp_reset_connection,是不是应该在用户的sql之后重置呢?
我试图知道是否有一种方式来更详细地了解连接打开和closures时的情况?
通过看到“exec sp_reset_connection”,这是否意味着我的连接closures?
像其他答案一样, sp_reset_connection
表示连接池正在被重用。 注意一个特定的结果!
Jimmy Mays的MSDN博客说:
sp_reset_connection不会将事务隔离级别从上一个连接的设置重置为服务器默认级别。
更新 :从SQL 2014开始,对于TDS版本7.3或更高版本的客户端驱动程序,事务隔离级别将重置为默认值。
ref: SQL Server:跨池连接的隔离级别泄漏
这里是一些额外的信息:
sp_reset_connection是做什么的?
ODBC,OLE-DB和System.Data.SqlClient等数据访问API层在重新使用连接池中的连接时都调用(内部)存储过程sp_reset_connection。 这样做是为了在重新使用之前重置连接的状态,但是没有logging什么事情被重置。 本文试图logging被重置的连接的部分。
sp_reset_connection重置连接的以下方面:
所有的错误状态和数字(如@@错误)
停止执行并行查询的父EC的子线程的所有EC(执行上下文)
等待任何突出的I / O操作
通过连接释放服务器上的所有缓冲区
解锁连接使用的任何缓冲区资源
释放连接拥有的所有分配的内存
清除由连接创build的所有工作或临时表
杀死连接所拥有的所有全局游标
closures所有打开的SQL-XML句柄
删除任何打开的与SQL-XML相关的工作表
closures所有系统表
closures所有用户表
丢弃所有的临时对象
中止未完成的交易
入伍时发生分布式事务的缺陷
减less释放共享数据库locking的当前数据库中用户的引用计数
Frees获得locking
释放任何获得的句柄
将所有SET选项重置为默认值
重置@@ rowcount值
重置@@标识值
使用dbcc traceon()重置任何会话级跟踪选项
在SQL Server 2005和更新版本中将CONTEXT_INFO重置为
NULL
[不是原始文章的一部分]sp_reset_connection不会重置:
安全上下文,这就是为什么连接池匹配连接基于确切的连接string
使用sp_setapproleinput应用程序angular色,因为应用程序angular色无法恢复
注意:我在这里列出了这个列表,因为我不希望它在瞬态networking中丢失。
这表明正在使用连接池(这是一件好事)。
但请注意:
如果在存储过程或触发器中发出SET TRANSACTION ISOLATION LEVEL,则当对象返回控件时,隔离级别将重置为在调用该对象时生效的级别。 例如,如果您批量设置REPEATABLE READ,然后批处理调用将隔离级别设置为SERIALIZABLE的存储过程,则当存储过程将控制权返回给批处理时,隔离级别设置将恢复为REPEATABLE READ。