Openbravo Issue Tracking System - Openbravo ERP | ||||||||||||||||||||||||||||||||||||||||
View Issue Details | ||||||||||||||||||||||||||||||||||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | |||||||||||||||||||||||||||||||||||
0020515 | Openbravo ERP | A. Platform | public | 2012-05-15 17:18 | 2017-03-15 20:19 | |||||||||||||||||||||||||||||||||||
Reporter | alostale | |||||||||||||||||||||||||||||||||||||||
Assigned To | alostale | |||||||||||||||||||||||||||||||||||||||
Priority | normal | Severity | major | Reproducibility | have not tried | |||||||||||||||||||||||||||||||||||
Status | closed | Resolution | fixed | |||||||||||||||||||||||||||||||||||||
Platform | OS | 5 | OS Version | |||||||||||||||||||||||||||||||||||||
Product Version | ||||||||||||||||||||||||||||||||||||||||
Target Version | Fixed in Version | 3.0PR17Q2 | ||||||||||||||||||||||||||||||||||||||
Merge Request Status | ||||||||||||||||||||||||||||||||||||||||
Review Assigned To | caristu | |||||||||||||||||||||||||||||||||||||||
OBNetwork customer | ||||||||||||||||||||||||||||||||||||||||
Web browser | ||||||||||||||||||||||||||||||||||||||||
Modules | Core | |||||||||||||||||||||||||||||||||||||||
Support ticket | ||||||||||||||||||||||||||||||||||||||||
Regression level | ||||||||||||||||||||||||||||||||||||||||
Regression date | ||||||||||||||||||||||||||||||||||||||||
Regression introduced in release | ||||||||||||||||||||||||||||||||||||||||
Regression introduced by commit | ||||||||||||||||||||||||||||||||||||||||
Triggers an Emergency Pack | No | |||||||||||||||||||||||||||||||||||||||
Summary | 0020515: OBCriteria creates contention at JVM | |||||||||||||||||||||||||||||||||||||||
Description | OBCriteria is still adding more overhead than OBQuery, after fix 0020485 it is slower. Note this measurement is just for overhead and not for query itself. Profiling attached test cases, it can be seen most of the time is spent in class loading triggered by Hibernate criteria (cpu-time.png). An additional problem is this classloading is synchronized by class name (lock-monitor.png), this in practice means, concurrent threads needs to wait these locks to be released in order to execute the criteria. The problem is the className SessionFactoryImpl.getImplementors receives [1] is not actually a classname but entity name, so ReflectHelper.classForName finally performs a locking Class.forName [2] [1] https://github.com/alostale/hibernate-orm/blob/3.6.3-patched/hibernate-core/src/main/java/org/hibernate/impl/SessionFactoryImpl.java#L827 [^] [2] https://github.com/alostale/hibernate-orm/blob/3.6.3-patched/hibernate-core/src/main/java/org/hibernate/util/ReflectHelper.java#L192 [^] | |||||||||||||||||||||||||||||||||||||||
Steps To Reproduce | Execute attached test cases which executes 50000 times a very simple sql comparing times between OBCriteria and OBQuery. These 50000 executions are done splitting them from 1 to 8 threads. The results in a laptop with 8 cores are: Criteria with 1 threads done in 14985 ms Criteria with 2 threads done in 13768 ms Criteria with 3 threads done in 14811 ms Criteria with 4 threads done in 14988 ms Criteria with 5 threads done in 15200 ms Criteria with 6 threads done in 15388 ms Criteria with 7 threads done in 15311 ms Criteria with 8 threads done in 15401 ms Query with 1 threads done in 3728 ms Query with 2 threads done in 1743 ms Query with 3 threads done in 1287 ms Query with 4 threads done in 1187 ms Query with 5 threads done in 1121 ms Query with 6 threads done in 1067 ms Query with 7 threads done in 1000 ms Query with 8 threads done in 955 ms Here we can see OBCriteria overhead is 5 times OBQuery's. But not only that, but parallel executions do not improve throughput in criteria's case. | |||||||||||||||||||||||||||||||||||||||
Proposed Solution | When creating the criteria, use the actual class name implementing the entity rather than entity's name so the class lookup can be done faster. Doing it the overhead is partially reduced, but the locking is much better. These are the results of the same executions done before, where can be seen it scales much better with multiple threads than before. Criteria with 1 threads done in 10717 ms Criteria with 2 threads done in 4915 ms Criteria with 3 threads done in 3317 ms Criteria with 4 threads done in 2796 ms Criteria with 5 threads done in 2563 ms Criteria with 6 threads done in 2486 ms Criteria with 7 threads done in 2265 ms Criteria with 8 threads done in 2176 ms | |||||||||||||||||||||||||||||||||||||||
Additional Information | ||||||||||||||||||||||||||||||||||||||||
Tags | Performance | |||||||||||||||||||||||||||||||||||||||
Relationships |
| |||||||||||||||||||||||||||||||||||||||
Attached Files | CriteriaVsQuery.java (3,459) 2017-02-15 12:38 https://issues.openbravo.com/file_download.php?file_id=10448&type=bug cpu-time.png (34,108) 2017-02-15 12:59 https://issues.openbravo.com/file_download.php?file_id=10449&type=bug lock-monitor.png (32,517) 2017-02-15 13:00 https://issues.openbravo.com/file_download.php?file_id=10450&type=bug | |||||||||||||||||||||||||||||||||||||||
Issue History | ||||||||||||||||||||||||||||||||||||||||
Date Modified | Username | Field | Change | |||||||||||||||||||||||||||||||||||||
2012-05-15 17:18 | alostale | New Issue | ||||||||||||||||||||||||||||||||||||||
2012-05-15 17:18 | alostale | Assigned To | => alostale | |||||||||||||||||||||||||||||||||||||
2012-05-15 17:18 | alostale | Modules | => Core | |||||||||||||||||||||||||||||||||||||
2012-05-15 17:18 | alostale | Relationship added | related to 0020485 | |||||||||||||||||||||||||||||||||||||
2012-05-17 12:08 | mtaal | Note Added: 0048728 | ||||||||||||||||||||||||||||||||||||||
2012-06-01 07:55 | alostale | Tag Attached: Performance | ||||||||||||||||||||||||||||||||||||||
2012-06-01 07:55 | alostale | Relationship added | duplicate of 0020611 | |||||||||||||||||||||||||||||||||||||
2012-06-01 08:00 | alostale | Relationship replaced | related to 0020611 | |||||||||||||||||||||||||||||||||||||
2012-06-05 15:36 | hgbot | Checkin | ||||||||||||||||||||||||||||||||||||||
2012-06-05 15:36 | hgbot | Note Added: 0049621 | ||||||||||||||||||||||||||||||||||||||
2012-06-05 15:36 | hgbot | Checkin | ||||||||||||||||||||||||||||||||||||||
2012-06-05 15:36 | hgbot | Note Added: 0049623 | ||||||||||||||||||||||||||||||||||||||
2012-06-05 15:36 | hgbot | Checkin | ||||||||||||||||||||||||||||||||||||||
2012-06-05 15:36 | hgbot | Note Added: 0049624 | ||||||||||||||||||||||||||||||||||||||
2012-09-24 12:53 | AugustoMauch | Note Added: 0052334 | ||||||||||||||||||||||||||||||||||||||
2012-09-24 12:53 | AugustoMauch | Status | new => scheduled | |||||||||||||||||||||||||||||||||||||
2013-01-07 06:47 | eintelau | Issue Monitored: eintelau | ||||||||||||||||||||||||||||||||||||||
2017-02-15 12:38 | alostale | File Added: CriteriaVsQuery.java | ||||||||||||||||||||||||||||||||||||||
2017-02-15 12:42 | alostale | Triggers an Emergency Pack | => No | |||||||||||||||||||||||||||||||||||||
2017-02-15 12:42 | alostale | Description Updated | bug_revision_view_page.php?rev_id=14596#r14596 | |||||||||||||||||||||||||||||||||||||
2017-02-15 12:42 | alostale | Steps to Reproduce Updated | bug_revision_view_page.php?rev_id=14598#r14598 | |||||||||||||||||||||||||||||||||||||
2017-02-15 12:59 | alostale | File Added: cpu-time.png | ||||||||||||||||||||||||||||||||||||||
2017-02-15 13:00 | alostale | File Added: lock-monitor.png | ||||||||||||||||||||||||||||||||||||||
2017-02-15 13:03 | alostale | Description Updated | bug_revision_view_page.php?rev_id=14599#r14599 | |||||||||||||||||||||||||||||||||||||
2017-02-15 13:13 | alostale | Description Updated | bug_revision_view_page.php?rev_id=14600#r14600 | |||||||||||||||||||||||||||||||||||||
2017-02-15 13:17 | alostale | Proposed Solution updated | ||||||||||||||||||||||||||||||||||||||
2017-02-15 14:01 | alostale | Relationship added | related to 0035271 | |||||||||||||||||||||||||||||||||||||
2017-02-16 09:53 | alostale | Relationship added | related to 0020666 | |||||||||||||||||||||||||||||||||||||
2017-02-16 09:54 | alostale | Summary | Slow OBCriteria => OBCriteria creates contention at JVM | |||||||||||||||||||||||||||||||||||||
2017-02-16 10:25 | hgbot | Checkin | ||||||||||||||||||||||||||||||||||||||
2017-02-16 10:25 | hgbot | Note Added: 0094382 | ||||||||||||||||||||||||||||||||||||||
2017-02-16 10:25 | hgbot | Status | scheduled => resolved | |||||||||||||||||||||||||||||||||||||
2017-02-16 10:25 | hgbot | Resolution | open => fixed | |||||||||||||||||||||||||||||||||||||
2017-02-16 10:25 | hgbot | Fixed in SCM revision | => http://code.openbravo.com/erp/devel/pi/rev/0e3c102ec91e2102fbdacc049b48986a400809b7 [^] | |||||||||||||||||||||||||||||||||||||
2017-02-16 10:26 | alostale | Review Assigned To | => caristu | |||||||||||||||||||||||||||||||||||||
2017-02-20 09:10 | caristu | Note Added: 0094452 | ||||||||||||||||||||||||||||||||||||||
2017-02-20 09:10 | caristu | Status | resolved => closed | |||||||||||||||||||||||||||||||||||||
2017-02-20 09:10 | caristu | Fixed in Version | => 3.0PR17Q2 | |||||||||||||||||||||||||||||||||||||
2017-02-22 14:15 | hgbot | Checkin | ||||||||||||||||||||||||||||||||||||||
2017-02-22 14:15 | hgbot | Note Added: 0094534 | ||||||||||||||||||||||||||||||||||||||
2017-03-15 20:19 | hudsonbot | Checkin | ||||||||||||||||||||||||||||||||||||||
2017-03-15 20:19 | hudsonbot | Note Added: 0095189 | ||||||||||||||||||||||||||||||||||||||
2017-03-15 20:19 | hudsonbot | Checkin | ||||||||||||||||||||||||||||||||||||||
2017-03-15 20:19 | hudsonbot | Note Added: 0095203 | ||||||||||||||||||||||||||||||||||||||
2017-10-06 10:42 | alostale | Relationship added | related to 0037015 |
Notes | |||||
|
|||||
|
|
||||
|
|||||
|
|
||||
|
|||||
|
|
||||
|
|||||
|
|
||||
|
|||||
|
|
||||
|
|||||
|
|
||||
|
|||||
|
|
||||
|
|||||
|
|
||||
|
|||||
|
|
||||
|
|||||
|
|