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 语句产生运行时错误,则整个事务将终止并回滚。