Skip to content

Commit

Permalink
fix(engine): speedup deployment delete queries for mysql & mariadb
Browse files Browse the repository at this point in the history
related to CAM-8064
  • Loading branch information
tasso94 committed Aug 3, 2017
1 parent de34670 commit a6c5eb8
Show file tree
Hide file tree
Showing 8 changed files with 241 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -141,8 +141,19 @@ public class DbSqlSessionFactory implements SessionFactory {
addDatabaseSpecificStatement(mysqlLikeDatabase, "selectProcessDefinitionCountByQueryCriteria", "selectProcessDefinitionCountByQueryCriteria_mysql");
addDatabaseSpecificStatement(mysqlLikeDatabase, "selectDeploymentsByQueryCriteria", "selectDeploymentsByQueryCriteria_mysql");
addDatabaseSpecificStatement(mysqlLikeDatabase, "selectDeploymentCountByQueryCriteria", "selectDeploymentCountByQueryCriteria_mysql");

// related to CAM-8064
addDatabaseSpecificStatement(mysqlLikeDatabase, "deleteExceptionByteArraysByIds", "deleteExceptionByteArraysByIds_mysql");
addDatabaseSpecificStatement(mysqlLikeDatabase, "deleteErrorDetailsByteArraysByIds", "deleteErrorDetailsByteArraysByIds_mysql");
addDatabaseSpecificStatement(mysqlLikeDatabase, "deleteHistoricDetailByteArraysByIds", "deleteHistoricDetailByteArraysByIds_mysql");
addDatabaseSpecificStatement(mysqlLikeDatabase, "deleteHistoricIdentityLinksByTaskProcessInstanceIds", "deleteHistoricIdentityLinksByTaskProcessInstanceIds_mysql");
addDatabaseSpecificStatement(mysqlLikeDatabase, "deleteHistoricIdentityLinksByTaskCaseInstanceIds", "deleteHistoricIdentityLinksByTaskCaseInstanceIds_mysql");
addDatabaseSpecificStatement(mysqlLikeDatabase, "deleteHistoricDecisionInputInstanceByteArraysByDecisionInstanceIds", "deleteHistoricDecisionInputInstanceByteArraysByDecisionInstanceIds_mysql");
addDatabaseSpecificStatement(mysqlLikeDatabase, "deleteHistoricDecisionOutputInstanceByteArraysByDecisionInstanceIds", "deleteHistoricDecisionOutputInstanceByteArraysByDecisionInstanceIds_mysql");
addDatabaseSpecificStatement(mysqlLikeDatabase, "deleteHistoricVariableInstanceByIds", "deleteHistoricVariableInstanceByIds_mysql");
addDatabaseSpecificStatement(mysqlLikeDatabase, "deleteHistoricVariableInstanceByteArraysByIds", "deleteHistoricVariableInstanceByteArraysByIds_mysql");
addDatabaseSpecificStatement(mysqlLikeDatabase, "deleteCommentsByIds", "deleteCommentsByIds_mysql");
addDatabaseSpecificStatement(mysqlLikeDatabase, "deleteAttachmentByteArraysByIds", "deleteAttachmentByteArraysByIds_mysql");

constants = new HashMap<String, String>();
constants.put("constant.event", "'event'");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,16 +57,33 @@

<delete id="deleteAttachmentByIds" parameterType="java.util.Map">
delete from ${prefix}ACT_HI_ATTACHMENT
<include refid="selectAttachmentsByIdsSql"/>
<where>
<include refid="selectAttachmentsProcessInstanceByIdsSql"/>
<include refid="selectAttachmentsTaskProcessAndCaseInstanceByIdsSql"/>
</where>
</delete>

<delete id="deleteAttachmentByteArraysByIds" parameterType="java.util.Map">
delete from ${prefix}ACT_GE_BYTEARRAY
where ID_ in
(select distinct CONTENT_ID_
from ${prefix}ACT_HI_ATTACHMENT
<include refid="selectAttachmentsByIdsSql"/>
and CONTENT_ID_ is not NULL)
<where>
<include refid="selectAttachmentsProcessInstanceByIdsSql"/>
<include refid="selectAttachmentsTaskProcessAndCaseInstanceByIdsSql"/>
and CONTENT_ID_ is not NULL
</where>)
</delete>

<delete id="deleteAttachmentByteArraysByIds_mysql" parameterType="java.util.Map">
delete B from ${prefix}ACT_GE_BYTEARRAY B
inner join ${prefix}ACT_HI_ATTACHMENT A
on B.ID_ = A.CONTENT_ID_
<include refid="selectAttachmentsTaskProcessAndCaseInstanceByIdsSql_mysql"/>
<where>
<include refid="selectAttachmentsProcessInstanceByIdsSql"/>
and A.CONTENT_ID_ is not NULL
</where>
</delete>

<delete id="deleteByteArraysByIds">
Expand Down Expand Up @@ -113,16 +130,18 @@
and ID_ = #{id,jdbcType=VARCHAR}
</select>

<sql id="selectAttachmentsByIdsSql">
WHERE
<sql id="selectAttachmentsProcessInstanceByIdsSql">
<if test="processInstanceIds != null &amp;&amp; processInstanceIds.size() > 0">
PROC_INST_ID_ IN
and PROC_INST_ID_ IN
<foreach item="processInstanceId" index="index" collection="processInstanceIds" open="(" separator="," close=")">
#{processInstanceId}
</foreach>
</if>
</sql>

<sql id="selectAttachmentsTaskProcessAndCaseInstanceByIdsSql">
<if test="taskProcessInstanceIds != null &amp;&amp; taskProcessInstanceIds.size() > 0">
TASK_ID_ IN
and TASK_ID_ IN
(select distinct ID_ from ${prefix}ACT_HI_TASKINST
where PROC_INST_ID_ in
<foreach item="processInstanceId" index="index" collection="taskProcessInstanceIds" open="(" separator="," close=")">
Expand All @@ -131,7 +150,7 @@
)
</if>
<if test="caseInstanceIds != null &amp;&amp; caseInstanceIds.size() > 0">
TASK_ID_ IN
and TASK_ID_ IN
(select distinct ID_ from ${prefix}ACT_HI_TASKINST
where CASE_INST_ID_ in
<foreach item="caseInstanceId" index="index" collection="caseInstanceIds" open="(" separator="," close=")">
Expand All @@ -141,4 +160,23 @@
</if>
</sql>

<sql id="selectAttachmentsTaskProcessAndCaseInstanceByIdsSql_mysql">
<if test="taskProcessInstanceIds != null &amp;&amp; taskProcessInstanceIds.size() > 0">
inner join ${prefix}ACT_HI_TASKINST T
on TASK_ID_ = T.ID_
and T.PROC_INST_ID_ in
<foreach item="processInstanceId" index="index" collection="taskProcessInstanceIds" open="(" separator="," close=")">
#{processInstanceId}
</foreach>
</if>
<if test="caseInstanceIds != null &amp;&amp; caseInstanceIds.size() > 0">
inner join ${prefix}ACT_HI_TASKINST T
on TASK_ID_ = T.ID_
and T.CASE_INST_ID_ in
<foreach item="caseInstanceId" index="index" collection="caseInstanceIds" open="(" separator="," close=")">
#{caseInstanceId}
</foreach>
</if>
</sql>

</mapper>
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,30 @@
</if>
</delete>

<delete id="deleteCommentsByIds_mysql" parameterType="java.util.Map">
delete CO from ${prefix}ACT_HI_COMMENT CO
left join ${prefix}ACT_HI_TASKINST T
on CO.TASK_ID_ = T.ID_
<if test="taskProcessInstanceIds != null &amp;&amp; taskProcessInstanceIds.size() > 0">
where T.PROC_INST_ID_ in
<foreach item="processInstanceId" index="index" collection="taskProcessInstanceIds" open="(" separator="," close=")">
#{processInstanceId}
</foreach>
</if>
<if test="taskCaseInstanceIds != null &amp;&amp; taskCaseInstanceIds.size() > 0">
where T.CASE_INST_ID_ in
<foreach item="caseInstanceId" index="index" collection="taskCaseInstanceIds" open="(" separator="," close=")">
#{caseInstanceId}
</foreach>
</if>
<if test="processInstanceIds != null &amp;&amp; processInstanceIds.size() > 0">
where CO.PROC_INST_ID_ in
<foreach item="processInstanceId" index="index" collection="processInstanceIds" open="(" separator="," close=")">
#{processInstanceId}
</foreach>
</if>
</delete>

<!-- COMMENT RESULTMAP -->

<resultMap id="commentResultMap" type="org.camunda.bpm.engine.impl.persistence.entity.CommentEntity">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,17 @@
and BYTEARRAY_ID_ is not NULL)
</delete>

<delete id="deleteHistoricDecisionInputInstanceByteArraysByDecisionInstanceIds_mysql">
delete B from ${prefix}ACT_GE_BYTEARRAY B
inner join ${prefix}ACT_HI_DEC_IN D
on B.ID_ = D.BYTEARRAY_ID_
and D.DEC_INST_ID_ in
<foreach item="decisionInstanceId" index="index" collection="list" open="(" separator="," close=")">
#{decisionInstanceId}
</foreach>
and D.BYTEARRAY_ID_ is not NULL
</delete>

<!-- result map -->

<resultMap id="historicDecisionInputInstanceResultMap" type="org.camunda.bpm.engine.impl.history.event.HistoricDecisionInputInstanceEntity">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,17 @@
and BYTEARRAY_ID_ is not NULL)
</delete>

<delete id="deleteHistoricDecisionOutputInstanceByteArraysByDecisionInstanceIds_mysql">
delete B from ${prefix}ACT_GE_BYTEARRAY B
inner join ${prefix}ACT_HI_DEC_OUT D
on B.ID_ = D.BYTEARRAY_ID_
and D.DEC_INST_ID_ in
<foreach item="decisionInstanceId" index="index" collection="list" open="(" separator="," close=")">
#{decisionInstanceId}
</foreach>
and D.BYTEARRAY_ID_ is not NULL
</delete>

<!-- result map -->

<resultMap id="historicDecisionOutputInstanceResultMap" type="org.camunda.bpm.engine.impl.history.event.HistoricDecisionOutputInstanceEntity">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,16 +127,33 @@

<delete id="deleteHistoricDetailsByIds" parameterType="java.util.Map">
delete from ${prefix}ACT_HI_DETAIL
<include refid="selectHistoricDetailsByIdsSql"/>
<where>
<include refid="selectHistoricDetailsProcessAndCaseInstanceByIdsSql"/>
<include refid="selectHistoricDetailsTaskProcessAndCaseInstanceByIdsSql"/>
</where>
</delete>

<delete id="deleteHistoricDetailByteArraysByIds" parameterType="java.util.Map">
delete from ${prefix}ACT_GE_BYTEARRAY
where ID_ in
(select DISTINCT BYTEARRAY_ID_
from ${prefix}ACT_HI_DETAIL RES
<include refid="selectHistoricDetailsByIdsSql"/>
and BYTEARRAY_ID_ is not NULL)
(select DISTINCT BYTEARRAY_ID_
from ${prefix}ACT_HI_DETAIL
<where>
<include refid="selectHistoricDetailsProcessAndCaseInstanceByIdsSql"/>
<include refid="selectHistoricDetailsTaskProcessAndCaseInstanceByIdsSql"/>
and BYTEARRAY_ID_ is not NULL
</where>)
</delete>

<delete id="deleteHistoricDetailByteArraysByIds_mysql" parameterType="java.util.Map">
delete B from ${prefix}ACT_GE_BYTEARRAY B
inner join ${prefix}ACT_HI_DETAIL D
on B.ID_ = D.BYTEARRAY_ID_
<include refid="selectHistoricDetailsTaskProcessAndCaseInstanceByIdsSql_mysql"/>
<where>
<include refid="selectHistoricDetailsProcessAndCaseInstanceByIdsSql"/>
and D.BYTEARRAY_ID_ is not NULL
</where>
</delete>

<!-- HISTORIC DETAILS RESULTMAP -->
Expand Down Expand Up @@ -278,22 +295,24 @@
</where>
</sql>

<sql id="selectHistoricDetailsByIdsSql">
WHERE
<sql id="selectHistoricDetailsProcessAndCaseInstanceByIdsSql">
<if test="processInstanceIds != null &amp;&amp; processInstanceIds.size() > 0">
PROC_INST_ID_ IN
and PROC_INST_ID_ IN
<foreach item="processInstanceId" index="index" collection="processInstanceIds" open="(" separator="," close=")">
#{processInstanceId}
</foreach>
</if>
<if test="caseInstanceIds != null &amp;&amp; caseInstanceIds.size() > 0">
CASE_INST_ID_ IN
and CASE_INST_ID_ IN
<foreach item="caseInstanceId" index="index" collection="caseInstanceIds" open="(" separator="," close=")">
#{caseInstanceId}
</foreach>
</if>
</sql>

<sql id="selectHistoricDetailsTaskProcessAndCaseInstanceByIdsSql">
<if test="taskProcessInstanceIds != null &amp;&amp; taskProcessInstanceIds.size() > 0">
TASK_ID_ IN
and TASK_ID_ IN
(select distinct ID_ from ${prefix}ACT_HI_TASKINST
where PROC_INST_ID_ in
<foreach item="processInstanceId" index="index" collection="taskProcessInstanceIds" open="(" separator="," close=")">
Expand All @@ -302,7 +321,7 @@
)
</if>
<if test="taskCaseInstanceIds != null &amp;&amp; taskCaseInstanceIds.size() > 0">
TASK_ID_ IN
and TASK_ID_ IN
(select distinct ID_ from ${prefix}ACT_HI_TASKINST
where CASE_INST_ID_ in
<foreach item="caseInstanceId" index="index" collection="taskCaseInstanceIds" open="(" separator="," close=")">
Expand All @@ -312,4 +331,23 @@
</if>
</sql>

<sql id="selectHistoricDetailsTaskProcessAndCaseInstanceByIdsSql_mysql">
<if test="taskProcessInstanceIds != null &amp;&amp; taskProcessInstanceIds.size() > 0">
inner join ${prefix}ACT_HI_TASKINST T
on TASK_ID_ = T.ID_
and T.PROC_INST_ID_ in
<foreach item="processInstanceId" index="index" collection="taskProcessInstanceIds" open="(" separator="," close=")">
#{processInstanceId}
</foreach>
</if>
<if test="taskCaseInstanceIds != null &amp;&amp; taskCaseInstanceIds.size() > 0">
inner join ${prefix}ACT_HI_TASKINST T
on TASK_ID_ = T.ID_
and T.CASE_INST_ID_ in
<foreach item="caseInstanceId" index="index" collection="taskCaseInstanceIds" open="(" separator="," close=")">
#{caseInstanceId}
</foreach>
</if>
</sql>

</mapper>
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,16 @@
)
</delete>

<delete id="deleteHistoricIdentityLinksByTaskProcessInstanceIds_mysql">
delete I from ${prefix}ACT_HI_IDENTITYLINK I
inner join ${prefix}ACT_HI_TASKINST T
on T.ID_ = I.TASK_ID_
and T.PROC_INST_ID_ in
<foreach item="processInstanceId" index="index" collection="list" open="(" separator="," close=")">
#{processInstanceId}
</foreach>
</delete>

<delete id="deleteHistoricIdentityLinksByTaskCaseInstanceIds">
delete from ${prefix}ACT_HI_IDENTITYLINK
where TASK_ID_ IN
Expand All @@ -68,6 +78,16 @@
</foreach>
)
</delete>

<delete id="deleteHistoricIdentityLinksByTaskCaseInstanceIds_mysql">
delete I from ${prefix}ACT_HI_IDENTITYLINK I
inner join ACT_HI_TASKINST T
on I.TASK_ID_ = T.ID_
and T.CASE_INST_ID_ in
<foreach item="caseInstanceId" index="index" collection="list" open="(" separator="," close=")">
#{caseInstanceId}
</foreach>
</delete>
<!-- HISTORIC IDENTITY LINK RESULTMAP -->

<resultMap id="historicIdentityLinkResultMap" type="org.camunda.bpm.engine.impl.persistence.entity.HistoricIdentityLinkLogEntity">
Expand Down
Loading

0 comments on commit a6c5eb8

Please sign in to comment.