MySQL SSL 性能损耗测试
配置MySQL SSL 文章我们介绍了如何使用 MySQL SSL 特性提升安全性。但是SSL是有性能损耗的,而且还不小,通常在数据传输与非SSL比较,性能损耗在 30% 左右,因为SSL启用后,每个数据包都需要加密并解密,越高级的加解密算法,性能损耗越严重。
今天我们介绍一个测试 MySQL SSL性能的工具 sysbench [1],并使用 sysbench 测试 MySQL 在启用SSL后的性能损耗。[2]
测试环境
由于硬件资源有限,测试机器为笔者一个比较老的上网本,配置为:
2 Core, Intel(R) Atom(TM) CPU N270 @ 1.60GHz
Memroy: 2G
操作系统为 Ubuntu 12.04
配置MySQL SSL
配置 MySQL SSL 参考之前的这篇文章即可。
安装 sysbench
- 下载 sysbench 源代码 ,当前为0.5版本。
- 执行源代码中的 autogen.sh 脚本,生成 configure.sh 脚本。
- 执行 configure.sh 脚本,生成 makefile 。
- make, make install 编译并安装。
测试
1. 准备数据
prepare.sh
#!/bin/bash USER="user1" PASSWORD="Changeme_123" DB="test" ./bin/sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=${USER} --mysql-password=${PASSWORD} --mysql-db=test --oltp-tables-count=64 --num-threads=8 --test=tests/db/parallel_prepare.lua run
2. 执行测试
run.sh
#!/bin/bash USER="user1" PASSWORD="Changeme_123" DB="test" for SSL in on off do for threads in 1 2 4 8 16 32 do ./bin/sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=${USER} --mysql-password=${PASSWORD} --mysql-db=${DB} --mysql-ssl=${SSL} --oltp-tables-count=64 --num-threads=${threads} --oltp-dist-type=uniform --report-interval=10 --max-time=600 --max-requests=0 --test=tests/db/oltp.lua run | tee -a result/mysql-ssl-test-ssl-${SSL}-threads${threads}.result done done
结果分析
测试的结果有一点奇怪,在并发线程数为 2,4,8 时候,SSL 模式和 非 SSL 模式差异不大,可能与构造的数据和环境相关,这个有兴趣的同学可以自己测试。
1. 并发线程数为1,writes/s 的对比
2. 并发线程数为2,writes/s 的对比
3. 并发线程数为4,writes/s 的对比
4. 并发线程数为8,writes/s 的对比
5. 并发线程数为16,writes/s 的对比
6. 并发线程数为32,writes/s 的对比
7. 并发线程数为1,reads/s 的对比
8. 并发线程数为2,reads/s 的对比
9. 并发线程数为4,reads/s 的对比
10. 并发线程数为8,reads/s 的对比
11. 并发线程数为16,reads/s 的对比
12. 并发线程数为32,reads/s 的对比
结束语
MySQL 设计是一个高性能数据库,而我们却要使用SSL来降低其性能。在实际生产环境上,使用MySQL SSL的还是很少的,至少笔者了解到信息是这样的。
关于在并发线程数 2,4,8 情况下,测试结果的疑问,感兴趣的同学可以自己测试一遍,笔者空了后面也会再次测试,毕竟只测试了一份数据还是可能存在偏差或错误。
测试相关代码和结果都在 GitHub 上,需要的同学可以下载。