we have a system where we serve from a host process around 200 clients connected via webSockets (Jetty). The core process is running on a dedicated Windows 2012 server with 16 GByte RAM and 8 processor cores.
What is strange for us is that max 20% of the cpu resources are used and the IO subsystem is at maximum 30% of activity under heavy load but database queries are let's say not at the speed we would expect.
We have currently 20.000.000 objects in the database, our configuration settings are:
<!-- ObjectDB Configuration -->
<objectdb>
<general>
<temp path="$temp" threshold="64mb" />
<network inactivity-timeout="0" />
<url-history size="50" user="true" password="true" />
<log path="$objectdb/log/" max="8mb" stdout="false" stderr="false" />
<log-archive path="$objectdb/log/archive/" retain="90" />
<logger name="*" level="info" />
</general>
<database>
<size initial="256kb" resize="256kb" page="2kb" />
<recovery enabled="true" sync="false" path="." max="128mb" />
<recording enabled="false" sync="false" path="." mode="write" />
<locking version-check="true" />
<processing cache="2048mb" max-threads="48" />
<index-update enabled="true" priority="40" />
<query-cache results="1024mb" programs="500" />
<extensions drop="temp,tmp" />
</database>
<entities>
<enhancement agent="false" reflection="warning" />
<cache ref="weak" level2="2048mb" />
<fetch hollow="true" />
<persist serialization="false" />
<cascade-persist always="auto" on-persist="false" on-commit="true" />
<dirty-tracking arrays="true" />
</entities>
<schema>
</schema>
<server>
<connection port="6136" max="100" />
<data path="$objectdb/db" />
<embedded-server enabled="true" />
<!--
<replication url="objectdb://localhost/test.odb;user=admin;password=admin" />
-->
</server>
<users>
<user username="admin" password="admin">
<dir path="/" permissions="access,modify,create,delete" />
</user>
<user username="$default" password="$$$###">
<dir path="/$user/" permissions="access,modify,create,delete">
<quota directories="5" files="20" disk-space="5mb" />
</dir>
</user>
<user username="user1" password="user1" />
</users>
<ssl enabled="false">
<server-keystore path="$objectdb/ssl/server-kstore" password="pwd" />
<client-truststore path="$objectdb/ssl/client-tstore" password="pwd" />
</ssl>
</objectdb>
Now the question is:
- how can we tune for performance ?
- do we need more processors ?
- should we change some settings in the configuration ?
- other hints or proposals