summaryrefslogtreecommitdiffstats
path: root/src/site/performance.mkd
blob: 3ef2451def6d2a29b3ba1cc605a663d467c4f2db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
## Performance

The information provided here may be based on flawed test procedures.  You have to be the judge of what is performant and non-performant.

### iciql statement generation

Performance of iciql statement generation is not currently benchmarked.

### iciql+database performance comparison

The following data was generated by running the *single-threaded* iciql test suite.  All database connections are pooled and re-used within each execution of the test suite using [Apache Commons DBCP](http://commons.apache.org/dbcp).

Connections are pooled to normalize embedded database performance with out-of-process database performance.  Some of the Java embedded database configurations have a very high startup-time penalty.  Notably, H2 is slow to open a database and its performance is substantially affected if connection pooling is not enabled to keep the embedded database open.

SQLite uses the default [DELETE journaling mode](https://www.sqlite.org/lockingv3.html#rollback). About a 4x performance improvement can be achieved when using the [WAL journaling mode](https://www.sqlite.org/wal.html) (`PRAGMA journal_mode = WAL`).

External process databases (MySQL & PostgreSQL) use the default settings as provided by the platform.

All tables are created as CACHED when the database distinguishes between CACHED and MEMORY tables.
  
All performance numbers include the combined overhead of iciql statement generation and JUnit 4 test framework execution so they are not bare-metal database metrics.

All bulk operations (insertAll, updateAll, deleteAll, etc) automatically create savepoints, if supported by the JDBC connector, to help ensure atomicity of the operation.

<pre>
%DBPERFORMANCE%
</pre>