Hello Ilan.
You can consider to switch on statement pooling. Just add to property
"openjpa.ConnectionProperties" "poolPreparedStatements=true".
Best regards
Georgi
Ilan Kirsh wrote:
Hi Pinaki,
Thank you for the reference.
Could you please verify the following persistence.xml file (which seems to
run fine) before I run the entire benchmark again?
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0">
<persistence-unit name="OpenJPA2-MySQL-server">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<class>org.jpab.basic.Person</class>
<class>org.jpab.col.CollectionPerson</class>
<class>org.jpab.ext.PersonBase</class>
<class>org.jpab.ext.PersonExt</class>
<class>org.jpab.ext.PersonExtExt</class>
<class>org.jpab.index.IndexedPerson</class>
<class>org.jpab.node.Node</class>
<properties>
<property name="openjpa.ConnectionProperties"
value="DriverClassName=com.mysql.jdbc.Driver,
Url=jdbc:mysql://localhost:3306/jpab4897789836, MaxActive=100,
MaxWait=10000, TestOnBorrow=true, Username=admin, Password=admin"/>
<property name="openjpa.ConnectionDriverName"
value="org.apache.commons.dbcp.BasicDataSource"/>
<property name="openjpa.jdbc.DBDictionary" value="batchLimit=100"/>
<property name="openjpa.DataCache" value="true"/>
<property name="openjpa.Log" value="DefaultLevel=ERROR"/>
<property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema"/>
</properties>
</persistence-unit>
</persistence>
Regarding your previous post:
Pinaki Poddar wrote:
"A huge performance gap has been detected when using simple basic entities
with small transaction/retrieval size. Comparing the normalized speed of
OpenJPA with MySQL database server (0.15) to the normalized speed of
Hibernate with MySQL database server (8.5) reveals that in that case,
Hibernate with MySQL server is 56.7 times faster than OpenJPA with MySQL
server. "
All the OpenJPA users out there must be real dumb and must immediately
switch to something that is 56.7 times faster. Or not. When a benchmark
developer reports such drastic results -- they would be better off to
double-check their observations -- given that both the vendors had been in
operation for quite a while and users are *not* dumb. Actually such
drastic observations degrade one's confidence in these reported numbers
despite of them being presented with panache.
Please notice that 56.7 refers to an extreme edge case that has been
detected automatically (this is a machine generated analysis) and not to the
average performance gap.
But if you look now at the new results:
http://temp.jpab.org/OpenJPA_R2/MySQL/server/Hibernate/MySQL/server.html
you can see that the maximum gap is now only 6 (the 56.7 has gone).
Since I spent a lot of time in the last years on performance and
optimizations, I know that a factor of 56 is not unusual. Look for example
at:
http://temp.jpab.org/OpenJPA/PostgreSQL/server/OpenJPA_R2/PostgreSQL/server.html#All
You can see a performance gap of x200 - when comparing OpenJPA with
PostreSQL to itself. One run with the OpenJPA 2.0 and out of the box
configuration and the other run with OpenJPA 2.1 and some tuning.
Jerry's observation should be taken in this context:
No1UNo wrote:
This test suite was clearly designed around the strengths of ObjectDB.
The factor of six between the 'ObjectDB server' and 'Hibernate with
PostgreSQL server' performance is just not credible otherwise.
Since ObjectDB requires much less processing (no JPA-JDBC-SQL-Database
layers and most of the time complete objects are processed as atomic byte[]
elements, rather than as collections of fields) - a factor of 6 looks very
reasonable. You can see that even the same product might produce a much
larger factor of 200.
Best regards,
Ilan