MySQL SSL 性能损耗测试

配置MySQL SSL 文章我们介绍了如何使用 MySQL SSL 特性提升安全性。但是SSL是有性能损耗的,而且还不小,通常在数据传输与非SSL比较,性能损耗在 30% 左右,因为SSL启用后,每个数据包都需要加密并解密,越高级的加解密算法,性能损耗越严重。

今天我们介绍一个测试 MySQL SSL性能的工具 [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 的对比

04db5d3c0f19f92402f2aff1202b3e21.png

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

4d8ce1c620bf366dbae31db2544a0546.png

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

f882d6020ee22801dad3d4b536a499d3.png

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

6d380ff56256236eb12b2141d5939ab1.png

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

e7f3c160c8493f7453b744497a3cf2d0.png

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

dfca8167d18afd7692c9ad387129f744.png

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

1e79f5b0d71a6bdd9d57c341942d6560.png

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

5ec290ec8f63eb977f1c1a997036abf9.png

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

db2d701e3ea655048430ac9509490d98.png

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

99b90ff51fafe0399a442c6a75ccc0d1.png

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

4202db74867e1cf614179f8617f88b3b.png

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

240a8f63585a3e59edfd77e1ca6231f4.png

结束语

MySQL 设计是一个高性能数据库,而我们却要使用SSL来降低其性能。

在实际生产环境上,使用MySQL SSL的还是很少的,至少笔者了解到信息是这样的。

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

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

sysbench 使用方法参考 https://www.percona.com/docs/wiki/benchmark:sysbench:olpt.lua ↩

参考文章: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/ ↩

本文链接:http://www.yunweipai.com/4716.html

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐