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
4)如果数据库服务器性能不行,则造成锁定的几率变大
因为其他软件的限制,有个客户安装了32位的OS和SqlServer,开始SqlServer的大内存支持没有正确开启,批量提交任务时频繁发生锁定。后来正确启用SQLServer大数据支持,锁定现象就出现的很少了。 所以,数据库还是要用64位的。
5)如果用代码解锁任务后提交依然出错,可以尝试iisreset后解锁。