このトピックでは、仕様の異なる RDS for MySQL インスタンスにおける TDE (透過的データ暗号化) のパフォーマンスへの影響について説明します。CPU とメモリへの影響を網羅し、TDE を有効にするかどうかの判断材料を提供します。
テストの結論
TDE を有効にすると、RDS for MySQL インスタンスのパフォーマンスが低下し、CPU 使用率が増加します。
低い同時実行性では、パフォーマンスの低下は最大 20% と顕著です。高い同時実行性では、I/O のマージなどの要因により、パフォーマンスの低下は 5% 未満に収まります。
4 コア 16 GB メモリのインスタンスの場合、TDE を有効にして暗号化されたテーブルにアクセスすると、CPU 使用率が 0.06% から 4.22% 増加します。8 コア 32 GB メモリのインスタンスの場合、CPU 使用率は 0.12% から 2.86% 増加します。
全体として、パフォーマンスの低下は、oltp_write_only や oltp_update_index のような書き込み集中型のシナリオでより顕著です。
テスト環境
設定項目 | テストシナリオ 1 | テストシナリオ 2 |
リージョンとゾーン | 中国 (杭州) | |
ネットワークタイプ | Virtual Private Cloud | |
ハードウェアアーキテクチャ | x86-64 | |
ストレージタイプ | プレミアムローカル SSD | |
CPU | 4 コア | 8 コア |
メモリ | 16 GB | 32 GB |
バッファプールサイズ | 12 GB | 24 GB |
最大 IOPS | 7000 | 12000 |
インスタンスバージョン | mysql80_8.0.28_20230610 | |
テストデータセットサイズ | 41 GB | |
テストツール
Sysbench は、オープンソースでモジュール式の、クロスプラットフォームかつマルチスレッドのベンチマークツールであり、高負荷状態にあるデータベースシステムのパフォーマンスを評価するために使用されます。詳細については、Sysbench ドキュメントをご参照ください。
テストメトリック
1 秒あたりのトランザクション数 (TPS):データベースが 1 秒あたりにコミットするトランザクションの数。
平均レイテンシ:データベースが 1 つのトランザクションを実行するために要する平均時間。単位はミリ秒 (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 インスタンスで、さまざまなシナリオにおいて暗号化されたテーブルにアクセスする際のパフォーマンスを測定します。
RDS for MySQL インスタンスを作成します。詳細については、「RDS for MySQL インスタンスの作成」をご参照ください。
データベースとアカウントを作成します。詳細については、「データベースとアカウントの作成」をご参照ください。
Linux を実行している ECS インスタンスで、次のコマンドを実行して MySQL クライアントをインストールします。
CentOS の場合、
sudo yum install mysqlを実行します。Ubuntu の場合、
sudo apt-get updateを実行してからsudo apt install mysql-serverを実行します。
MySQL コマンドラインインターフェイスを開き、次のコマンドを実行して RDS for MySQL データベースに接続します。
mysql -h<database_endpoint> -u<username> -P<port_number> -p<password>説明データベースのエンドポイントとポート番号を取得する方法については、「インスタンスのエンドポイントとポートの表示と管理」をご参照ください。
データベースを終了し、Sysbench ツールを使用してテストデータをロードします。
説明このテストでは、Sysbench を使用して、それぞれ 100,000 レコードを含む 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カスタムテストスクリプトを実行します。
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データをクリーンアップします。
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
テストシナリオ 1:プレミアムローカル SSD を使用した 4 コア 16 GB インスタンスにおける TDE 有効化前後の比較
テストデータ
各モデルのインスタンスパフォーマンス傾向グラフ


CPU

パフォーマンスデータの概要



rds_ssd_4c16g_tde_off[3]:TDE が無効になっている 4 コア 16 GB の RDS for MySQL インスタンス。
rds_ssd_4c16g_tde_on[2]:TDE が有効になっている 4 コア 16 GB の RDS for MySQL インスタンス。
テストシナリオ 2:プレミアムローカル SSD を使用した 8 コア 32 GB インスタンスにおける TDE 有効化前後の比較
テストデータ
各モデルのインスタンスパフォーマンス傾向グラフ



パフォーマンスデータの概要



rds_ssd_8c32g_tde_off[11]:TDE が無効になっている 8 コア 32 GB の RDS for MySQL インスタンス。
rds_ssd_8c32g_tde_on[12]:TDE が有効になっている 8 コア 32 GB の RDS for MySQL インスタンス。