日期:2014-05-17  浏览次数:20503 次

进程阻塞
今天在做数据库发布的时候,刚新建发布,发现第一步运行就一直在转。怀疑是进程被阻塞了。
于是执行了下:
select * from sys.sysprocesses where blocked<>0

发现如下进程阻塞情况:

根据日期分析,75号进程应该是发布订阅的进程,被15号进程给阻塞了,但是15号进程被21号进程阻塞。
通过执行sp_who2 15 和sp_who2 21查看进程信息如下:



15号和21号进程从3月20号就开始阻塞了,用kill方法没法结束,提示:只能终止用户进程。
问下大家,有办法解决吗?除开重启数据库的方法外。

------解决方案--------------------
为什么设置auto shrink? 将这个设定取消看看。

------解决方案--------------------
按微软的解释shrink是可以随时停止的,不存在回滚。
auto_shrink一定要关掉啊,以前生产环境应为这个导致用户登录不了。
------解决方案--------------------
不建议使用自动收缩,checkpoint那个也是系统进程无法kill掉的。你的这个阻塞是应为自动收缩引起了后续的阻塞,而自动收缩本来就是极其耗费资源的操作,并且你也不保证期间会不会出问题,所以自动收缩可能会持续很久,特别是你的IO出现压力的时候,收缩时间更长。就造成阻塞了,这个进程杀不掉的,所以如果关掉自动收缩都无效的话,只能重启服务了
------解决方案--------------------
kill 加上 with statusonly 选项可以显示事务会滚的进度。