MySQL Performance : 8.0 GA on IO-bound TPCC
This post is mainly inspired by findings from the previous testing of MySQL 8.0 on TPCC
workload(s) and observations from IO-bound Sysbench OLTP on Optane -vs- SSD. But also by
several "urban myths" I'm often hearing when discussing with users about their IO-bound OLTP performance problems :
Myth #1 : "if I'll double the number of my storage drives -- I'll get x2 times better TPS !"
-
this was mostly true during "HDD era", and again..
-
(ex.: a single thread app doing single random IO reads from a single HDD will not go faster by doing the same from 2x HDD -- similar like single thread workload will not run faster on 8CPU cores -vs- 2CPU cores, etc.)
-
all depends on your workload and how many parallel IO operations you're involving..
-
indeed, it is much more easier to saturate HDD, but it's much more harder to do it with modern SSD/NVMe
-
NOTE : we're speaking about OLTP (e.g. if you started to observe full table scans in your workload -- means you're already doing something wrong ;-))
-
simple rule : if you're not saturating your storage on any of its limits => you'll not see any gain by adding more drives, you'll probably just have a bigger storage space, that's all.
Myth #2 : "I'll go faster with flash drive which is claimed capable x2 times more IOps in specs than my current drive !"
-
if you're expecting to run OLTP workload, rather pay attention to IO latency first !
-
sometimes it may be not mentioned these x2 times more IOps were obtained with x4 times more IO threads ;-))
-
e.g. a drive capable of x2 times more IOps but with x4 times higher latency will still be x4 times slower than your current drive on 1 user load, and 2, and 4, and .. maybe up to 64 ? (depends on where your current drive the limit is reached) -- and if you don't have more than 64 concurrent users ? -- then you'll never see your x2 times more IOps, but rather x4 times worse TPS ;-))
Test it yourself - this is the only advice I could give you !
-
because "only a real test will give you a real answer" (and I'm repeating to say it again and again.. ;-))
-
testing your own workload will give you the best answer !
-
otherwise you may still use some generic benchmark workloads which are representative for you
-
for ex. your new flash drive may be look better from all points and passing very well all generic pure IO tests, but show x3 times worse results once used by MySQL -- and this is just because, for ex., every involved fsync() will take x3 times more time, etc. (based on real story, no kidding ;-))
So far, for the following story I'll use :
-
Sysbench-TPCC workload, 10x100W (x10 of 100 warehouses, ~100GB data, here is why)
-
Same Skylake server as before, same config, etc.
-
and the same Optane & SSD as in the previous testing, except that I'll also add to the game x2 Optane drives used as a single RAID-0 MDM volume !
-
EXT4 is used on top of each drive or volume
Starting Test scenario :
-
concurrent users : 1, 2, 4, .. 1024
-
trx_commit : 1 (flush REDO on every COMMIT)
-
Buffer Pool (BP) : 128GB (in-memory), 32GB (IO-bound)
Sorry, no "user friendly" graphs this time, but hope it'll still be easy to understand the results ;-))
On the first graph you'll see :
-
3 test results : with x2 Optaine first, then with single Optane, and then single SSD
-
on each test the load is going from 1, 2, 4 .. up to 1024 concurrent users
-
the Commits/sec curve is showing obtained TPS level
and the first result is with 128GB BP :
InnoDB Buffer Pool 128GB

Comments :
-
first of all, as you can see, TPS is not better with two -vs- one Optane
-
as we're not hitting any single limit of Optane drive, there is no any gain by using x2 ;-))
-
also, regardless the used data volume is ~100GB, we're not observing here such a big difference between Optane -vs- SSD as it was with Sysbench OLTP on a similar data size and still "in-memory"..
-
this because TPCC workload is much less aggressive on IO writes, so REDO flushing is less impacted..
now, how TPS will be impacted if BP size was smaller, just 32GB ?