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 的对比

threads 1

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

threads 2

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

threads 4

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

threads 8

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

threads 16

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

threads 32

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

threads 1

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

threads 2

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

threads 4

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

threads 8

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

threads 16

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

threads 32

结束语

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

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

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


  1. sysbench 使用方法参考 https://www.percona.com/docs/wiki/benchmark:sysbench:olpt.lua  ↩
  2. 参考文章:https://www.percona.com/blog/2013/10/10/mysql-ssl-performance-overhead/ ,https://www.percona.com/blog/2014/09/02/using-sysbench–0–5-benchmark-mysql-whats-changed-latest-release/  ↩

转载请注明:运维派 » MySQL SSL 性能损耗测试

0
3.4k
3