ref:

http://msdn.microsoft.com/en-us/library/dd441390(v=office.12).aspx

1)为什么会被锁定

a.因为产品本身问题:http://connect.nintex.com/forums/thread/6503.aspx

b.因为工作流代码变动-老工作流实例无法正常反序列化.--本文不讨论此种情况

c.因为超出了服务器处理能力,造成任务排队处理,未处理完成的始终处于锁定状态。 

2) 如何重现

正常情况下重现很困难。

场景一:

有一种特殊情况:启动一个实例,同时创建多个并行任务,然后同时异步提交2个任务,会有一个任务被锁. 锁定的任务解锁后可以正常提交。

场景2:

同时提交大量任务时也会出现锁定,我们开发了一个批量审批的Webpart,允许用户一次提交100个任务,发现经常会出现任务锁定。提交时发现很多任务处于锁定状态,服务器处理的很慢,需要经过很长时间,才能把所有锁定的任务处理完成。

修改工作流日志级别为Verbose,发现大量的日志:RunWorkflow: No pending events - possibly targeted for async delivery: List:/Site/MyList Item:<myItemID>

 后来只允许一次提交50,然后把workflow-eventdelivery-throttle参数也改成50,任务处理速度明显变快。

cd C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\bin
stsadm -o setproperty -pn workflow-eventdelivery-throttle -pv "60"

但是这样会造成一个用户批量提交时,会占用大量服务器资源,造成其他用户访问系统响应慢。

3)关于Workflow限流和启用工作流详细日志

About the “workflow-eventdelivery-throttle” parameter

http://blogs.msdn.com/b/vincent_runge/archive/2008/09/16/about-the-workflow-eventdelivery-throttle-parameter.aspx

http://blogs.msdn.com/b/vincent_runge/archive/2008/09/16/about-the-workflow-eventdelivery-throttle-parameter.aspx

4)如果数据库服务器性能不行,则造成锁定的几率变大

因为其他软件的限制,有个客户安装了32位的OS和SqlServer,开始SqlServer的大内存支持没有正确开启,批量提交任务时频繁发生锁定。后来正确启用SQLServer大数据支持,锁定现象就出现的很少了。  所以,数据库还是要用64位的。

 5)如果用代码解锁任务后提交依然出错,可以尝试iisreset后解锁。

posted on 2012-08-02 12:55  jianyi  阅读(1384)  评论(0编辑  收藏  举报