The word "uniform" is being used to describe the fact that each server should have similar or identical resources, in terms of cpu, memory, disk (seek time, I/O bandwidth), etc.
Since a single node can slow down the entire cluster, the slowest node determines the overall capacity of the cluster... so using servers whose performance capabilities are not "uniform" (closely comparable) will mean that resources on the more powerful machines will go underutilized, while the less powerful machines slow down the cluster.
Data Warehousing (your app) and OLTP are somewhat different. So, I question the relevancy of the benchmark. OLTP, if I am not mistaken, involves very short 'transactions', which can suffer from the cross-node syncing done at COMMIT
by Galera's wsrep. On the other hand, your insertion of new datapoints could be done in batches of, say, 1000, and not have to worry about the commit overhead.
With 60GB, innodb_buffer_pool_size
should be more like 45G. And set innodb_buffer_pool_instances=16
.
On the surface, 19K/sec (per node?) seems faster -- 19K*3 > 54K. But maybe I am misreading things.
Let's see your SHOW CREATE TABLE
for the Fact table. There are a number of mistakes that can cause severe performance problems in your type of application.
When do you do the "consolidating"? And how? Summary table (which I assume is what you are talking about) is key to efficiency. Sometimes it is even better store the summary data, yet toss the raw data.
Check out my discussion of High speed ingestion and Summary tables. My point in those are that there are significant speedups that can (and should) be made aside from the underlying structure (hardware, Galera, etc).
Your Galera settings are in the right direction; there may be extra tips in Galera.
More questions (which will lead to more discussion): How many clients are pumping data into the table? How many rows are inserted at once? How easy would it be to gather the rows and batch-insert them? Is any Normalization occurring during the insertion? Does it make sense to do the summarization in parallel with the insertion? Did you intend to have clients writing to all 3 nodes? Do you have some form of Proxy between the clients and the nodes?
Best Answer
If you are reading from a node other than then node where the transaction was commit, there is a finite response time on the other nodes from the time it is certified, to the time it is applied on the other node.
In theory you should be able to wait to ensure its committed.