透明数据加密TDE测试报告

本文介绍不同规格的RDS MySQL实例在开启和未开启TDE加密场景下的性能影响,包括对CPU、内存的影响,帮助您评估是否选择TDE加密。

测试结论

开启TDE功能后,RDS MySQL实例性能均有所损失,CPU均有所上升。

  • 在低并发下,RDS MySQL 实例性能损失较为明显,最高可达20%;而在高并发下,由于IO合并等原因,性能损失有所下降,在5%以下。

  • 4C16G实例开启TDE并访问加密表CPU上涨0.06%~4.22%;8C32G实例CPU上涨0.12%~2.86%。

  • 从整体上看,在写场景例如oltp_write_only、oltp_update_index下性能损失较为明显。

测试环境

配置项

测试场景一

测试场景二

地域及可用区

cn-hangzhou

网络类型

专有网络 VPC

硬件架构

x86 64

存储类型

本地SSD盘

CPU

4 核

8 核

内存

16 GB

32 GB

BP 配置

12 GB

24 GB

最大 IOPS

7000

12000

实例版本

mysql80_8.0.28_20230610

测试集数据量

41 GB

说明
  • 配置项中的BP配置指的是innodb_buffer_pool参数值即内存池大小。

  • 目前云盘版本RDS MySQL实例尚不支持TDE功能。

测试工具

sysbench是一个跨平台且支持多线程的模块化基准开源测试工具,用于评估系统在运行高负载数据库时的性能。sysbench的更多信息及使用方法,请参见sysbench文档

测试指标

  • 每秒执行事务数TPS(Transactions Per Second):数据库每秒执行的事务数,以COMMIT成功次数为准。

  • 事务处理平均延迟(Average Latency):数据库执行一条事务的平均耗时,单位为毫秒(ms)。

测试表结构

sysbench的默认表结构如下:

CREATE TABLE `sbtest8` (
  `id` int NOT NULL AUTO_INCREMENT,
  `k` int NOT NULL DEFAULT '0',
  `c` char(120) NOT NULL DEFAULT '',
  `pad` char(60) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `k_8` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8mb3

测试步骤

本测试在开启TDE的MySQL实例测试在不同场景下访问加密表的性能。

  1. 创建RDS MySQL实例。详情请参见创建RDS MySQL实例

  2. 创建数据库和账号。详情请参见创建数据库和账号

  3. 在ECS实例中执行如下命令(本文以Linux系统为例),安装MySQL客户端。

    • CentOS:执行sudo yum install mysql

    • Ubuntu:执行sudo apt-get update,并执行sudo apt install mysql-server

  4. 打开MySQL命令行工具,执行如下命令,连接RDS MySQL数据库。

    mysql -h<数据库连接地址> -u<用户名> -P<端口号> -p<密码>
    说明

    数据库连接地址和端口号获取方法,请参见查看和管理实例连接地址和端口

  5. 退出数据库,使用sysbench工具加载测试数据。

    说明
    • 本测试中,使用sysbench加载128个表,其中每个表包含十万行记录,以下脚本示例中采用oltp_read_write模型。

    • 示例代码中线程数以16为例,执行中请替换为实际线程数(1、8、16、32、64、128、256)。

    sysbench --db-driver=mysql --mysql-host=[database server host] --mysql-port=[database server port] --mysql-user=[database user name] --mysql-password=[database user password] --mysql-db=testdb --table_size=1000000 --tables=128 --threads=16 --time=60 oltp_read_write prepare
  6. 执行自定义测试脚本。

    sysbench --db-driver=mysql --mysql-host=[database server host] --mysql-port=[database server port] --mysql-user=[database user name] --mysql-password=[database user password] --mysql-db=testdb --table_size=1000000 --tables=128 --threads=16 --time=60 oltp_read_write run
  7. 清理数据。

    sysbench --db-driver=mysql --mysql-host=[database server host] --mysql-port=[database server port] --mysql-user=[database user name] --mysql-password=[database user password] --mysql-db=testdb --table_size=1000000 --tables=128 --threads=16 --time=60  oltp_read_write cleanup

测试场景一:4核16GB本地SSD盘实例开启TDE前后对比

测试数据

各模型下的实例性能趋势图

image.png

image.png

CPU

image.png

性能数据汇总

image.png

image.png

image.png

说明

rds_ssd_4c16g_tde_off[3]:表示未开启TDE的4核16GB RDS MySQL实例。

rds_ssd_4c16g_tde_on[2]:表示开启TDE的4核16GB RDS MySQL实例。

测试场景二:8核32GB本地SSD盘实例开启TDE前后对比

测试数据

各模型下的实例性能趋势图

image.png

image.png

image.png

性能数据汇总

image.png

image.png

image.png

说明

rds_ssd_8c32g_tde_off[11]:表示未开启TDE的8核32GB RDS MySQL实例。

rds_ssd_8c32g_tde_on[12]:表示开启TDE的8核32GB RDS MySQL实例。