Activiti V6.0数据库查询导致生产环境中CPU出现一些最大峰值



请查看以下发现。总之,由于ACTIVITI V6.0表中定义的数据类型,问题出在查询本身。

在ACTIVITI V6.0 DB上进行了以下测试现有查询用时9分53秒(50个eDTU(!

select *
from ACT_RU_VARIABLE
where EXECUTION_ID_ = 10000074
and NAME_= 'abccd'
and TASK_ID_ is null;

新查询用了3毫秒(50个eDTU(!未创建索引。

select *
from ACT_RU_VARIABLE
where EXECUTION_ID_ = '10000074'
and NAME_= 'abccd'
and TASK_ID_ is null;

既然DB表和查询是由Actiti自己管理的,你们能建议一下应该如何解决这个问题吗?

我们曾想过更改数据类型,但我们不确定这将如何影响Actiti的功能工作流,因此希望了解您的见解。

我真的不确定我是否理解你的问题。V6的Activiti模式由Mybatis ORM控制。这里的模式创建脚本:https://github.com/Activiti/Activiti/blob/6.x/modules/activiti-engine/src/main/resources/org/activiti/db/create/activiti.mysql.create.engine.sql明确表示EXECION_ID_字段是Varchar。

create table ACT_RU_VARIABLE (
ID_ varchar(64) not null,
REV_ integer,
TYPE_ varchar(255) not null,
NAME_ varchar(255) not null,
EXECUTION_ID_ varchar(64),
PROC_INST_ID_ varchar(64),
TASK_ID_ varchar(64),
BYTEARRAY_ID_ varchar(64),
DOUBLE_ double,
LONG_ bigint,
TEXT_ varchar(4000),
TEXT2_ varchar(4000),
primary key (ID_)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;

变量实例的MyBatis映射如下:

https://github.com/Activiti/Activiti/blob/6.x/modules/activiti-engine/src/main/resources/org/activiti/db/mapping/entity/VariableInstance.xml

同样,查询使用字符串。

那么,为什么要使用字符串以外的任何东西来查询EXECION_ID_呢?

至于如何处理,使用像Mybatis这样的ORM的美妙之处在于,更改或扩展模式相对容易。您所需要做的就是更新相应的mapping.xml、crate/drop脚本和相关的Entity。

最新更新