Topik ini menjelaskan dampak fitur database Always Confidential terhadap kinerja sistem dalam berbagai skenario, membantu Anda mengevaluasi dan memilih solusi enkripsi.
Lingkungan pengujian
Item konfigurasi | Instance ECS tempat klien pengujian ditempatkan | Instance RDS | Deskripsi |
Wilayah dan zona | Shanghai Zone L | Shanghai Zone L | Pengujian dilakukan di wilayah dan zona yang sama. |
Tipe jaringan | Jaringan pribadi virtual (VPC) | VPC | Pengujian dilakukan di VPC yang sama. |
Jumlah core CPU dan kapasitas memori | 64 core, 128 GB | 32 core, 64 GB | N/A |
Keluarga instans | Tipe komputasi dioptimalkan Type c7 | Keluarga instans yang ditingkatkan keamanannya | Instance RDS harus termasuk dalam keluarga instans yang ditingkatkan keamanannya. |
Tipe instans | ecs.c7.16xlarge | pg.x2t.4xlarge.2c | N/A |
Tipe penyimpanan | SSD Enhanced (ESSD) | ESSD PL1 | N/A |
Instans atau versi gambar | Alibaba Cloud Linux 3.2104 64-bit |
| N/A |
Alat pengujian (sysbench)
Sysbench adalah alat benchmark modular, lintas platform, dan multi-threaded yang digunakan untuk mengevaluasi kinerja sistem database dengan beban tinggi berdasarkan metrik inti. Untuk informasi lebih lanjut tentang sysbench dan cara menggunakannya, lihat dokumentasi sysbench.
Metrik kinerja
Transaksi per detik (TPS): jumlah transaksi yang berhasil dikomit pada instance RDS per detik.
Latensi rata-rata: waktu rata-rata yang diperlukan oleh instance RDS untuk mengeksekusi transaksi. Unit: milidetik.
Skema pengujian
Secara default, sysbench menggunakan skema tabel berikut:
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);Prosedur pengujian
Dalam pengujian ini, kolom tabel dienkripsi untuk menganalisis dampak fitur database Always Confidential terhadap kinerja instance RDS dalam berbagai skenario.
Instal klien PostgreSQL pada instance ECS. Untuk informasi lebih lanjut, lihat Dokumentasi Resmi.
Buka alat baris perintah PostgreSQL (CLI) dan jalankan perintah berikut untuk terhubung ke instance RDS:
psql -h <Endpoint of the RDS instance> -U <Username> -p <Port number> -d postgresCatatanUntuk informasi lebih lanjut tentang cara mendapatkan endpoint dan nomor port instance RDS, lihat Lihat dan Ubah Endpoint Internal dan Publik serta Nomor Port Instance ApsaraDB RDS for PostgreSQL.
Untuk informasi lebih lanjut tentang cara mendapatkan nama pengguna, lihat Buat Akun.
Anda juga dapat menggunakan Data Management (DMS) untuk terhubung ke instance RDS di konsol ApsaraDB RDS. Untuk informasi lebih lanjut, lihat Gunakan DMS untuk Masuk ke Instance ApsaraDB RDS for PostgreSQL.
Buat database uji.
CREATE DATABASE testdb; \c testdbBuat tabel terenkripsi dan enkripsi kolom berdasarkan skenario yang berbeda.
Skenario
Deskripsi
Contoh Pernyataan SQL
Kolom kunci utama tidak dienkripsi. Kolom lainnya dienkripsi.
Dalam sebagian besar skenario,
idadalah bidang auto-increment dan tidak relevan dengan bisnis. Dalam skenario pengujian ini, kolomidtidak dienkripsi. Kolom lainnya dienkripsi sebagai informasi sensitif.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);Semua kolom dienkripsi.
Dalam skenario pengujian ini, kolom kunci utama juga dienkripsi.
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);Keluar dari instance RDS dan gunakan sysbench untuk memuat data uji.
CatatanPengujian ini menggunakan sysbench untuk memuat 32 tabel. Setiap tabel berisi satu juta baris rekaman.
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 prepareJalankan skrip pengujian kustom.
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] runsysbench --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
Skenario pengujian 1: Kolom kunci utama tidak dienkripsi. Kolom lainnya dienkripsi.
Setiap hasil pengujian ini adalah rata-rata TPS dan latensi pemrosesan dari 10 pengujian, masing-masing dijalankan selama 10 menit.
Hasil pengujian juga menunjukkan kerugian kinerja yang disebabkan oleh dekripsi bidang yang dikembalikan di sisi klien.
Dalam hasil pengujian, bagan kolom menunjukkan TPS, dan bagan garis menunjukkan latensi pemrosesan transaksi rata-rata.
Data pengujian
Kinerja Query Titik
Persentase
Template SQL
100%
CatatanPersentase menunjukkan proporsi pernyataan SQL yang didefinisikan dalam template SQL dan dieksekusi dalam transaksi terhadap total jumlah pernyataan SQL yang dieksekusi dalam transaksi.
SELECT c FROM test1 WHERE id=?;
Tabel 1 Perbandingan 1.000 TPS
Jumlah thread konkuren
Fitur database Always confidential dinonaktifkan
Fitur database Always confidential diaktifkan
Kerugian kinerja
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%
Kinerja Query Rentang
Persentase
Template SQL
100%
SELECT SUM(k) FROM test1 WHERE id BETWEEN ? AND ?;CatatanSecara default, panjang query rentang adalah 100.

Tabel 2 Perbandingan 1.000 TPS
Jumlah thread konkuren
Fitur database Always confidential dinonaktifkan
Fitur database Always confidential diaktifkan
Kerugian kinerja
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%
Kinerja Penulisan
Persentase
Template 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 (?, ?, ?, ?);
Tabel 3 Perbandingan 1.000 TPS
Jumlah thread konkuren
Fitur database Always confidential dinonaktifkan
Fitur database Always confidential diaktifkan
Kerugian kinerja
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%
Kesimpulan pengujian
Dalam skenario pengujian ini, jika Anda mengaktifkan fitur database Always Confidential, kerugian kinerja rendah.
Skenario pengujian 2: Semua kolom dienkripsi.
Setiap hasil pengujian ini adalah rata-rata TPS dan latensi pemrosesan dari 10 pengujian, masing-masing dijalankan selama 10 menit.
Hasil pengujian juga menunjukkan kerugian kinerja yang disebabkan oleh dekripsi bidang yang dikembalikan di sisi klien.
Dalam hasil pengujian, bagan kolom menunjukkan TPS, dan bagan garis menunjukkan latensi pemrosesan transaksi rata-rata.
Data pengujian
Kinerja Query Titik
Persentase
Template SQL
100%
SELECT c FROM test1 WHERE id=?;
Tabel 4 Perbandingan 1.000 TPS
Jumlah thread konkuren
Fitur database Always confidential dinonaktifkan
Fitur database Always confidential diaktifkan
Kerugian kinerja
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%
Kinerja Query Rentang
Persentase
Template SQL
100%
SELECT SUM(k) FROM test1 WHERE id BETWEEN ? AND ?;CatatanSecara default, panjang query rentang adalah 100.

Tabel 5 Perbandingan 1.000 TPS
Jumlah thread konkuren
Fitur database Always confidential dinonaktifkan
Fitur database Always confidential diaktifkan
Kerugian kinerja
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%
Kinerja Penulisan
Persentase
Template 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 (?, ?, ?, ?);
Tabel 6 Perbandingan 1.000 TPS
Jumlah thread konkuren
Fitur database Always confidential dinonaktifkan
Fitur database Always confidential diaktifkan
Kerugian kinerja
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%
Kesimpulan pengujian
Dalam skenario pengujian ini, Anda harus mendekripsi kolom di sisi klien. Selain itu, perintah terkait Intel SGX lebih sering dijalankan untuk meminta indeks kolom terenkripsi. Akibatnya, total biaya dan kerugian kinerja lebih tinggi daripada Skenario Pengujian 1.
Skenario pengujian 3: Kolom non-kunci utama di-query.
Setiap hasil pengujian ini adalah rata-rata TPS dan latensi pemrosesan dari 10 pengujian, masing-masing dijalankan selama 10 menit.
Hasil pengujian juga menunjukkan kerugian kinerja yang disebabkan oleh dekripsi bidang yang dikembalikan di sisi klien.
Dalam hasil pengujian, bagan kolom menunjukkan TPS, dan bagan garis menunjukkan latensi pemrosesan transaksi rata-rata.
Dalam skenario pengujian ini, ekstensi encdb_btree yang disediakan oleh Alibaba Cloud digunakan untuk meningkatkan efisiensi operasi terkait indeks ciphertext dalam database Always Confidential. Untuk informasi lebih lanjut, lihat Gunakan Ekstensi encdb_btree.
Data pengujian
Query Titik
Persentase
Template SQL
100%
SELECT c FROM test1 WHERE k=?;
Tabel 7 Perbandingan 1.000 TPS
Jumlah thread konkuren
Fitur database Always confidential dinonaktifkan
Fitur database Always confidential diaktifkan
Fitur database Always confidential diaktifkan dan ekstensi encdb_btree digunakan
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
Query Rentang
Persentase
Template SQL
100%
SELECT SUM(k) FROM test1 WHERE k BETWEEN ? AND ?CatatanSecara default, panjang query rentang adalah 100.

Tabel 8 Perbandingan 1.000 TPS
Jumlah thread konkuren
Fitur database Always confidential dinonaktifkan
Fitur database Always confidential diaktifkan
Fitur database Always confidential diaktifkan dan ekstensi encdb_btree digunakan
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
Kesimpulan pengujian
Dalam skenario pengujian ini, kinerja query pada kolom non-kunci utama mirip dengan kinerja query pada kolom kunci utama. Setelah fitur database Always Confidential diaktifkan, Anda dapat menggunakan ekstensi encdb_btree untuk meningkatkan kinerja query data ciphertext.
Saran penggunaan
Kami merekomendasikan agar Anda mengaktifkan fitur database Always Confidential hanya untuk mengenkripsi kolom data sensitif.