<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Performance issue due to dynamic query creation in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/performance-issue-due-to-dynamic-query-creation/m-p/83962#M56465</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;we made some performance tests with Activiti on a hardware with 12 cores (tomcat server with Activiti + separate database server).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;During these tests we observed a contention in MyBatis' dynamic query creation mechanism which is called from &lt;/SPAN&gt;&lt;EM&gt;ExecutionEntity.remove()&lt;/EM&gt;&lt;SPAN&gt; for every finished process instance. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The dynamic queries are created by: &lt;/SPAN&gt;&lt;EM&gt;TaskQueryImpl(commandContext).executionId(id).list()&lt;/EM&gt;&lt;SPAN&gt; and &lt;/SPAN&gt;&lt;EM&gt;JobQueryImpl(commandContext).executionId(id).list()&lt;/EM&gt;&lt;SPAN&gt;, see below:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; …&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CommandContext commandContext = Context.getCommandContext();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;TaskEntity&amp;gt; tasks = (List) new TaskQueryImpl(commandContext)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .executionId(id)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .list();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (TaskEntity task : tasks) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (replacedBy!=null) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; task.setExecution(replacedBy);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; commandContext&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .getTaskManager()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .deleteTask(task, TaskEntity.DELETE_REASON_DELETED, false);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;Job&amp;gt; jobs = new JobQueryImpl(commandContext)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .executionId(id)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .list();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (Job job: jobs) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (replacedBy!=null) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((JobEntity)job).setExecution((ExecutionEntity) replacedBy);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((JobEntity)job).delete();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; …&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;SPAN&gt;For our tests we changed the creation of the two dynamic queries to static queries (since the dynamic queries always evaluate to the same SELECT statement anyway). This change led to a performance increase of up to 100% in our tests.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;As an example the statement for selecting the jobs belonging to a process instance (from our changed &lt;/SPAN&gt;&lt;EM&gt;/org/activiti/db/mapping/entity/Job.xml&lt;/EM&gt;&lt;SPAN&gt;&lt;span class="lia-unicode-emoji" title=":disappointed_face:"&gt;😞&lt;/span&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;&amp;nbsp; &amp;lt;select id="selectJobsByExecutionId" parameterType="string" resultMap="jobResultMap"&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select *&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from ACT_RU_JOB J&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; where J.EXECUTION_ID_ = #{executionId}&lt;BR /&gt;&amp;nbsp; &amp;lt;/select&amp;gt;&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;SPAN&gt;Note also the following quote from &lt;/SPAN&gt;&lt;A href="http://forums.activiti.org/en/viewtopic.php?f=6&amp;amp;t=1523#p6386" rel="nofollow noopener noreferrer"&gt;http://forums.activiti.org/en/viewtopic.php?f=6&amp;amp;t=1523#p6386&lt;/A&gt;&lt;SPAN&gt; about the queries in &lt;/SPAN&gt;&lt;EM&gt;ExecutionEntity.remove()&lt;/EM&gt;&lt;SPAN&gt;:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Profiler shows that they consume at least 50-70% of overall time.&lt;/BLOCKQUOTE&gt;&lt;SPAN&gt;We created a Jira issue (&lt;/SPAN&gt;&lt;A href="https://jira.codehaus.org/browse/ACT-1056" rel="nofollow noopener noreferrer"&gt;ACT-1056&lt;/A&gt;&lt;SPAN&gt;) and can contribute a patch if needed.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Some more details concerning our tests:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The test scenario was a multi-threaded test client that started process instances and waited for their completion, measuring the throughput: how many processes completed in a given time (e.g. per minute).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The test process had the following features:&lt;/SPAN&gt;&lt;BR /&gt;&lt;UL&gt;&lt;LI&gt;main process:&lt;UL&gt;&lt;LI&gt;two ServiceTasks performing db updates (each with asynchronous continiuation)&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;two ServiceTasks sending jms notifications back to the test client&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;call of a sub process (with asynchronous continiuation)&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;sub process&lt;UL&gt;&lt;LI&gt;two ServiceTasks that call WebServices (SoapUI simulator was used for these WebServices)&lt;/LI&gt;&lt;BR /&gt;&lt;LI&gt;two exclusive gateways&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;SPAN&gt;Perhaps there are other (more elegant&amp;nbsp; &lt;img id="smileywink" class="emoticon emoticon-smileywink" src="https://connect.hyland.com/i/smilies/16x16_smiley-wink.png" alt="Smiley Wink" title="Smiley Wink" /&gt; ) alternatives that we may have overlooked.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 13 Jan 2012 17:15:41 GMT</pubDate>
    <dc:creator>waldorf</dc:creator>
    <dc:date>2012-01-13T17:15:41Z</dc:date>
    <item>
      <title>Performance issue due to dynamic query creation</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/performance-issue-due-to-dynamic-query-creation/m-p/83962#M56465</link>
      <description>Hi,we made some performance tests with Activiti on a hardware with 12 cores (tomcat server with Activiti + separate database server).During these tests we observed a contention in MyBatis' dynamic query creation mechanism which is called from ExecutionEntity.remove() for every finished process insta</description>
      <pubDate>Fri, 13 Jan 2012 17:15:41 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/performance-issue-due-to-dynamic-query-creation/m-p/83962#M56465</guid>
      <dc:creator>waldorf</dc:creator>
      <dc:date>2012-01-13T17:15:41Z</dc:date>
    </item>
    <item>
      <title>Re: Performance issue due to dynamic query creation</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/performance-issue-due-to-dynamic-query-creation/m-p/83963#M56466</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Interesting find. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm definitely interested in a patch attached to the jira.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 30 Jan 2012 14:40:50 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/performance-issue-due-to-dynamic-query-creation/m-p/83963#M56466</guid>
      <dc:creator>jbarrez</dc:creator>
      <dc:date>2012-01-30T14:40:50Z</dc:date>
    </item>
    <item>
      <title>Re: Performance issue due to dynamic query creation</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/performance-issue-due-to-dynamic-query-creation/m-p/83964#M56467</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;ok, I will upload a patch soon&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best regards,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Christian&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 31 Jan 2012 12:18:38 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/performance-issue-due-to-dynamic-query-creation/m-p/83964#M56467</guid>
      <dc:creator>waldorf</dc:creator>
      <dc:date>2012-01-31T12:18:38Z</dc:date>
    </item>
    <item>
      <title>Re: Performance issue due to dynamic query creation</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/performance-issue-due-to-dynamic-query-creation/m-p/83965#M56468</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I attached two patches to the JIRA issue. One for the current trunk, one for Activiti, version 5.8.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I am looking forward to the review.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best regards,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Christian&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 02 Feb 2012 13:51:30 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/performance-issue-due-to-dynamic-query-creation/m-p/83965#M56468</guid>
      <dc:creator>waldorf</dc:creator>
      <dc:date>2012-02-02T13:51:30Z</dc:date>
    </item>
    <item>
      <title>Re: Performance issue due to dynamic query creation</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/performance-issue-due-to-dynamic-query-creation/m-p/83966#M56469</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thanks, I'll review them shortly and comment on the issue. Thanks!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 03 Feb 2012 08:45:27 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/performance-issue-due-to-dynamic-query-creation/m-p/83966#M56469</guid>
      <dc:creator>jbarrez</dc:creator>
      <dc:date>2012-02-03T08:45:27Z</dc:date>
    </item>
    <item>
      <title>Re: Performance issue due to dynamic query creation</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/performance-issue-due-to-dynamic-query-creation/m-p/83967#M56470</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi Jerome,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;any news on this? Did you review the patch?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks in advance,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Christian&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 06 Mar 2012 13:09:02 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/performance-issue-due-to-dynamic-query-creation/m-p/83967#M56470</guid>
      <dc:creator>waldorf</dc:creator>
      <dc:date>2012-03-06T13:09:02Z</dc:date>
    </item>
  </channel>
</rss>

