zoukankan      html  css  js  c++  java
  • sql server 查询某个表一直显示"正在执行中..."的问题

    问题描述:只是单纯的执行了"select count(*) from 某表";数据表中只有一两条数据,能查询其他表,唯独这个表不能进行任何操作;

    经百度搜索实验,发现应该是某个进程阻塞了,使用了一下代码进行的查询(这个比较详细):

     1 declare @spid int,@bl int  
     2 DECLARE s_cur CURSOR FOR   select  0 ,blocked   from (select * from sys.sysprocesses where  blocked>0 ) a  
     3 where not exists(select * from (select * from sys.sysprocesses where  blocked>0 ) b   where a.blocked=spid)   
     4 union 
     5 select spid,blocked from sys.sysprocesses where  blocked>0   OPEN s_cur   FETCH NEXT FROM s_cur INTO @spid,@bl   WHILE @@FETCH_STATUS = 0  
     6 begin   if @spid =0             
     7 select ' 引起数据库死锁的是: '+ CAST(@bl AS VARCHAR(10)) + ' 进程号, 其执行的SQL 语法如下'   else              
     8 select ' 进程号SPID :'+ CAST(@spid AS VARCHAR(10))+ '' + ' 进程号SPID :'+ CAST(@bl AS VARCHAR(10)) +' 阻塞, 其当前进程执行的SQL 语法如下' 
     9 DBCC INPUTBUFFER (@bl )   FETCH NEXT FROM s_cur INTO @spid,@bl   end   CLOSE s_cur  
    10 DEALLOCATE s_cur 

    还有其他的语句也都可以证明有进程被阻塞了,只不过我是初学者,看不懂:

    1 use master
    2 go
    3 --检索死锁进程
    4 select spid, blocked, loginame, last_batch, status, cmd, hostname, program_name
    5 from sysprocesses
    6 where spid in
    7 ( select blocked from sysprocesses where blocked <> 0 ) or (blocked <>0)

    或者

    1 select * from sys.sysprocesses where blocked<>0

    解决办法:只需要杀死阻塞进程就可以了:

    1 select spid, blocked, loginame, last_batch, status, cmd, hostname, program_name
    2 from sysprocesses
    3 where spid in
    4 ( select blocked from sysprocesses where blocked <> 0 ) or (blocked <>0)
    5 
    6 kill spid(进程号)
  • 相关阅读:
    Redis下载和安装
    Redis的Docker镜像
    Hadoop docs
    Hadoop On Demand
    Hadoop Archives
    web.xml中 error-page的正确用法
    zepto.js + iscroll.js上拉加载 下拉加载的 移动端 新闻列表页面
    SVN上传文件注意事项-------------------养成良好的项目文件上传习惯
    在MyEclipse中搭建Spring MVC开发环境
    史上最全最强SpringMVC详细示例实战教程
  • 原文地址:https://www.cnblogs.com/luna-hehe/p/8658900.html
Copyright © 2011-2022 走看看