哪些大侠能帮我分析下我用sp_who抓出的进程为53的结果吗?非常感谢!1, 我BaiDU了下ecid,表示的意思是线程,0代表主线程. sql server里什么时候会用到线程?为什么会有两个为0的主线程?
其中一个还是执行在master数据库上的.2, 为什么53(ecid:2,3,4)的blk为53? 代表什么意思?正常吗?
spid ecid status     loginame hostname blk dbname cmd request_id
53 0 suspended     sa TERRY-PC       0     master SELECT     2
53 0 suspended     sa TERRY-PC       0     uxx_database SELECT     3
53 1 runnable      TERRY-PC       0     uxx_database SELECT     3
53 2 suspended     TERRY-PC       53    uxx_database SELECT     3
53 3 suspended     TERRY-PC       53    uxx_database SELECT     3
53 4 suspended TERRY-PC       53          uxx_database SELECT     3

解决方案 »

  1.   

    如果是并行处理,则会为特定的会话 ID 创建子线程。主线程则以 spid = <xxx> 和 ecid =0 表示。其他子线程具有相同的 spid = <xxx>,但 ecid > 0。 
      

  2.   

    blk 显示的是阻塞进程的会话 ID
    为53 说明出现了堵塞
      

  3.   

    什么样才会引起并行处理呢? ecid =0的我出现了两条记录, 其中一个还是执行在master数据库上的.
      

  4.   


    --说明进程53死锁了,可以用以下方法查看进程53执行的sql
    dbcc inputbuffer(53)
    --杀死进程,解决死锁
    kill 53
      

  5.   

    说明2,3,4呗53阻塞了,处于挂起状态,你可以在执行下sp_lock看看是否存在锁的问题。
      

  6.   

    这个并行处理的结果,多个cpu协调处理,其中有cpu还未处理完。
    先看看能不能优化sql,如果不能优化,可能考虑降低并行度。
      

  7.   

    我现在系统就这几天,只要执行sp_who就会出现类似这样的大量的suspend,但也不是完全阻塞住,还能缓慢执行,再次执行sp_who时就会消失。会是什么原因呢? spid会被自身所在的spid阻塞住?降低了并行度是否会导致效率更低?