Defining a Java Virtual Machine (JVM) heap size that can contain the entire contents of the database cache in memory minimizes read operations from disk and achieves optimal performance. The database on-disk is comprised of transaction log files, which are only appended to. After an initial database import, the size on-disk will grow by a factor of at least 25% as inactive records accumulate in the transaction logs. During normal operation, the on-disk size of the database transaction logs does not represent the memory needed to cache the database.

Consider minimizing the size of the database based on the known characteristics of your data. Doing so reduces hard disk requirements and the memory requirements for the database cache. An example of this is the PingDirectory server automatically compacting common parent distinguished names (DN).

Finally, consider the write load on your server and its effect on the database. Write operations will always require an associated write-to-disk, but an environment that sustains a high load of write operations might consider tuning the background database cleaner to minimize the size of the database on disk.

If your backend DB environment is sensitive to write operations that take more than 500 milliseconds, you can reduce response time outliers by changing the fsync timeout value to 20 milliseconds. To do this, run the following command with the appropriate value for <backend-name>:

$ bin/dsconfig set-backend-prop \
--backend-name <backend-name> \
--add "je-property:je.log.fsyncTimeout=20 ms"

This change reduces the time that a thread will wait in an attempt to coalesce multiple concurrent requests to perform an fsync, which synchronizes the file system after a write or a transaction. When the timeout value is reached, these attempts expire.

This configuration change is set by default in PingDirectory 10.1 and later.