liqiyu

承接.net相关软件外包,联系qq:273997269

导航

sql server 2000数据库 最近经常出现某进程一直占用资源,阻塞?死锁?

OA的数据库最近多次出现某进程一直占用资源,导致其他进程无法执行。使用sp_who2 和 sql server profiler跟踪查询,发现有以下几个语句常常占用资源:

1、declare @P1 int set @P1=NULL declare @P2 int set @P2=0 declare @P3 int set @P3=0 

exec sp_cursorprepexec @P1 output, @P2 output, N'@P0 nvarchar(4000)',

N'SELECT COUNT(*) AMOUNT FROM (
SELECT DISTINCT WFWorkItem.processChName as processChName,WFWorkItem.workItemDesc as workItemDesc,
...
from WFWorkItem ,WFWIParticipant
where WFWorkItem.workItemID = WFWIParticipant.workItemID
and (WFWorkItem.currentState = 10 AND WFWorkItem.participant = @P0 AND WFWIParticipant.partiInType=''EXE'')) T1 ',
4112, 1, @P3 output, N'chenhuifeng' select @P1, @P2, @P3

2、declare @P1 int set @P1=72 declare @P2 int set @P2=180150071 declare @P3 int set @P3=0 

exec sp_cursorprepexec @P1 output, @P2 output, N'@P0 nvarchar(4000),@P1 nvarchar(4000)',
N'SELECT COUNT(*) AMOUNT FROM (
SELECT DISTINCT BH BH,BT BT,RQ RQ,

...
FROM V_CNMC_WFWOCANYULIUCHEN WHERE V_CNMC_WFWOCANYULIUCHEN.MKDM=@P0
and V_CNMC_WFWOCANYULIUCHEN.participant=@P1 ) T1 ', 4112, 1, @P3 output, N'411', N'puxin' select @P1, @P2, @P3

3、 set transaction isolation level  read committed 

这三条语句都是由普元eos工作流平台产生的,我们的OA使用了该平台,因此我们无法修改这些语句。

后来咨询数据库专家zz,回复说可能是sql server 2000 的问题。后来上网搜索,原来好多人遇到sql 2000出现数据库阻塞的现象,原因是sql2000在程序A对表Table1进行DML操作的时候,如果其他程序想Select 该Table1就会等待,知道程序A的DML操作结束,以免“脏读”。

我估计就是某DML操作一直进行,导致后面的select操作就一直等待。

新的问题又来了:

1、为什么以上列出的三条语句会一直占用资源?

2、OA已经用了至少5个年头,为什么最近会频繁出现阻塞?

3、之前有段时间出现过类似问题,但重启EOS服务就好了,然后一年多都没问题,这个又怎么解释?这一年也是每天用,总数据量也不大,目前工作流主表不到2W行数据。

暂时的解决方案是:升级sql server。

posted on 2014-01-08 01:09  liqiyu  阅读(2296)  评论(0编辑  收藏  举报