Hi Michael,
The performance boost is associated with using the jpox property
org.jpox.identifier.defaultSchemaName to specify the schema in which the
tables are installed. There is a performance boost whether the tables
are installed in a named schema or the default schema when this property
is set. I see an improvement of about 5.8x.
I've attached two patches to demonstrate the changes, in case you're
interested. performancediff.patch reverses the preformance boost when
applied to the latest checkout from svn by installing into the default
schema and not setting the defaultSchemaName option.
performancediff3.patch recovers the performance boost by simply setting
defaultSchemaName to tckuser, the user name and default schema name.
(Revert maven.xml first if you apply them in sequence.)
-- Michelle
Michael Watzek wrote:
Hi Michelle,
Afterwards I ran "maven runtck.jdori". This runs 2 configurations -
one for the completeness and one for all test cases. As a result, 4
log files are written to target/logs - 2 for application identity, 2
for datastore identity. The all test TCK runs produced the expected
amount of errors/failures - though, they did not take as much time
as expected. Both runs perform about 7-8 times faster on my system -
that's great :-)! What have you changed?
Wow, that IS great! It seemed a lot faster on my system too, but I
wasn't paying much attention to performance. I have no idea what the
difference is :-\ I will try to investigate before I check in.
I'm also curious about the performance boost, so I spent some time in
investigating - without success:
I only get the performance boost with your patch. A clean workspace
without your patch performs 7-8 times slower. I applied two changes of
your patch to a clean workspace just to see if this makes a difference:
jdori.properties:
-org.jpox.validateTables=false # default = true
+org.jpox.validateTables=false
logging.properties:
-log4j.category.JPOX.General=INFO, A1
+log4j.category.JPOX.General=DEBUG, A1
Both changes do not give better performance. So, I ran out of ideas.
Hopefully, you have more luck in investigation.
- Can we include the configuration name and the identity type in the
log file name? Currently, it's hard to find the right file if you
are interested in only one file.
This is a good idea. I definitely would like to get more information
into the log file or file name. Can you tell me where the log file
name is created?
Class "BatchTestRunner" has a static inner class "ConsoleFileOutput"
defining a static String "fileNamePrefix":
private static String fileNamePrefix = "TCKLog-";
I suggest to append the value of a system property which contains the
configuration name and the identity type.
Regards,
Michael
Index: test/sql/derby/datastoreidentity/schema.sql
===================================================================
--- test/sql/derby/datastoreidentity/schema.sql (revision 198769)
+++ test/sql/derby/datastoreidentity/schema.sql (working copy)
@@ -2,8 +2,8 @@
connect 'jdbc:derby:jdotckdb;create=true' user 'tckuser' password 'tckuser';
-CREATE SCHEMA datastoreidentity0;
-SET SCHEMA datastoreidentity0;
+--CREATE SCHEMA datastoreidentity0;
+--SET SCHEMA datastoreidentity0;
-------------------------
-- mylib
Index: test/sql/derby/applicationidentity/schema.sql
===================================================================
--- test/sql/derby/applicationidentity/schema.sql (revision 198769)
+++ test/sql/derby/applicationidentity/schema.sql (working copy)
@@ -2,8 +2,8 @@
connect 'jdbc:derby:jdotckdb;create=true' user 'tckuser' password 'tckuser';
-CREATE SCHEMA applicationidentity0;
-SET SCHEMA applicationidentity0;
+--CREATE SCHEMA applicationidentity0;
+--SET SCHEMA applicationidentity0;
-------------------------
-- mylib
Index: maven.xml
===================================================================
--- maven.xml (revision 198769)
+++ maven.xml (working copy)
@@ -269,8 +269,10 @@
value="${jdo.tck.excludelist}"/>
<sysproperty key="javax.jdo.option.Mapping"
value="${jdo.tck.Mapping}"/>
+<!--
<sysproperty key="org.jpox.identifier.defaultSchemaName"
value="${schemaname}"/>
+-->
<jvmarg line="${database.runtck.sysproperties}"/>
<jvmarg line="${jdo.runtck.sysproperties}"/>
<arg line="${jdo.tck.classes}"/>
Index: test/sql/derby/datastoreidentity/schema.sql
===================================================================
--- test/sql/derby/datastoreidentity/schema.sql (revision 198769)
+++ test/sql/derby/datastoreidentity/schema.sql (working copy)
@@ -2,8 +2,8 @@
connect 'jdbc:derby:jdotckdb;create=true' user 'tckuser' password 'tckuser';
-CREATE SCHEMA datastoreidentity0;
-SET SCHEMA datastoreidentity0;
+--CREATE SCHEMA datastoreidentity0;
+--SET SCHEMA datastoreidentity0;
-------------------------
-- mylib
Index: test/sql/derby/applicationidentity/schema.sql
===================================================================
--- test/sql/derby/applicationidentity/schema.sql (revision 198769)
+++ test/sql/derby/applicationidentity/schema.sql (working copy)
@@ -2,8 +2,8 @@
connect 'jdbc:derby:jdotckdb;create=true' user 'tckuser' password 'tckuser';
-CREATE SCHEMA applicationidentity0;
-SET SCHEMA applicationidentity0;
+--CREATE SCHEMA applicationidentity0;
+--SET SCHEMA applicationidentity0;
-------------------------
-- mylib
Index: maven.xml
===================================================================
--- maven.xml (revision 198769)
+++ maven.xml (working copy)
@@ -192,6 +192,8 @@
<j:expr value="${schemaname.concat(id)}"/>
<j:expr value="${schemaname.concat(mapping)}"/>
</j:set>
+ <j:set var="schemaname" value="tckuser"/>
+ <echo> Schemaname is ${schemaname} </echo>
<attainGoal name="doRuntck.jdori"/>
</j:forEach>
</j:forEach>