对于Oracle工作流的优化方式主要分两大类,一类是流程设计上的优化,一类是数据库性能的优化。

流程设计优化:

  1. 仔细选择同步处理和异步处理模式。
    如果选择同步处理模式,则在提交后系统立即进行工作流处理,在流程结束前,前端程序将一直处于等待状态。如果选择异步处理模式,程序提交工作流后控制权立即返回,工作流后台引擎会根据设定的频率在后台进行处理。另外一种很少用到的处理模式是强制同步,系统不将数据插入数据库,直接用一个SQL,并且在一个Session中处理完毕。
  2. 尽量减少项目属性(通常用于存储全局变量)。当工作流启动时,系统会将这些属性全部拷贝一份,因而这会直接印影响工作流启动速度。另外,这些属性最好引用或保存静态变量,而不要去引用存放在数据库中的值。
  3. 尽量减少消息属性。如果需要在消息中存放不同的变量,也建议用最少的消息属性来实现,比如用Document来动态生成消息内容。
  4. 减少子流程,因为这需要消耗额外的DML操作和状态信息拷贝。
  5. 延迟活动。这是缩短响应时间最简单有效的办法之一,让一些需要较多处理时间的活动在后台交给工作流引擎处理,主流程则继续。

数据库性能优化:

  1. 分区。这通常在安装阶段即可进行,当然,在后期也可以进行。操作步骤可参考之前的文章《给工作流大表分区》。
  2. 清理过期数据。清理过期的运行时数据和WF_CONTROL数据,减少数据表大小。

最简单的优化方式,自然是在DB进行优化,比如定期清理。但是从设计角度考虑,同步、异步和延迟处理的配合使用,是更为得体的方式。各种方式,因时而异,因人而异。