日期:2014-05-16  浏览次数:20562 次

sql2000阻塞问题?
数据库用sql2000 这几天管理系统前台查询经常出现打不开,好像就涉及到数据库的一张表,然后打开企业管理器发现有100多个阻塞,并发操作这个系统的也不到10人。奇怪的是就这几天开始,然后重启服务器后奇就好了,但过了几分钟后又不行了。查询不到数据的这张表里面也只有3万左右的数据,这个系统最近没有改过程序,数据每天也不多,服务器也是比较新的,用了1年。请问为什么会出现这个是什么问题?
------解决方案--------------------
1. 在master库中执行:select * from sys.sysprocesses where blocked<>0
2.如果上面那句找到有某个spid,就用dbcc inputbuffer(对应的spid)看看是什么语句,如果这些语句大多相同,那就要优化这部分的代码了
------解决方案--------------------
查找阻塞的信息:

--1.查看阻塞信息
select spid,loginame,waitresource from master..sysprocesses 
where blocked <> 0
/*
spid loginame waitresource
53 ggg-PC\Administrator RID:1:1:1385:0
*/



--2.查看语句
dbcc inputbuffer(53)
/*
eventInfo
select * from xx
*/



--3.查看锁的信息
exec sp_lock @spid1 = 53
/*
spid dbid ObjId IndId Type Resource Mode Status
53 1 1335727861 0 PAG 1:1385                           IS GRANT
53 1 1335727861 0 RID 1:1385:0                         S WAIT
53 1 1335727861 0 TAB                                  IS GRANT
*/

--select OBJECT_ID(1335727861) as table_name



--4.打开数据库
select *
from sysdatabases
where dbid = 1
/*
name dbid sid mode status status2 crdate reserved category cmptlevel filename version
master 1 0x01 0 65544 1090520064 2003-04-08 09:13:36.390 1900-01-01 00:00:00.000 0 100 C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\master.mdf 661
*/



--5.根据锁信息中的ObjId列:1335727861,找到了这个xx表
select *
from sysobjects
where id = 1335727861
/*
name id xtype uid info status base_schema_ver replinfo parent_obj crdate ftcatid schema_ver stats_schema_ver type userstat sysstat indexdel refdate version deltrig instrig updtrig seltrig category cache
xx 1335727861 U  1 0 0 0 0 0 2013-12-25 08:55:07.523 0 0 0 U  1 3 0 2013-12-25 08:55:07.523 0 0 0 0 0 0 0
*/

------解决方案--------------------
关于阻塞的查询语句很多。你自己去看看。
关键是找出阻塞与被阻塞。用SQL RPOFILER跟踪一下 找出阻塞原因。