全部產品
Search
文件中心

ApsaraDB RDS:透明資料加密TDE測試報告

更新時間:Jun 19, 2024

本文介紹不同規格的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

網路類型

Virtual Private Cloud

硬體架構

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執行個體。