sql server中sleeping状态

sql server中sleeping状态

一、什么是sleeping

sleeping 代表建立了数据库连接,但是,程序段没有发出SQL命令. 因为很多应用程序为了减少打开和关闭连接的开销,在完成数据库中的操作后,仍然保持数据库的连接。这些连接最主要的目的是重用。

如果代码编写的合适,我们不应该看到大量的sleeping连接。

二、产生sleeping状态的几个实例

1、建立连接并打开

  •  
  • 
    SqlConnection sqlConnection = new SqlConnection("Server=(local);Database=Testdb;UId=test;Pwd=test;");
    sqlConnection.Open();
    
    		
  • 查看数据库会看到,此时就会出现SLEEPING状态。这就是建立了连接但是没有发出任何SQL命令

    2、SQL执行语句完成

    在执行的过程中可能有(running,suspened,runnale状态)等他执行完。查看数据库中的状态变为sleeping.

  •  
  • 
    SqlCommand sqlCommand = new SqlCommand("select name from dbo.testTable", sqlConnection);
    sqlCommand.ExecuteScalar();
    
    		
  • 三、由sleeping状态可能引起的问题

    有可能阻塞其它的进程会话,导致其它会话等待时间很长。

    四、解决方法

    查看产生sleeping状态的执行的SQL语句,定位对应到程序中的代码段,然后进行下面的改善措施:

    1、在代码中加入try catch的异常处理,在处理的的代码中加入 :IF @@TRANCOUNT > 0 ROLLBACK TRAN

    2、找到对应的执行的SQL,找出他执行超时的原因加以解决。

    3、使用 SET XACT_ABORT ON; 他表示 如果执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚。

    标签: