sp_reset_connection有什么作用?

时间:2009-02-27 19:57:15

标签: sql sql-server connection-pooling

sp_reset_connection似乎是由SQL Server连接池调用的,以确保从池中重用的连接重置大部分设置。有没有人确切地知道它做了什么但不做什么呢?

例如,我从this post看到它没有重置事务隔离级别

2 个答案:

答案 0 :(得分:67)

数据访问API的层(如ODBC,OLE-DB和SqlClient)在重用连接池中的连接时调用(内部)存储过程sp_reset_connection。这样做是为了在重新使用之前重置连接状态。

似乎没有关于重置内容的官方文档,但这里有一个非官方的列表。

sp_reset_connection重置连接的以下方面:

  
      
  • 它会重置所有错误状态和数字(例如@@ error)
  •   
  • 它会停止作为a的子线程的所有EC(执行上下文)   父EC执行并行查询
  •   
  • 它会等待任何未完成的优秀I / O操作
  •   
  • 它将通过连接释放服务器上任何保留的缓冲区
  •   
  • 它将解锁连接使用的所有缓冲区资源
  •   
  • 它将释放连接所拥有的所有内存
  •   
  • 它将清除由...创建的任何工作或临时表   连接
  •   
  • 它会杀死连接所拥有的所有全局游标
  •   
  • 它将关闭所有打开的SQL-XML句柄
  •   
  • 它将删除所有与SQL-XML相关的开放工作表
  •   
  • 它将关闭所有系统表
  •   
  • 它将关闭所有用户表
  •   
  • 它将删除所有临时对象
  •   
  • 将中止未结交易
  •   
  • 在入伍时将从分布式交易中瑕疵
  •   
  • 它将减少当前数据库中用户的引用计数;   哪个版本发布共享数据库锁
  •   
  • 它将释放获得的锁
  •   
  • 它将释放可能已获得的任何句柄
  •   
  • 它会将所有SET选项重置为默认值
  •   
  • 它会重置@@ rowcount值
  •   
  • 它将重置@@ identity值
  •   
  • 它将使用dbcc traceon()
  • 重置任何会话级跟踪选项   

sp_reset_connection不会重置:

  
      
  • 安全上下文,这就是连接池匹配连接的原因   基于确切的连接字符串
  •   
  • 如果您使用sp_setapprole输入了应用程序角色,则应用程序   角色无法还原
  •   
  • 事务隔离级别
  •   

答案 1 :(得分:-1)

来自this forum post

sp_reset_connection存储过程用于重置连接 因此,当它在池中使用时,不会存储前一个会话中的任何内容 这是特定于连接的。