PostgreSQL menyertakan pgbench, sebuah alat uji stres ringan untuk menjalankan pengujian benchmark pada PolarDB for PostgreSQL (Compatible with Oracle). Alat ini menjalankan berulang kali perintah SQL yang sama dalam sesi database konkuren. Topik ini menjelaskan cara menggunakan pgbench untuk menguji kinerja maksimum kluster PolarDB for PostgreSQL (Compatible with Oracle).
Lingkungan staging
- Semua pengujian dilakukan di wilayah China (Qingdao). Kluster PolarDB dan instance ECS berada di zona yang sama.
- Tipe instans ECS: ecs.g5.16xlarge (64-core 256 GiB).
- Spesifikasi penyimpanan ECS: disk lokal SSD 200 GiB.
- Tipe jaringan: Virtual Private Cloud (VPC). Kluster PolarDB dan instance ECS berada di VPC yang sama.
- Sistem operasi: CentOS 7.6 x64.
- PolarDB: satu node primary dan satu node read-only.
Metrik pengujian
- Queries Per Second (QPS) read-only
Jumlah pernyataan SQL read-only (hanya SELECT) yang dieksekusi per detik.
- QPS read/write
Jumlah pernyataan SQL read/write (INSERT, SELECT, dan UPDATE) yang dieksekusi per detik.
Persiapan
- Instal alat pengujian Jalankan perintah berikut untuk menginstal PostgreSQL 11 pada instance ECS.
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql11 - Modifikasi parameter kluster PolarDB harus dimodifikasi sebagai berikut:
log_statement = 'none' enable_hashjoin=off enable_mergejoin=off enable_bitmapscan=offCatatan Saat ini, hanya parameter log_statement yang dapat dimodifikasi di Konsol. Untuk informasi selengkapnya tentang cara mengatur parameter kluster, lihat Set cluster parameters.Setelah Anda memodifikasi parameter konfigurasi, restart kluster agar perubahan diterapkan.
Metode pengujian
- Jalankan perintah berikut untuk mengonfigurasi variabel lingkungan:
export PGHOST=<Private endpoint of the PolarDB cluster> export PGPORT=<Private port of the PolarDB cluster> export PGDATABASE=postgres export PGUSER=<Username for the PolarDB database> export PGPASSWORD=<Password for the PolarDB user>Catatan Untuk informasi selengkapnya tentang cara melihat endpoint kluster PolarDB for PostgreSQL (Compatible with Oracle), lihat View endpoints and ports. - Inisialisasi data pengujian berdasarkan ukuran database tujuan. Perintahnya sebagai berikut:
- Inisialisasi 1 miliar entri data:
/usr/pgsql-11/bin/pgbench -i -s 10000 - Inisialisasi 500 juta entri data:
/usr/pgsql-11/bin/pgbench -i -s 5000 - Inisialisasi 100 juta entri data:
/usr/pgsql-11/bin/pgbench -i -s 1000
- Inisialisasi 1 miliar entri data:
- Buat skrip pengujian read-only dan read/write.
- Buat skrip read-only ro.sql:
- Jalankan perintah
vim ro.sql. - Tekan tombol I untuk masuk ke mode edit.
- Masukkan konten berikut:
\set aid random_gaussian(1, :range, 10.0) SELECT abalance FROM pgbench_accounts WHERE aid = :aid; - Tekan tombol Esc untuk keluar dari mode edit, lalu masukkan
:wquntuk menyimpan dan keluar.
- Jalankan perintah
- Buat skrip read/write rw.sql:
- Jalankan perintah
vim rw.sql. - Tekan tombol I untuk masuk ke mode edit.
- Masukkan konten berikut:
\set aid random_gaussian(1, :range, 10.0) \set bid random(1, 1 * :scale) \set tid random(1, 10 * :scale) \set delta random(-5000, 5000) BEGIN; UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid; SELECT abalance FROM pgbench_accounts WHERE aid = :aid; UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid; UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid; INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); END; - Tekan tombol Esc untuk keluar dari mode edit, lalu masukkan
:wquntuk menyimpan dan keluar.
- Jalankan perintah
- Buat skrip read-only ro.sql:
- Jalankan perintah berikut untuk melakukan pengujian:
- Pengujian read-only:
88-core 710 GB (polar.o.x8.12xlarge) Total data volume: 1 billion, Hot data: 100 million /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 256 -j 128 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion, Hot data: 500 million /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 256 -j 128 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion, Hot data: 1 billion /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 256 -j 128 -T 120 -D scale=10000 -D range=1000000000 64-core 512 GB (polar.o.x8.8xlarge) Total data volume: 1 billion, Hot data: 100 million /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 256 -j 128 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion, Hot data: 500 million /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 256 -j 128 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion, Hot data: 1 billion /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 256 -j 128 -T 120 -D scale=10000 -D range=1000000000 32-core 256 GB (polar.o.x8.4xlarge) Total data volume: 1 billion, Hot data: 100 million /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion, Hot data: 500 million /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion, Hot data: 1 billion /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=1000000000 16-core 128 GB (polar.o.x8.2xlarge) Total data volume: 1 billion, Hot data: 100 million /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion, Hot data: 500 million /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion, Hot data: 1 billion /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=1000000000 8-core 64 GB (polar.o.x8.xlarge) Total data volume: 1 billion, Hot data: 100 million /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 64 -j 32 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion, Hot data: 500 million /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 64 -j 32 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion, Hot data: 1 billion /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 64 -j 32 -T 120 -D scale=10000 -D range=1000000000 8-core 32 GB (polar.o.x4.xlarge) Total data volume: 1 billion, Hot data: 100 million /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 64 -j 32 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion, Hot data: 500 million /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 64 -j 32 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion, Hot data: 1 billion /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 64 -j 32 -T 120 -D scale=10000 -D range=1000000000 4-core 16 GB (polar.o.x4.large) Total data volume: 500 million, Hot data: 50 million /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 32 -j 32 -T 120 -D scale=5000 -D range=50000000 Total data volume: 500 million, Hot data: 100 million /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 32 -j 32 -T 120 -D scale=5000 -D range=100000000 2-core 4 GB (polar.o.x4.medium) Total data volume: 100 million, Hot data: 50 million /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 16 -j 32 -T 120 -D scale=1000 -D range=50000000 Total data volume: 100 million, Hot data: 100 million /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 16 -j 32 -T 120 -D scale=1000 -D range=100000000 - Pengujian read/write:
88-core 710 GB (polar.o.x8.12xlarge) Total data volume: 1 billion, Hot data: 100 million /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 256 -j 256 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion, Hot data: 500 million /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 256 -j 256 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion, Hot data: 1 billion /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 256 -j 256 -T 120 -D scale=10000 -D range=1000000000 64-core 512 GB (polar.o.x8.8xlarge) Total data volume: 1 billion, Hot data: 100 million /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 256 -j 256 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion, Hot data: 500 million /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 256 -j 256 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion, Hot data: 1 billion /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 256 -j 256 -T 120 -D scale=10000 -D range=1000000000 32-core 256 GB (polar.o.x8.4xlarge) Total data volume: 1 billion, Hot data: 100 million /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion, Hot data: 500 million /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion, Hot data: 1 billion /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=1000000000 16-core 128 GB (polar.o.x8.2xlarge) Total data volume: 1 billion, Hot data: 100 million /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion, Hot data: 500 million /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion, Hot data: 1 billion /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=1000000000 8-core 64 GB (polar.o.x8.xlarge) Total data volume: 1 billion, Hot data: 100 million /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion, Hot data: 500 million /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion, Hot data: 1 billion /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=1000000000 8-core 32 GB (polar.o.x4.xlarge) Total data volume: 1 billion, Hot data: 100 million /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 32 -j 32 -T 120 -D scale=10000 -D range=100000000 Total data volume: 1 billion, Hot data: 500 million /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 32 -j 32 -T 120 -D scale=10000 -D range=500000000 Total data volume: 1 billion, Hot data: 1 billion /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 32 -j 32 -T 120 -D scale=10000 -D range=1000000000 4-core 16 GB (polar.o.x4.large) Total data volume: 500 million, Hot data: 50 million /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 16 -j 16 -T 120 -D scale=5000 -D range=50000000 Total data volume: 500 million, Hot data: 100 million /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 16 -j 16 -T 120 -D scale=5000 -D range=100000000 2-core 8 GB (polar.o.x4.medium) Total data volume: 100 million, Hot data: 50 million /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 8 -j 8 -T 120 -D scale=1000 -D range=50000000 Total data volume: 100 million, Hot data: 100 million /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 8 -j 8 -T 120 -D scale=1000 -D range=100000000
Catatan- scale: Nilai ini dikalikan dengan 100.000 untuk merepresentasikan volume data pengujian.
- range: Volume data aktif.
- -c: Jumlah koneksi pengujian konkuren. Nilai ini tidak merepresentasikan jumlah koneksi maksimum untuk tipe instans. Untuk informasi selengkapnya tentang jumlah koneksi maksimum, lihat Compute node specifications.
- Pengujian read-only:
Hasil pengujian
| Spesifikasi | Volume data pengujian | Active Data Volume (Hot) | QPS read-only | QPS read/write |
polar.o.x8.12xlarge 88-core 710 GB | 1 miliar | 100 juta | 630.650,40 | 263.746,37 |
| 500 juta | 601.262,24 | 247.352,76 | ||
| 1 miliar | 589.405,79 | 218.788,92 | ||
polar.o.x8.8xlarge 64-core 512 GB | 1 miliar | 100 juta | 592.064,65 | 227.352,23 |
| 500 juta | 554.777,11 | 213.343,13 | ||
| 1 miliar | 508.404,07 | 203.331,35 | ||
polar.o.x8.4xlarge 32-core 256 GB | 1 miliar | 100 juta | 522.182,92 | 213.212,34 |
| 500 juta | 509.372,85 | 203.322,34 | ||
| 1 miliar | 489.349,72 | 198.531,37 | ||
polar.o.x8.2xlarge 16-core 128 GB | 1 miliar | 100 juta | 263.893,72 | 152.863,27 |
| 500 juta | 250.221,62 | 129.238,26 | ||
| 1 miliar | 239.832,62 | 106.212,82 | ||
polar.o.x8.xlarge 8-core 64 GB | 1 miliar | 100 juta | 142.836,56 | 69.725,29 |
| 500 juta | 133.931,69 | 55.927,65 | ||
| 1 miliar | 124.151,02 | 50.786,21 | ||
polar.o.x4.xlarge 8-core 32 GB | 1 miliar | 100 juta | 126.748,07 | 59.738,33 |
| 500 juta | 113.432,32 | 48.372,25 | ||
| 1 miliar | 104.232,84 | 49.763,64 | ||
polar.o.x4.large 4-core 16 GB | 500 juta | 50 juta | 76.238,89 | 47.388,27 |
| 100 juta | 69.892,83 | 43.638,85 | ||
polar.o.x4.medium 2-core 8 GB | 100 juta | 50 juta | 28.320,70 | 18.152,63 |
| 100 juta | 30.792,19 | 19.111,15 |
- Spesifikasi: Kode tipe instans PolarDB for PostgreSQL (Compatible with Oracle).
- Volume data pengujian: Jumlah catatan dalam ronde pengujian ini.
- Volume data hot (aktif): Jumlah catatan yang digunakan oleh pernyataan SQL kueri dan update dalam ronde pengujian ini.
- QPS read-only: Jumlah kueri read-only yang dieksekusi per detik.
- QPS read/write: Jumlah kueri read/write yang dieksekusi per detik.







