When I run a benchmark and want to measure the CPU efficiency of something, I find it’s often a good choice to run a benchmark program, as well as the database, on the same server. This is in order to eliminate network impact and to look at single-thread performance, to eliminate contention.
Usually, this approach gives rather stable results; for example, benchmarking MySQL with Sysbench OLTP Read-Only workload I get a variance of less than one percent between 1-minute runs.
In this case, though, I was seeing some 20 percent difference between the runs, which looked pretty random and would not go away even with longer 10-minute runs.
The benchmark I did was benchmarking MySQL through ProxySQL (all running on the same machine):
Sysbench -> ProxySQL -> MySQL
As I thought more about possible reasons, I thought CPU scheduling might be a problem. As requests pass …[Read more]