Hi,
I'm currently setting up a prototype to store test log results in a XML DB and let users do reports with XQUERY. I'm experiencing performance issues and am trying to identify where the bottleneck is. The status:
- I use a single database.
- The computer is dedicated to the DB server. (all clients are on distant machines)
- Each applications insert bursts of 100-400 xml nodes in each insert query. Between inserts there is a random delay. (seconds to minutes)
- UPDINDEX=true
- Autoflush is on
- The delays start being unacceptable when CPU average reaches ~40% (on a dual core which means ~80% of a single CPU)
- Disk i/o seems fine: iostat says write kB_wrtn/s is about 10% of max iorate supported by disk. (I also tried with an SSD with no better results)
- After some trials, it seems the more nodes in the DB the more delays to insert. The delays seem proportional to the number of nodes in the DB.
- The delays are also proportional to the number of inserter client application (it looks like the transaction monitor is responsible for this)
So I suppose the bottleneck is the CPU. Is there a way to check where in Basex server the bottleneck is? Which functions crunch up all cpu? How can I be sure basex uses both CPU? Is there any chance to have multiple simultaneous write access in future versions?
Thank-you, Best regards, Gilles.
By the way, the output of 'info database': [BaseX]: info database Database Properties Name: logs2 Size: 202 GB Nodes: 81534781 Documents: 1 Binaries: 0 Timestamp: 24.08.2012 15:07:11
Resource Properties Timestamp: 24.08.2012 15:07:10 Encoding: UTF-8 Whitespace Chopping: ON
Indexes Up-to-date: false Text Index: ON Attribute Index: ON Full-Text Index: OFF