日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

全密態數據庫性能測試報告

本文介紹全密態數據庫在不同場景中對系統性能的影響,有助于您評估和選擇加密方案。

測試環境

配置項

ECS實例(測試客戶端部署在ECS實例上)

RDS PostgreSQL實例

說明

地域及可用區

華東2(上海)可用區L

華東2(上海)可用區L

本測試在同一地域及可用區

網絡類型

專有網絡VPC

專有網絡VPC

本測試在同一VPC

CPU和內存

64核 128GB

32核 64GB

不涉及

實例規格族

計算型 c7

安全增強型

RDS需要選擇安全增強型規格

實例規格

ecs.c7.16xlarge

pg.x2t.4xlarge.2c

不涉及

存儲類型

ESSD云盤

ESSD云盤 PL1

不涉及

實例/鏡像版本

Alibaba Cloud Linux 3.2104 64位

  • 大版本:RDS PostgreSQL 13

  • 小版本:20230830

不涉及

測試工具(sysbench)

sysbench是一個跨平臺且支持多線程的模塊化基準開源測試工具,用于評估系統在運行高負載的數據庫時相關核心參數的性能表現。sysbench的更多信息及使用方法,請參見sysbench文檔

測試指標

  • 每秒執行事務數TPS(Transactions Per Second):數據庫每秒執行的事務數,以COMMIT成功次數為準。

  • 事務處理平均延遲(Average Latency):數據庫執行一條事務的平均耗時,單位為毫秒(ms)。

測試表結構

sysbench的默認表結構如下:

CREATE TABLE test1(
  id INTEGER NOT NULL,
  k INTEGER DEFAULT '0' NOT NULL,
  c CHAR(120) DEFAULT '' NOT NULL,
  pad CHAR(60) DEFAULT '' NOT NULL,
  PRIMARY KEY (id)
);
CREATE INDEX k_1 on test1(k);

測試步驟

本測試對表中的列進行加密,分析全密態數據庫不同場景下的性能。

  1. ECS實例安裝PostgreSQL客戶端。請參見官方文檔

  2. 打開PostgreSQL命令行工具連接RDS PostgreSQL數據庫。

    psql -h <數據庫連接地址> -U <用戶名> -p <端口號> -d postgres
    說明
  3. 創建測試數據庫。

    CREATE DATABASE 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,
      pad enc_text DEFAULT '\x9d39006e340b9cffb37a989ca544e69e6e9c0bdb0b6500a91dcc433dc5df0496' NOT NULL,
      PRIMARY KEY (id)
    );
    CREATE INDEX k_1 on test1(k);

    加密所有列

    此場景對主鍵列也進行加密。

    CREATE TABLE test1(
      id enc_int4 NOT NULL,
      k enc_int4 DEFAULT '\xa509008855508aade16ec573d21e6aca47ab5e490d7044e748161a6635a5d939c5bbbee4' NOT NULL,
      c enc_text DEFAULT '\x9d39006e340b9cffb37a989ca544e69e6e9c0bdb0b6500a91dcc433dc5df0496' NOT NULL,
      pad enc_text DEFAULT '\x9d39006e340b9cffb37a989ca544e69e6e9c0bdb0b6500a91dcc433dc5df0496' NOT NULL,
      PRIMARY KEY (id)
    );
    CREATE INDEX k_1 on test1(k);
  5. 退出數據庫,使用sysbench工具加載測試數據。

    說明

    本測試中,使用sysbench加載32個表,其中每個表包含一百萬行記錄。

    sysbench --db-driver=pgsql \
      --pgsql-host=[database server host] \
      --pgsql-port=[database server port] \
      --pgsql-user=[database user name] \
      --pgsql-password=[database user password] \
      --pgsql-db=testdb \
      --auto_inc=false \
      --table_size=1000000 \
      --tables=32 \
      --threads=32 \
      --time=600 \
      --pg_use_encrypt=[true or false] \
      oltp_common prepare
  6. 執行自定義測試腳本。

    sysbench --db-driver=pgsql \
      --pgsql-host=[database server host] \
      --pgsql-port=[database server port] \
      --pgsql-user=[database user name] \
      --pgsql-password=[database user password] \
      --pgsql-db=testdb \
      --table_size=1000000 \
      --tables=32 \
      --threads=XXX \
      --time=600 \
      --report-interval=1 \
      --pg_use_encrypt=[true or false] \
      [lua script name] run
  7. 清理數據。

    sysbench --db-driver=pgsql \
      --pgsql-host=[database server host] \
      --pgsql-port=[database server port] \
      --pgsql-user=[database user name] \
      --pgsql-password=[database user password] \
      --pgsql-db=testdb \
      --tables=32 \
      oltp_common cleanup

測試場景1:主鍵不加密,其他列加密

說明
  • 本次測試的每個結果均為運行10次測試的TPS和處理延遲的平均值,其中每次測試執行10分鐘。

  • 性能測試結果包含了在客戶端對返回的加密字段進行解密的性能損耗。

  • 測試結果圖例中柱形圖表示每秒執行數TPS,折線圖表示事務處理平均延遲。

測試數據

  • 點查詢性能

    比例

    SQL模板

    100%

    說明

    比例指一條事務中執行SQL模板中定義的SQL所占的比例。

    SELECT c FROM test1 WHERE id=?;
    場景1點查詢
    表 1. 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 ? AND ?;
    說明

    范圍查詢的長度默認為100。

    場景1范圍查詢
    表 2. 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) VALUES (?, ?, ?, ?);
    場景1寫性能
    表 3. 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. 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 ? AND ?;
    說明

    范圍查詢的長度默認為100。

    場景2范圍查詢
    表 5. 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) VALUES (?, ?, ?, ?);
    場景2寫性能
    表 6. 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相關指令的頻率更高,總代價更大,性能損失較大。

測試場景3:非主鍵列查詢

說明
  • 本次測試的每個結果均為運行10次測試的TPS和處理延遲的平均值,其中每次測試執行10分鐘。

  • 性能測試結果包含了在客戶端對返回的加密字段進行解密的性能損耗。

  • 測試結果圖例中柱形圖表示每秒執行數TPS,折線圖表示事務處理平均延遲。

本測試場景使用了阿里云推出的encdb_btree插件,能夠有效提高全密態數據庫密文索引相關操作的效率。更多信息,請參見加速密文索引(encdb_btree)

測試數據

  • 點查詢

    比例

    SQL模板

    100%

    SELECT c FROM test1 WHERE k=?;
    非主鍵查詢
    表 7. 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 WHERE k BETWEEN ? AND ?
    說明

    范圍查詢的長度默認為100。

    非主鍵加密范圍查詢
    表 8. 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插件進一步提升密文數據的查詢性能。

全密態數據庫擴展使用建議

建議開啟全密態數據庫擴展后,只對關鍵的敏感數據列加密。