Uploaded image for project: 'camunda BPM'
  1. camunda BPM
  2. CAM-8327

Switch on MyBatis batch processing mode

    • Icon: Task Task
    • Resolution: Fixed
    • Icon: L3 - Default L3 - Default
    • 7.8.0, 7.8.0-alpha6
    • None
    • engine
    • None

      MyBatis has the special mode of pprocessing SQL statements in batches.

      The task is:

      • to switch it on
      • to measure performance improvement

        This is the controller panel for Smart Panels app

            [CAM-8327] Switch on MyBatis batch processing mode

            Svetlana Dorokhova created issue -
            Svetlana Dorokhova made changes -
            Status Original: Open [ 1 ] New: In Progress [ 3 ]
            Svetlana Dorokhova made changes -
            Fix Version/s New: 7.8.0 [ 14894 ]
            Svetlana Dorokhova made changes -
            Summary Original: Switch on MyBatis "reuse prepared statements" mode New: Switch on MyBatis batch processing mode
            Svetlana Dorokhova made changes -
            Description Original: MyBatis has the special mode of reusing prepared statements when executing queries.

            The task is:
            * to switch it on
            * to measure performance improvement
            New: MyBatis has the special mode of pprocessing SQL statements in batches.

            The task is:
            * to switch it on
            * to measure performance improvement

            Svetlana Dorokhova added a comment - - edited

            Performance test consisted of the following:

            1. FULL history level
            2. Process looks like this:

            BpmnModelInstance process = Bpmn.createExecutableProcess("process")
                  .startEvent()
                  .serviceTask()
                  .camundaClass(NoopDelegate.class.getName())
                  .camundaAsyncAfter()
                  .serviceTask()
                  .camundaClass(UpdateVarDelegate.class.getName())
                  .camundaAsyncAfter()
                  .serviceTask()
                  .camundaClass(DeleteVarDelegate.class.getName())
                  .endEvent()
                  .done();
            

            3. Process is started with 500 process variables. 1st Service task does nothing, but the transaction is committed after it is completed (asyncAfter). 2nd service task update all 500 process variables with new values and the transaction is committed afterwards. 3rd service task removes all the variables and process finishes.

            The testing was done with the help of QA Performance test suite. It was running the test in 2 threads with 50 repeations. The result are the following:

            - Oracle 12 Mysql 5.7.17 SQL Server 2014
            SIMPLE mode 196696 135528 264003
            BATCH mode 58012 128714 94147

            It looks like MySQL does not distinguish batch and not batch operations, but SQL Server and Oracle do.

            Svetlana Dorokhova added a comment - - edited Performance test consisted of the following: 1. FULL history level 2. Process looks like this: BpmnModelInstance process = Bpmn.createExecutableProcess( "process" ) .startEvent() .serviceTask() .camundaClass(NoopDelegate. class. getName()) .camundaAsyncAfter() .serviceTask() .camundaClass(UpdateVarDelegate. class. getName()) .camundaAsyncAfter() .serviceTask() .camundaClass(DeleteVarDelegate. class. getName()) .endEvent() .done(); 3. Process is started with 500 process variables. 1st Service task does nothing, but the transaction is committed after it is completed (asyncAfter). 2nd service task update all 500 process variables with new values and the transaction is committed afterwards. 3rd service task removes all the variables and process finishes. The testing was done with the help of QA Performance test suite. It was running the test in 2 threads with 50 repeations. The result are the following: - Oracle 12 Mysql 5.7.17 SQL Server 2014 SIMPLE mode 196696 135528 264003 BATCH mode 58012 128714 94147 It looks like MySQL does not distinguish batch and not batch operations, but SQL Server and Oracle do.
            Svetlana Dorokhova made changes -
            Assignee Original: Svetlana Dorokhova [ svetlana.dorokhova ] New: Roman Smirnov [ roman.smirnov ]
            Resolution New: Fixed [ 1 ]
            Status Original: In Progress [ 3 ] New: Resolved [ 5 ]
            Remaining Estimate New: 0 minutes [ 0 ]
            Original Estimate New: 0 minutes [ 0 ]
            Svetlana Dorokhova made changes -
            Assignee Original: Roman Smirnov [ roman.smirnov ] New: Svetlana Dorokhova [ svetlana.dorokhova ]
            Resolution Original: Fixed [ 1 ]
            Status Original: Resolved [ 5 ] New: Reopened [ 4 ]

            Svetlana Dorokhova added a comment - - edited

            Won't work for Oracle < 12.

            http://docs.oracle.com/cd/E11882_01/java.112/e16548/oraperf.htm#JJDBC28754

            For a prepared statement batch, it is not possible to know the number of rows affected in the database by each individual statement in the batch. Therefore, all array elements have a value of -2. According to the JDBC 2.0 specification, a value of -2 indicates that the operation was successful but the number of rows affected is unknown.

            https://docs.oracle.com/database/121/JJDBC/oraperf.htm#JJDBC28773

            For a prepared statement batch, the array contains the actual update counts indicating the number of rows affected by each operation.

            This means that we won't be able to use optimistic locking with Batch processing switched on on Oracle earlier than v. 12.

            Svetlana Dorokhova added a comment - - edited Won't work for Oracle < 12. http://docs.oracle.com/cd/E11882_01/java.112/e16548/oraperf.htm#JJDBC28754 For a prepared statement batch, it is not possible to know the number of rows affected in the database by each individual statement in the batch. Therefore, all array elements have a value of -2. According to the JDBC 2.0 specification, a value of -2 indicates that the operation was successful but the number of rows affected is unknown. https://docs.oracle.com/database/121/JJDBC/oraperf.htm#JJDBC28773 For a prepared statement batch, the array contains the actual update counts indicating the number of rows affected by each operation. This means that we won't be able to use optimistic locking with Batch processing switched on on Oracle earlier than v. 12.
            Svetlana Dorokhova made changes -
            Link New: This issue is related to CAM-8351 [ CAM-8351 ]

              yana.vasileva Yana Vasileva
              svetlana.dorokhova Svetlana Dorokhova
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved: