转载

MySQL SSL 性能损耗测试

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

  1. 下载 sysbench 源代码 ,当前为0.5版本。
  2. 执行源代码中的 autogen.sh 脚本,生成 configure.sh 脚本。
  3. 执行 configure.sh 脚本,生成 makefile 。
  4. 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 的对比

MySQL SSL 性能损耗测试

2. 并发线程数为2,writes/s 的对比

MySQL SSL 性能损耗测试

3. 并发线程数为4,writes/s 的对比

MySQL SSL 性能损耗测试

4. 并发线程数为8,writes/s 的对比

MySQL SSL 性能损耗测试

5. 并发线程数为16,writes/s 的对比

MySQL SSL 性能损耗测试

6. 并发线程数为32,writes/s 的对比

MySQL SSL 性能损耗测试

7. 并发线程数为1,reads/s 的对比

MySQL SSL 性能损耗测试

8. 并发线程数为2,reads/s 的对比

MySQL SSL 性能损耗测试

9. 并发线程数为4,reads/s 的对比

MySQL SSL 性能损耗测试

10. 并发线程数为8,reads/s 的对比

MySQL SSL 性能损耗测试

11. 并发线程数为16,reads/s 的对比

MySQL SSL 性能损耗测试

12. 并发线程数为32,reads/s 的对比

MySQL SSL 性能损耗测试

结束语

MySQL 设计是一个高性能数据库,而我们却要使用SSL来降低其性能。在实际生产环境上,使用MySQL SSL的还是很少的,至少笔者了解到信息是这样的。

关于在并发线程数 2,4,8 情况下,测试结果的疑问,感兴趣的同学可以自己测试一遍,笔者空了后面也会再次测试,毕竟只测试了一份数据还是可能存在偏差或错误。

测试相关代码和结果都在 GitHub 上,需要的同学可以下载。

正文到此结束
Loading...