关于号主,姚远:
Oracle ACE(Oracle和MySQL数据库方向)。
Oracle MAA 大师。
华为云MVP。
《MySQL 8.0运维与优化》的作者。
拥有 Oracle 10g和12c OCM等20+数据库认证。
曾任IBM公司数据库部门经理。
20+年DBA经验,服务2万+客户。
原文网址:
https://www.percona.com/blog/how-binary-logs-and-filesystems-affect-mysql-performance/
作者:Vadim Tkachenko
这里我将仔细测试在不同文件系统上启用二进制日志对MySQL性能的影响,特别是在 MySQL 8.0 启用默认二进制日志的情况下。
01
—
基准测试的设置
基准测试的设置概览如下:
Percona Server for MySQL 5.7.21
InnoDB 存储引擎
启用了外键,使用可重复读取隔离级别,并使用了 UTF8 字符集。
数据集:sysbench-tpcc 有 10 个表和 100个仓库,总共有 1000个仓库,数据集大小约为90GB。
使用 80GB、70GB 和 60GB innodb_buffer_pool_size来模拟不同的 IO 负载,并评估这对二进制日志写入的影响。
02
—
初步结果
第一次测试,对比没有启用二进制日志与启用二进制日志(设置 sync_binlog=0) :
03
—
测试结果
下面用表格的方式列出吞吐量的中位数(tps越多性能越好)
InnoDB缓存/ sync_binlog | 0 | 1 | 1000 | 10000 | 无二进制日志 |
60GB | 4174.945 | 3598.12 | 5263.375 | 4205.165 | 4277.955 |
70GB | 5053.11 | 4541.985 | 4997.87 | 4997.87 | 5328.96 |
80GB | 5701.985 | 5263.375 | 5303.145 | 5664.155 | 6087.925 |
我们可以得出一些结论:
sync_binlog=1 的性能损失最大,但差异最小,这与在没有二进制日志的情况下运行相当。
sync_binlog=0 在已启用的二进制日志时提供最佳的性能,但差异很大。
sync_binlog=1000 是一个很好的折衷方案,它以最小的差异提供比 sync_binlog=1 更好的性能。
sync_binlog=10000 可能不好,显示的差异比sync_binlog=0 少,但仍然很大。
04
—
文件系统
下面用表格的方式列出吞吐量的中位数(tps越多性能越好)
sync_binlog | Buffer pool(GB) | EXT4 | XFS |
0 | 60 | 4174.945 | 3902.055 |
0 | 70 | 5053.11 | 4884.075 |
0 | 80 | 5701.985 | 5596.025 |
1 | 60 | 3598.12 | 3526.545 |
1 | 70 | 4541.985 | 4538.455 |
1 | 80 | 5263.375 | 5255.38 |
1000 | 60 | 3950.19 | 3620.05 |
1000 | 70 | 4714 | 4526.49 |
1000 | 80 | 5303.145 | 5150.11 |
10000 | 60 | 4205.165 | 3874.03 |
10000 | 70 | 4997.875 | 4845.85 |
10000 | 80 | 5664.155 | 5557.61 |
No binlog | 60 | 4277.955 | 4169.215 |
No binlog | 70 | 5328.96 | 5139.625 |
No binlog | 80 | 6087.925 | 5957.015 |
我们可以观察到一个总体趋势,即 XFS 的吞吐量中位数比 EXT4 差一点,差异几乎相同。
05
—
硬件规格
Supermicro 服务器:
Intel(R) Xeon(R) CPU E5-2683 v3 @ 2.00GHz
2 sockets 28 cores 56 threads
Memory: 256GB of RAM
Storage: SAMSUNG SM863 1.9TB Enterprise SSD
Filesystem: ext4/xfs
Percona-Server-5.7.21-20
OS: Ubuntu 16.04.4, kernel 4.13.0-36-generic
欢迎加我的微信,拉你进数据库微信群👇
推荐文章👇
托业890分的Oracle ACE为您翻译国际大佬的雄文(合集)