数据库其他表正常,就一个表访问特别慢。一共只74行数据,但select * 的时候半天出不来结果,更别提前台跟这个表相关的业务了。
这是什么原因啊,是锁表之类的造成的吗?折腾2天了,求助呀。

解决方案 »

  1.   

    CREATE Table #Who(spid int,    ecid int,    status nvarchar(50),    loginname nvarchar(50),    hostname nvarchar(50),    blk int,    dbname nvarchar(50),    cmd nvarchar(50),    request_ID int);CREATE Table #Lock(spid int,    dpid int,    objid int,    indld int,    [Type] nvarchar(20),    Resource nvarchar(50),    Mode nvarchar(10),    Status nvarchar(10));INSERT INTO #Who    EXEC sp_who active  --看哪个引起的阻塞,blk INSERT INTO #Lock    EXEC sp_lock  --看锁住了那个资源id,objid DECLARE @DBName nvarchar(20);SET @DBName='NameOfDataBase'SELECT #Who.* FROM #Who WHERE dbname=@DBNameSELECT #Lock.* FROM #Lock    JOIN #Who        ON #Who.spid=#Lock.spid            AND dbname=@DBName;--最后发送到SQL Server的语句DECLARE crsr Cursor FOR    SELECT blk FROM #Who WHERE dbname=@DBName AND blk<>0;DECLARE @blk int;open crsr;FETCH NEXT FROM crsr INTO @blk;WHILE (@@FETCH_STATUS = 0)BEGIN;    dbcc inputbuffer(@blk);    FETCH NEXT FROM crsr INTO @blk;END;close crsr;DEALLOCATE crsr;--锁定的资源SELECT #Who.spid,hostname,objid,[type],mode,object_name(objid) as objName FROM #Lock    JOIN #Who        ON #Who.spid=#Lock.spid            AND dbname=@DBName    WHERE objid<>0;DROP Table #Who;DROP Table #Lock;
      

  2.   


    --2005
    select * from master.dbo.syslockinfo where object_name(rsc_objid)=N'your table name'
    --好像,2005管理,活动监视器,可以看到数据库是否存在死锁
      

  3.   

    try this, select * from [表名] (nolock)
      

  4.   

    前面我的描述可能不大准确,实际上是一会正常,一会不正常,并且当用户数量少的时候,明显查询都是正常的,所以可以判断死锁造成的可能性很大。
    我在监视器当中查看了一些挂起的语句,其中的查询都是没有加(nolock)的,另外表关联也不叫多,where条件方面还比较合理,但是由于特殊原因我现在无法修改这些sql语句,所以我这里提出一个疑问,因为客户端用的是无线,假如客户端在打开某个页面向服务器发起查询请求,然后由于无线网络不稳定,这时候其他用户访问刚才查询所涉及到的那些表会有影响吗。