すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:完全暗号化データベース機能のパフォーマンステストレポート

最終更新日:Jan 16, 2024

このトピックでは、完全に暗号化されたデータベース機能がさまざまなシナリオでシステムパフォーマンスに与える影響について説明し、暗号化ソリューションの評価と選択に役立ちます。

テスト環境

設定アイテム

テストクライアントがデプロイされているECSインスタンス

RDSインスタンス

説明

リージョンとゾーン

上海ゾーンL

上海ゾーンL

テストは同じ地域とゾーンで実行されます。

ネットワークタイプ

仮想プライベートクラウド (VPC)

VPC

テストは同じVPCで実行されます。

CPUコア数とメモリ容量

16 コア 128 GB

32 コア 64 GB

N/A

インスタンスファミリー

コンピューティング最適化タイプc7

セキュリティ強化型インスタンスファミリー

RDSインスタンスは、セキュリティ強化インスタンスファミリーに属している必要があります。

インスタンスタイプ

ecs.c7.16xlarge

pg.x2t.4 xlarge.2c

N/A

ストレージタイプ

Enhanced SSD (ESSD)

PL1 ESSD

N/A

インスタンスまたはイメージのバージョン

Alibaba Cloud Linux 3.2104 64ビット

  • 主要エンジンバージョン: PostgreSQL 13

  • マイナーなエンジン版: 20230830

N/A

テストツール (sysbench)

sysbenchは、コア指標に基づいて負荷の高いデータベースシステムのパフォーマンスを評価するために使用できる、モジュール式、クロスプラットフォーム、およびマルチスレッドのベンチマークツールです。 sysbenchの詳細とsysbenchの使用方法については、「sysbenchドキュメント」をご参照ください。

パフォーマンスメトリクス

  • Transactions per second (TPS): RDSインスタンスで1秒あたりに正常にコミットされたトランザクションの数。

  • 平均レイテンシ: RDSインスタンスがトランザクションを実行するのに必要な平均期間。 単位:ミリ秒。

テストスキーマ

デフォルトでは、sysbenchは次のテーブルスキーマを使用します。

CREATE TABLE test1 (
  id INTEGER NOT NULL,
  k整数デフォルト「0」NOT NULL、
  c CHAR(120) デフォルト 'NOT NULL、
  パッドCHAR(60) デフォルト 'NOT NULL、
  主要なキー (id)
);
CREATE INDEX k_1 on test1(k); 

テストの実行手順

このテストでは、さまざまなシナリオでのRDSインスタンスのパフォーマンスに対する完全暗号化データベース機能の影響を分析するために、テーブル列を暗号化します。

  1. ECSインスタンスにPostgreSQLクライアントをインストールします。 詳細については、公式ドキュメントをご参照ください。

  2. PostgreSQLコマンドラインツール (CLI) を開き、次のコマンドを実行してRDSインスタンスに接続します。

    psql -h <RDSインスタンスのエンドポイント> -U <ユーザー名> -p <ポート番号> -d postgres
    説明
  3. テストデータベースを作成します。

    データベースの作成testdb;
    \c testdb 
  4. 暗号化されたテーブルを作成し、さまざまなシナリオに基づいて列を暗号化します。

    シナリオ

    説明

    SQL文の例

    主キー列は暗号化されません。 その他の列は暗号化されます。

    ほとんどのシナリオでは、idは自動インクリメントフィールドであり、ビジネスとは無関係です。 このテストシナリオでは、id列は暗号化されません。 その他の列は機密情報として暗号化されます。

    CREATE TABLE test1 (
      id INTEGER NOT NULL,
      k enc_int4 DEFAULT '\xa509008855508aade16ec573d21e6aca47ab5e490d7044e748161a6635a5d939c5bbbee4' NOT NULL,
      c enc_text DEFAULT '\x9d39006e340b9cffb37a989ca544e69e6e9c0bdb0b6500a91dcc433dc5df0496' NOT NULL、
      パッドenc_text DEFAULT '\x9d39006e340b9cffb37a989ca544e69e6e9c0bdb0b6500a91dcc433dc5df0496' NOT NULL、
      主要なキー (id)
    );
    CREATE INDEX k_1 on test1(k); 

    すべての列は暗号化されます。

    このテストシナリオでは、主キー列も暗号化されます。

    CREATE TABLE test1 (
      id enc_int4 NULLではない、
      k enc_int4 DEFAULT '\xa509008855508aade16ec573d21e6aca47ab5e490d7044e748161a6635a5d939c5bbbee4' NOT NULL,
      c enc_text DEFAULT '\x9d39006e340b9cffb37a989ca544e69e6e9c0bdb0b6500a91dcc433dc5df0496' NOT NULL,
      パッドenc_text DEFAULT '\x9d39006e340b9cffb37a989ca544e69e6e9c0bdb0b6500a91dcc433dc5df0496' NOT NULL、
      主要なキー (id)
    );
    CREATE INDEX k_1 on test1(k); 
  5. RDSインスタンスを終了し、sysbenchを使用してテストデータを読み込みます。

    説明

    このテストでは、sysbenchを使用して32テーブルをロードします。 各テーブルは、百万行のレコードを含む。

    sysbench -- db-driver=pgsql \
      -- pgsql-host=[データベースサーバーホスト] \
      -- pgsql-port=[データベースサーバーポート] \
      -- pgsql-user=[データベースユーザー名] \
      -- pgsql-password=[データベースユーザーパスワード] \
      -- pgsql-db=testdb \
      -- auto_inc=false \
      -- table_size=1000000 \
      -- tables=32 \
      -- threads=32 \
      -- time=600 \
      -- pg_use_encrypt=[trueまたはfalse] \
      oltp_commonの準備 
  6. カスタムテストスクリプトを実行します。

    sysbench -- db-driver=pgsql \
      -- pgsql-host=[データベースサーバーホスト] \
      -- pgsql-port=[データベースサーバーポート] \
      -- pgsql-user=[データベースユーザー名] \
      -- pgsql-password=[データベースユーザーパスワード] \
      -- pgsql-db=testdb \
      -- table_size=1000000 \
      -- tables=32 \
      -- threads=XXX \
      -- time=600 \
      -- report-interval=1 \
      -- pg_use_encrypt=[trueまたはfalse] \
      [luaスクリプト名] run 
  7. データを削除します。

    sysbench -- db-driver=pgsql \
      -- pgsql-host=[データベースサーバーホスト] \
      -- pgsql-port=[データベースサーバーポート] \
      -- pgsql-user=[データベースユーザー名] \
      -- pgsql-password=[データベースユーザーパスワード] \
      -- pgsql-db=testdb \
      -- tables=32 \
      oltp_commonクリーンアップ 

テストシナリオ1: 主キー列は暗号化されていません。 その他の列は暗号化されます。

説明
  • このテストの各結果は、10回のテストのTPSおよび処理待ち時間の平均であり、各テストは10分間実行されます。

  • テスト結果は、クライアントで返されたフィールドの復号化によって引き起こされたパフォーマンスの損失も示しています。

  • テスト結果では、縦棒グラフはTPSを示し、折れ線グラフはトランザクションの平均処理レイテンシを示します。

テストデータ

  • ポイントクエリのパフォーマンス

    パーセンテージ

    SQLテンプレート

    100%

    説明

    パーセンテージは、トランザクションで実行されたSQL文の総数に対する、SQLテンプレートで定義され、トランザクションで実行されたSQL文の割合を示します。

    SELECT c FROM test1 WHERE id =?;

    场景1点查询

    表1 1,000 TPS比較

    同時スレッド数

    完全暗号化データベース機能の無効化

    完全暗号化データベース機能の有効化

    パフォーマンスの低下

    8

    46.99

    39.94

    15.0%

    16

    91.07

    79.86

    12.3%

    24

    132.78

    117.64

    11.4%

    32

    173.58

    154.28

    11.1%

  • 範囲クエリのパフォーマンス

    パーセンテージ

    SQLテンプレート

    100%

    SELECT SUM(k) FROM test1 WHERE id BETWEEN? そして?; 
    説明

    デフォルトでは、範囲クエリの長さは100です。

    场景1范围查询

    表2 1,000 TPS比較

    同時スレッド数

    完全暗号化データベース機能の無効化

    完全暗号化データベース機能の有効化

    パフォーマンスの低下

    8

    14.81

    12.09

    18.3%

    16

    28.88

    23.22

    19.6%

    24

    41.62

    33.12

    20.4%

    32

    54.27

    42.48

    21.7%

  • 書き込みパフォーマンス

    パーセンテージ

    SQLテンプレート

    25%

    UPDATE test1 SET k=k + 1 WHERE id =?;

    25%

    UPDATE test1 SET c=? WHERE id =?; 

    25%

    DELETE FROM test1 WHERE id =?;

    25%

    INSERT INTO test1 (id、k、c、pad) 値 (? 、? 、?);

    场景1写性能

    表3 1,000 TPS比較

    同時スレッド数

    完全暗号化データベース機能の無効化

    完全暗号化データベース機能の有効化

    パフォーマンスの低下

    8

    6.62

    6.37

    3.8%

    16

    11.36

    10.91

    4.0%

    24

    15.05

    14.68

    2.6%

    32

    19.13

    17.74

    7.3%

テストの結論

このテストシナリオでは、完全に暗号化されたデータベース機能を有効にすると、パフォーマンスの低下は少なくなります。

テストシナリオ2: すべての列が暗号化されます。

説明
  • このテストの各結果は、10回のテストのTPSおよび処理待ち時間の平均であり、各テストは10分間実行されます。

  • テスト結果は、クライアントで返されたフィールドの復号化によって引き起こされたパフォーマンスの損失も示しています。

  • テスト結果では、縦棒グラフはTPSを示し、折れ線グラフはトランザクションの平均処理レイテンシを示します。

テストデータ

  • ポイントクエリのパフォーマンス

    パーセンテージ

    SQLテンプレート

    100%

    SELECT c FROM test1 WHERE id =?;

    场景2点查询

    表4 1,000 TPS比較

    同時スレッド数

    完全暗号化データベース機能の無効化

    完全暗号化データベース機能の有効化

    パフォーマンスの低下

    8

    46.99

    18.31

    61.0%

    16

    91.07

    35.66

    60.8%

    24

    132.78

    49.85

    62.5%

    32

    173.58

    63.34

    63.5%

  • 範囲クエリのパフォーマンス

    パーセンテージ

    SQLテンプレート

    100%

    SELECT SUM(k) FROM test1 WHERE id BETWEEN? そして?; 
    説明

    デフォルトでは、範囲クエリの長さは100です。

    场景2范围查询

    表5 1,000 TPS比較

    同時スレッド数

    完全暗号化データベース機能の無効化

    完全暗号化データベース機能の有効化

    パフォーマンスの低下

    8

    14.81

    2.83

    80.9%

    16

    28.88

    5.52

    80.9%

    24

    41.62

    7.12

    82.9%

    32

    54.27

    8.71

    84.0%

  • 書き込みパフォーマンス

    パーセンテージ

    SQLテンプレート

    25%

    UPDATE test1 SET k=k + 1 WHERE id =?;

    25%

    UPDATE test1 SET c=? WHERE id =?; 

    25%

    DELETE FROM test1 WHERE id =?;

    25%

    INSERT INTO test1 (id、k、c、pad) 値 (? 、? 、?);

    场景2写性能

    表6 1,000 TPS比較

    同時スレッド数

    完全暗号化データベース機能の無効化

    完全暗号化データベース機能の有効化

    パフォーマンスの低下

    8

    6.62

    2.67

    59.7%

    16

    11.36

    4.62

    59.3%

    24

    15.05

    5.92

    60.7%

    32

    19.13

    7.04

    63.2%

テストの結論

このテストシナリオでは、クライアントの列を復号化する必要があります。 さらに、Intel SGX関連のコマンドは、暗号化された列のインデックスを照会するために頻繁に実行されます。 その結果、総コストとパフォーマンスの損失は、テストシナリオ1の場合よりも高くなります。

テストシナリオ3: 主キー以外の列が照会されます。

説明
  • このテストの各結果は、10回のテストのTPSおよび処理待ち時間の平均であり、各テストは10分間実行されます。

  • テスト結果は、クライアントで返されたフィールドの復号化によって引き起こされたパフォーマンスの損失も示しています。

  • テスト結果では、縦棒グラフはTPSを示し、折れ線グラフはトランザクションの平均処理レイテンシを示します。

このテストシナリオでは、Alibaba Cloudが提供するencdb_btree拡張機能を使用して、完全に暗号化されたデータベースでの暗号文インデックス関連の操作の効率を向上させます。 詳細については、「encdb_btree拡張機能の使用」をご参照ください。

テストデータ

  • ポイントクエリ

    パーセンテージ

    SQLテンプレート

    100%

    SELECT c FROM test1 WHERE k =?;

    非主键查询

    表7 1,000 TPS比較

    同時スレッド数

    完全暗号化データベース機能の無効化

    完全暗号化データベース機能の有効化

    完全に暗号化されたデータベース機能を有効にし、encdb_btree拡張機能を使用

    8

    47.27

    18.49

    27.86

    16

    90.41

    35.85

    54.4

    24

    132.66

    49.97

    78.21

    32

    172.96

    63.32

    99.38

  • 範囲クエリ

    パーセンテージ

    SQLテンプレート

    100%

    SELECT SUM(k) FROM test1 k BETWEEN? そして? 
    説明

    デフォルトでは、範囲クエリの長さは100です。

    非主键加密范围查询

    表8 1,000 TPS比較

    同時スレッド数

    完全暗号化データベース機能の無効化

    完全暗号化データベース機能の有効化

    完全に暗号化されたデータベース機能を有効にし、encdb_btree拡張機能を使用

    8

    14.97

    2.83

    7.8

    16

    28.89

    5.53

    15.2

    24

    42.38

    7.15

    20.09

    32

    54.8

    8.75

    24.86

テストの結論

このテストシナリオでは、主キー以外の列でのクエリのパフォーマンスは、主キー列でのクエリのパフォーマンスと同様です。 完全暗号化データベース機能を有効にすると、encdb_btree拡張機能を使用して暗号文データのクエリパフォーマンスを向上させることができます。

使用法の提案

完全暗号化データベース機能を有効にして、機密データ列のみを暗号化することを推奨します。