tl;dr - from 5.0.96 to 8.0.3
- Regressions are frequently larger on the i3 NUC than the i5 NUC. Maybe modern MySQL and the core i3 NUC aren't great together because regressions are also larger on the i3 NUC for MyISAM.
- Insert performance improved by ~3X after MySQL 5.5 when I switched from built-in InnoDB to modern InnoDB.
- The query rate decreased by 15% on the i5 NUC and 39% on the i3 NUC for the test with 100 inserts/second
tl;dr - from 5.6.35 to 8.0.3
- Most of the drop in performance from 5.0 to 8.0 occurs between 5.6.35 and 8.0.3. The drop is similar for MyISAM and InnoDB. I assume the drop is from code above the storage engine.
- The insert rate decreased by 12% on the i5 NUC and 26% on the i3 NUC
- The query rate decreased by 13% on the i5 NUC and 22% on the i3 NUC for the test with 100 inserts/second
- Scan performance improved
Configuration
The tests used InnoDB from upstream MySQL versions 5.0.96, 5.1.72, 5.5.51, 5.6.35, 5.7.17 and 8.0.3. The built-in InnoDB (remember that?) was used for 5.0, 5.1 and 5.5 and then I switched to modern InnoDB starting with 5.6. All tests used jemalloc with mysqld. The i3 and i5 NUC servers are described here. The insert benchmark is described here. The my.cnf files are here for the i3 NUC and i5 NUC. The i5 NUC has more RAM, faster CPUs and faster storage than the i3 NUC. I tried to tune my.cnf for all engines including: disabled SSL for MySQL 5.7, used the same charset and collation and set innodb_purge_threads=1 to reduce mutex contention. For all tests the binlog was enabled but fsync was disabled for the binlog and database redo log. I compiled all of the MySQL versions on the test servers and did not use binaries from upstream.
The database fits in RAM as the test table has ~10M rows. The i3 NUC has 8gb of RAM and the i5 NUC has 16gb. The insert benchmark loaded the table with 10M rows, then did a full scan of each index on the table (PK, 3 secondary, PK again), then two read-write tests. The first read-write test tries to insert 1000 rows/second with one client while the other client does short range scans as fast as possible. The second read-write test is similar except the insert rate limit is 100/second.
Results
All of the data for the tests is here.
Results: load
The graph below has the insert rate for each release relative to the rate for InnoDB in 5.0.96. Performance improves dramatically in 5.6 thanks to switching from the built-in InnoDB to modern InnoDB. There are regressions post-5.6 that I hope get addressed.
i3 NUC
IPS wKB/i Mcpu/i size(GB)
5.0.96 4803 35.75 3069 2.5
5.1.72 4737 35.71 3129 2.5
5.5.51 4643 38.03 3427 2.5
5.6.35 18797 8.87 1737 2.4
5.7.17 15083 10.36 3497 2.4
8.0.3 13908 11.02 3783 2.4
i5 NUC
IPS wKB/i Mcpu/i size(GB)
5.0.96 8368 35.69 2643 2.5
5.1.72 8326 35.70 2713 2.5
5.5.51 7628 37.98 2972 2.5
5.6.35 29586 8.06 1461 2.4
5.7.17 25907 9.66 1491 2.4
8.0.3 26178 9.60 1474 2.5
Results: scan
Below are tables that show the number of seconds for each full index scan: 1 is the PK, 2/3/4 are the secondary indexes and 5 is the PK again. The scan doesn't take long and the result is rounded to a whole number so the numbers aren't that useful. If there is a regression from 5.0 to 8.0 it isn't apparent in this result. Scan performance got worse from 5.5.51 (builtin InnoDB) to 5.6.35 (modern InnoDB). But then it improved in 5.7.17 for the i5 NUC and for many other tests I do, but for some reason it didn't on the i3 NUC.
#seconds to scan an index, i3 NUC
1 2 3 4 5 2+3+4 engine
- - - - - ----- ------
6 3 2 3 6 8 5.0.96
3 3 2 3 3 8 5.1.72
3 3 3 3 3 9 5.5.51
4 4 4 4 4 12 5.6.35
3 4 7 3 3 14 5.7.17
4 4 3 4 3 11 8.0.3
#seconds to scan an index, i5 NUC
1 2 3 4 5 2+3+4 engine
- - - - - ----- ------
5 2 2 2 5 6 5.0.96
3 2 3 2 2 7 5.1.72
3 2 3 3 2 8 5.5.51
3 4 3 4 3 11 5.6.35
3 3 3 2 3 8 5.7.17
2 3 3 3 3 9 8.0.3
Results: read-write, 1000 inserts/second
This section has results for the read-write tests where the writer does 1000 inserts/second. The graph has the query rate relative to the rate for MySQL 5.0.96. The QPS regression from MySQL 5.0.96 to 8.0.3 is 41% for the i3 NUC and 19% for the i5 NUC. Most of the regression occurs after 5.6.35. The large regression on the i3 NUC is another example of odd results for the i3 NUC. The regression was much smaller for MyISAM in my previous post.
i3 NUC
IPS.av IPS.99 wKB/i QPS.av QPS.99 CPU/q engine
992 770 64.13 5675 5277 5332 5.0.96
992 731 64.03 4990 4863 5910 5.1.72
998 943 67.66 4364 4249 6845 5.5.51
999 994 43.90 4817 4454 5970 5.6.35
999 995 40.27 3748 3540 13834 5.7.17
999 995 41.32 3527 3349 14750 8.0.3
i5 NUC
IPS.av IPS.99 wKB/i QPS.av QPS.99 CPU/q engine
999 993 64.31 6183 5534 4776 5.0.96
998 963 64.05 5646 5594 5118 5.1.72
999 993 70.40 5284 5052 5591 5.5.51
999 998 44.12 5798 5410 4846 5.6.35
999 998 40.62 5184 4917 5186 5.7.17
999 998 41.23 4995 4763 5389 8.0.3
Results: read-write, 100 inserts/second
This section has results for the read-write tests where the writer does 100 inserts/second. The graph has the query rate relative to the rate for MySQL 5.0.96. The regression from MySQL 5.0.96 to 8.0.3 is 39% on the i3 NUC and 15% on the i5 NUC. The regression from 5.6.35 to 8.0.3 is 22% for the i3 NUC and 13% for the i5 NUC. On the i5 NUC the CPU overhead per insert, Mcpu/i, increased by 18% from 5.0 to 8.0 and by 16% from 5.6 to 8.0 which probably explains the decrease in the insert rate.
All of the engines were able to sustain the target insert rate on average (ips.av) and write stalls were not a problem. Additional metrics help explain the performance. The metrics are explained here.
i3 NUC
IPS.av IPS.99 wKB/i QPS.av QPS.99 CPU/q engine
100 100 67.34 6058 5877 4238 5.0.96
100 100 67.38 5033 4891 5013 5.1.72
100 100 98.90 4465 4274 5766 5.5.51
100 100 51.85 4729 4499 5457 5.6.35
100 100 52.94 3906 3717 12636 5.7.17
100 100 61.08 3681 3524 13407 8.0.3
i5 NUC
IPS.av IPS.99 wKB/i QPS.av QPS.99 CPU/q engine
100 100 67.54 6062 5543 4211 5.0.96
100 100 67.25 5655 5586 4439 5.1.72
100 100 98.98 5189 5035 4931 5.5.51
100 100 51.95 5937 5548 4309 5.6.35
100 100 55.24 5349 4976 4803 5.7.17
100 100 54.07 5148 4819 4978 8.0.3
No comments:
Post a Comment