在 Sql 服务器事件探查器中,“ exec sp _ set _ connect”是什么意思?

试图通过发出“ sp _ set _ connect”来理解 Sql Profiler 的含义。

我有如下的代码行: “ exec sp _ set _ connect”,后面跟着 BatchStart 和 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 _ set _ connect”是否意味着整个进程(我的连接被打开,选择 stmt 被运行,然后连接被关闭并释放回池)只是发生了?或者我的关系还处于开放阶段。

而且,为什么在我自己的 select 语句之前执行 sp _ set _ connect,难道重置不应该在用户的 sql 之后执行吗?

我想知道有没有办法更详细地了解连接是何时打开和关闭的?

通过查看“ exec sp _ set _ connect”,是否意味着连接已关闭?

125661 次浏览

这表明正在使用连接池(这是一件好事)。

正如其他答案所说,sp_reset_connection表明连接池正在被重用!

Jimmy Mays 的 MSDN 博客说:

Sp _ set _ connect 不会重置 事务隔离水平 服务器默认设置 连接正在设置。

更新 : 从 SQL 2014开始,对于 TDS 7.3或更高版本的客户端驱动程序,事务隔离级别将重置为默认值。

档号: SQLServer: 跨池连接的隔离级别泄漏

以下是一些补充信息:

Sp _ 复位 _ 连接是做什么的?

像 ODBC 这样的数据访问 API 层, 和 System.Data.SqlClientall 调用(内部)存储过程 当重用 从连接池连接 对象的状态进行重置 在它被重新使用之前, 然而没有任何记录什么 事情会被重置。这篇文章试图 的部分 重置的连接。

Sp _ set _ connect 重置 连接的下列方面:

  • 所有的错误状态和数字 (像@@ error)

  • 停止所有 EC (执行上下文) 它们是父 EC 的子线程 执行并行查询

  • 等待任何未完成的 I/O 未完成的业务

  • 控件上的所有持有缓冲区 服务器的连接

  • 解锁所有缓冲区资源 连接使用的

  • 释放所有分配的内存 所拥有的连接

  • 清除任何工作或临时 属性创建的表 联系

  • 控件所拥有的所有全局游标 联系

  • 关闭所有打开的 SQL-XML 句柄

  • 删除任何打开的 SQL-XML 相关工作表

  • 关闭所有系统表

  • 关闭所有用户表

  • 删除所有临时对象

  • 中止打开的事务

  • 登记时分布式事务的缺陷

  • 递减参考计数 当前数据库中的用户 释放共享数据库锁

  • 释放获得的锁

  • 释放所有获得的句柄

  • 将所有 SET 选项重置为默认值

  • 重置@@ rowcount 值

  • 重置@@ 标识值

  • 重置任何会话级跟踪 选项使用 dbcc traceon ()

  • 将 SQLServer2005中的 CONTEXT _ INFO 重置为 NULL以及更新的 < sub > [不是原始文章的一部分]

Sp _ set _ connect 将不会重置:

  • 安全上下文,这就是为什么 连接池匹配连接 基于精确的连接字符串

  • 使用 Sp _ setprovle输入的应用程序角色,因为在 SQLServer2005之前根本无法还原应用程序角色。从 SQLServer2005开始,可以还原应用程序角色,但只能还原不属于会话的附加信息。在关闭连接之前,应用程序角色需要通过 Sp _ unsetprovle手动还原,使用在执行 sp_setapprole时捕获的“ cookie”值。

注意: 我在这里包括列表,因为我不希望它被丢失在永远短暂的网络。

不过请注意:

如果在存储过程或触发器中发出 SET 事务隔离 LEVEL,则当对象返回控制时,隔离级别将重置为调用该对象时生效的级别。例如,如果您在一个批处理中设置了 REPEATABLE READ,然后该批处理调用一个将隔离级别设置为 SERIALIZABLE 的存储过程,当存储过程将控制返回给该批处理时,隔离级别设置将恢复为 REPEATABLE READ。

Http://msdn.microsoft.com/en-us/library/ms173763.aspx