Over the last few weeks I have been doing some work on improving
the concurrency performance of PBXT. The last Alpha version (1.0.03) has
quite a few problems in this area.
Most of the problems have been with r/w lock and mutex contention
but, I soon discovered that MySQL has some serious problems of
it's own. In fact, I had to remove some of the bottlenecks in
MySQL in order to continue the optimization of PBXT.
The result for simple SELECT performance is shown in the graph
below.
Here you can see that the gain is over 60% for 32
or more concurrent threads. Both results show the performance
with the newly optimized version of PBXT. The test is running on
a 2.16 MHz dual core processor, so I expect an even greater
improvement on 4 or 8 cores. The query I ran for this test is …
Contrary to what I said earlier, Falcon has decided to deliberately disable statement-based replication using the same capabilities mechanism that InnoDB uses.
The reason is that isolation between concurrent transactions cannot be guaranteed, meaning that two concurrent transactions are not guaranteed to be serializable (the result of a concurrent transaction that has committed can "leak" into an ongoing transaction). Since they are not serializable, it means they cannot be written to the binary log in an order that produce the same result on the slave as on the master.
However, when using row-based replication they are serializable, because whatever values are written to the tables are also written to the binary log, so if data "leaks" into an ongoing transaction, this is what is written to the binary log as …
[Read more]