Re: performance issues

Sasa Bojanic <[email protected]> Wed, 20 Dec 2006 09:27:10 +0100
Newsgroups gmane.comp.java.enhydra.shark
Message-ID <[email protected]>
This is a multi-part message in MIME format...

------------=_1166603071-5041-17
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Hi,

I made some tests on Shark2.0-beta7 using MySQL database.

Here is the code snippet:

         long t1, t2, t3;
         t1 = System.currentTimeMillis();

         ut.begin();
         WfAssignment[] ass = 
sc.getResourceObject().get_sequence_work_item(0);
         ut.commit();

         t2 = System.currentTimeMillis();

         for (int i = 0; i < ass.length; i++) {
            long ti = System.currentTimeMillis();
            ut.begin();
            WfAssignment as = ass[i];
            WfActivity act = as.activity();
            act.key();
            act.name();
            WfProcess proc = act.container();
            proc.name();
            
am.getProcessDefinitionInfoByUniqueProcessDefinitionName(sc.getSessionHandle(),
                                                                     
proc.manager()
                                                                        
.name());
            am.getProcessCreatedTime(sc.getSessionHandle(), proc.key());
            am.getActivityCreatedTime(sc.getSessionHandle(), proc.key(), 
act.key());
            DeadlineInfo[] difo = 
am.getDeadlineInfoForActivity(sc.getSessionHandle(),
                                                                proc.key(),
                                                                act.key());
            ut.commit();
            long te = System.currentTimeMillis();

            System.out.println("Assignment no. "
                               + (i + 1) + ": act=" + act.key() + ", 
exec lasted "
                               + (te - ti) + " ms");

         }
         t3 = System.currentTimeMillis();

         System.out.println("Overal exec lasted "
                            + (t3 - t1) + " ms, midTime=" + (t2 - t1) + 
" ms, avgTime="
                            + (t3 - t2) / ass.length + " ms");


And here is the output:

Assignment no. 1: 
act=269_24_deadline_examples_do_something_do_something2, exec lasted 31 ms
Assignment no. 2: 
act=21_16_workflow_patterns_WfSP2_Implicit_Termination_A, exec lasted 16 ms
Assignment no. 3: act=261_8_workflow_patterns_WfBCP4_Exclusive_Choice_B, 
exec lasted 31 ms
Assignment no. 4: act=8_7_workflow_patterns_WfBCP3_Synchronization_A, 
exec lasted 31 ms
Assignment no. 5: 
act=22_17_workflow_patterns_WfPIMI1_MI_without_synchronization_A, exec 
lasted 16 ms
Assignment no. 6: 
act=263_21_deadline_examples_several_async_and_one_sync_deadline_see_log, 
exec lasted 31 ms
Assignment no. 7: act=271_2_test_js_manufacturing_produce_part2, exec 
lasted 32 ms
Assignment no. 8: act=1_1_test_js_basic_A1, exec lasted 31 ms
Assignment no. 9: act=16_13_workflow_patterns_WfABSP4_Discriminator_A, 
exec lasted 15 ms
Assignment no. 10: 
act=25_20_deadline_examples_simple_async_and_sync_deadline_do_something, 
exec lasted 47 ms
Assignment no. 11: act=31_25_test_js_mail_handling_enter_parameters, 
exec lasted 32 ms
Assignment no. 12: act=20_15_workflow_patterns_WfSP1_Arbitrary_Cycles_A, 
exec lasted 15 ms
Assignment no. 13: 
act=11_10_workflow_patterns_WfABSP1_Multiple_Choice_A, exec lasted 16 ms
Assignment no. 14: act=6_5_workflow_patterns_WfBCP1_Sequence_A, exec 
lasted 31 ms
Assignment no. 15: 
act=28_22_deadline_examples_block_sync_deadline_do_something1, exec 
lasted 16 ms
Assignment no. 16: act=270_2_test_js_manufacturing_produce_part1, exec 
lasted 15 ms
Assignment no. 17: act=7_6_workflow_patterns_WfBCP2_Parallel_Split_A, 
exec lasted 47 ms
Assignment no. 18: act=5_4_test_js_publish_doc_submit_document, exec 
lasted 16 ms
Assignment no. 19: act=3_3_test_js_specrelease_specification, exec 
lasted 47 ms
Assignment no. 20: 
act=12_11_workflow_patterns_WfABSP2_Synchronizing_Merge_A, exec lasted 15 ms
Assignment no. 21: 
act=23_18_workflow_patterns_WfPIMI2_MI_with_a_priori_known_design_time_knowledge_A, 
exec lasted 16 ms
Assignment no. 22: 
act=19_14_workflow_patterns_WfABSP5_N_out_of_M_Join_A, exec lasted 31 ms
Assignment no. 23: act=10_9_workflow_patterns_WfBCP5_Simple_Merge_A, 
exec lasted 16 ms
Assignment no. 24: act=13_12_workflow_patterns_WfABSP3_Multiple_Merge_A, 
exec lasted 31 ms
Assignment no. 25: 
act=24_19_deadline_examples_simple_sync_deadline_do_something, exec 
lasted 31 ms
Overal exec lasted 703 ms, midTime=47 ms, avgTime=26 ms


As you can see, the average time for getting requested information is 
26ms per assignment which I think is good enough.

I assume you are using Shark1.1 version? If so, it can greatly improve 
performance if you turn-off Security API  (by commenting appropriate 
line in Shark.conf).
The greatest improvement would be if you would do your queries using 
single SharkTransaction (in your example there are more than 10 
transactions implicitly created). In Shark1.1 it would be something like:

SharkTransaction st=null;
try {
  st=Shark.getInstance().createTransaction();
  WfActivity activity = assignment.activity(st);
  activity.key(st);
  activity.name(st);
  WfProcess process = activity.container(st);
  process.name(st);
  adminMisc.getProcessMgrPkgId(st,process.manager(st).name(st));
  adminMisc.getProcessCreatedTime(st,process.key(st));
  adminMisc.getActivityCreatedTime(st,process.key(st),activity.key(st));
  DeadlineInfo[] deadlineInfos = deadlineAdministration.getDeadlineInfo(st,process.key(st), activity.key(st));

} catch (Exception ex) {
  Shark.getInstance().emptyCaches();
} finally {
  try {
    st.release();
  } catch (Exception ex) {}
    try {
      Shark.getInstance().unlockProcesses(st);
    } catch (Exception ex) {}
}

Greetings,
Sasa.

[email protected] wrote:
> I am facing the problem of very slow response from shark when getting information about process and activities.
>
> my code is:
>
> WfAssignment assignment=connection.getResourceObject().get_sequence_work_item(0);
>
> WfActivity activity = assignment.activity();
> activity.key());
> activity.name());
> WfProcess process = activity.container();
> process.name());
> adminMisc.getProcessMgrPkgId(process.manager().name()));
> adminMisc.getProcessCreatedTime(process.key())));
> adminMisc.getActivityCreatedTime(process.key(),activity.key())));
> DeadlineInfo[] deadlineInfos = deadlineAdministration.getDeadlineInfo(process.key(), activity.key());
>
>
> this part of code takes about 545 Milli seconds each time i call that code.
> in fact i need to call that code for each activity assigned to a user, so for example if the user have 20 activities approximately the time taken in getting those information is about 10 seconds for each user which is not acceptable at all so am asking if their is a way to enhance the performance of that code or any sort of shark configuration available to enhance the shark performance.
>
> regards Ramy
>
>   
> ------------------------------------------------------------------------
>
>
> --
> You receive this message as a subscriber of the [email protected] mailing list.
> To unsubscribe: mailto:[email protected]
> For general help: mailto:[email protected]?subject=help
> ObjectWeb mailing lists service home page: http://www.objectweb.org/wws
>   



------------=_1166603071-5041-17
Content-Type: text/plain; name="message-footer.txt"
Content-Disposition: inline; filename="message-footer.txt"
Content-Transfer-Encoding: 8bit


--
You receive this message as a subscriber of the [email protected] mailing list.
To unsubscribe: mailto:[email protected]
For general help: mailto:[email protected]?subject=help
ObjectWeb mailing lists service home page: http://www.objectweb.org/wws

------------=_1166603071-5041-17--