PostgreSQL yang kompatibel dengan Oracle menyediakan pgbench, yaitu alat uji stres ringan. Alat ini dapat menjalankan pengujian benchmark pada PostgreSQL dengan menjalankan berulang kali urutan pernyataan SQL yang sama di beberapa sesi basis data secara bersamaan. Topik ini menjelaskan cara menggunakan pgbench untuk menguji performa puncak PolarDB for PostgreSQL (Compatible with Oracle) cluster.
Lingkungan pengujian
- Semua pengujian harus dilakukan di wilayah China (Qingdao). Cluster PolarDB Anda harus berada di zona yang sama dengan Instance ECS Anda.
- Tipe Instance ECS: ecs.g5.16xlarge (64 vCPU, 256 GiB).
- Penyimpanan ECS: SSD lokal 200 GiB.
- Tipe jaringan: virtual private cloud (VPC). Cluster PolarDB dan Instance ECS Anda berada dalam VPC yang sama.
- OS: Versi 64-bit CentOS 7.6.
- Jumlah node dalam cluster PolarDB Anda: satu node utama dan satu node baca saja.
Metrik pengujian
- Pertanyaan hanya-baca per detik (QPS)
Jumlah pernyataan SELECT yang dieksekusi per detik saat operasi hanya-baca dilakukan pada basis data.
- Pertanyaan baca-tulis QPS
Jumlah pernyataan SELECT, INSERT, dan UPDATE yang dieksekusi per detik saat operasi baca/tulis dilakukan pada basis data.
Sebelum memulai
- Instal PostgreSQL 11. Jalankan perintah berikut untuk menginstal PostgreSQL 11 pada Instance ECS Anda.
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 - Konfigurasikan parameter untuk cluster PolarDB Anda. Pada cluster PolarDB Anda, konfigurasikan parameter berikut:
log_statement = 'none' enable_hashjoin=off enable_mergejoin=off enable_bitmapscan=offCatatan Anda hanya dapat mengonfigurasi parameter log_statement di konsol PolarDB. Untuk informasi lebih lanjut tentang cara mengonfigurasi parameter cluster, lihat Konfigurasikan parameter cluster.Setelah Anda mengonfigurasi parameter, mulai ulang cluster PolarDB Anda agar konfigurasi berlaku.
Metode pengujian
- Jalankan perintah berikut untuk mengonfigurasi variabel lingkungan:
export PGHOST=<Titik akhir internal cluster PolarDB Anda> export PGPORT=<Nomor port internal cluster PolarDB Anda> export PGDATABASE=postgres export PGUSER=<Nama pengguna yang digunakan untuk masuk ke basis data PolarDB Anda> export PGPASSWORD=<Kata sandi akun PolarDB Anda>Catatan Untuk informasi lebih lanjut tentang cara melihat titik akhir cluster PolarDB for PostgreSQL (Compatible with Oracle), lihat Lihat titik akhir dan port. - Inisialisasi data pengujian berdasarkan ukuran basis data yang ingin Anda uji.
- Jalankan perintah berikut untuk menginisialisasi 1 miliar catatan data:
/usr/pgsql-11/bin/pgbench -i -s 10000 - Jalankan perintah berikut untuk menginisialisasi 500 juta catatan data:
/usr/pgsql-11/bin/pgbench -i -s 5000 - Jalankan perintah berikut untuk menginisialisasi 100 juta catatan data:
/usr/pgsql-11/bin/pgbench -i -s 1000
- Jalankan perintah berikut untuk menginisialisasi 1 miliar catatan data:
- Buat skrip pengujian untuk operasi hanya-baca dan operasi baca-tulis.
- Buat skrip untuk menguji operasi hanya-baca. Tetapkan nama skrip ini menjadi ro.sql.
- Jalankan perintah
vim ro.sql. - Tekan tombol I untuk masuk ke mode edit.
- Di editor, tentukan 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, dan masukkan
:wquntuk menyimpan file dan keluar dari editor.
- Jalankan perintah
- Buat skrip untuk menguji operasi baca-tulis. Tetapkan nama skrip ini menjadi rw.sql.
- Jalankan perintah
vim rw.sql. - Tekan tombol I untuk masuk ke mode edit.
- Di editor, tentukan 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, dan masukkan
:wquntuk menyimpan file dan keluar dari editor.
- Jalankan perintah
- Buat skrip untuk menguji operasi hanya-baca. Tetapkan nama skrip ini menjadi ro.sql.
- Jalankan perintah berikut untuk menguji operasi:
- Jalankan perintah berikut untuk menguji operasi hanya-baca:
88C 710 GB(polar.o.x8.12xlarge) Total volume data: 1 miliar catatan, data panas: 100 juta catatan /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 volume data: 1 miliar catatan, data panas: 500 juta catatan /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 volume data: 1 miliar catatan, data panas: 1 miliar catatan /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 64C 512 GB(polar.o.x8.8xlarge) Total volume data: 1 miliar catatan, data panas: 100 juta catatan /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 volume data: 1 miliar catatan, data panas: 500 juta catatan /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 volume data: 1 miliar catatan, data panas: 1 miliar catatan /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 32C 256 GB(polar.o.x8.4xlarge) Total volume data: 1 miliar catatan, data panas: 100 juta catatan /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 volume data: 1 miliar catatan, data panas: 500 juta catatan /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 volume data: 1 miliar catatan, data panas: 1 miliar catatan /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 16C 128 GB(polar.o.x8.2xlarge) Total volume data: 1 miliar catatan, data panas: 100 juta catatan /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 volume data: 1 miliar catatan, data panas: 500 juta catatan /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 volume data: 1 miliar catatan, data panas: 1 miliar catatan /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 8C 64 GB(polar.o.x8.xlarge) Total volume data: 1 miliar catatan, data panas: 100 juta catatan /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 volume data: 1 miliar catatan, data panas: 500 juta catatan /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 volume data: 1 miliar catatan, data panas: 1 miliar catatan /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 8C 32 GB(polar.o.x4.xlarge) Total volume data: 1 miliar catatan, data panas: 100 juta catatan /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 volume data: 1 miliar catatan, data panas: 500 juta catatan /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 volume data: 1 miliar catatan, data panas: 1 miliar catatan /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 4C 16 GB(polar.o.x4.large) Total volume data: 500 juta catatan, data panas: 50 juta catatan /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 volume data: 500 juta catatan, data panas: 100 juta catatan /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 2C 4 GB(polar.o.x4.medium) Total volume data: 100 juta catatan, data panas: 50 juta catatan /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 volume data: 100 juta catatan, data panas: 100 juta catatan /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 - Jalankan perintah berikut untuk menguji operasi baca-tulis:
88C 710 GB(polar.o.x8.12xlarge) Total volume data: 1 miliar catatan, data panas: 100 juta catatan /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 volume data: 1 miliar catatan, data panas: 500 juta catatan /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 volume data: 1 miliar catatan, data panas: 1 miliar catatan /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 64C 512 GB(polar.o.x8.8xlarge) Total volume data: 1 miliar catatan, data panas: 100 juta catatan /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 volume data: 1 miliar catatan, data panas: 500 juta catatan /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 volume data: 1 miliar catatan, data panas: 1 miliar catatan /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 32C 256 GB(polar.o.x8.4xlarge) Total volume data: 1 miliar catatan, data panas: 100 juta catatan /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 volume data: 1 miliar catatan, data panas: 500 juta catatan /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 volume data: 1 miliar catatan, data panas: 1 miliar catatan /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 16C 128 GB(polar.o.x8.2xlarge) Total volume data: 1 miliar catatan, data panas: 100 juta catatan /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 volume data: 1 miliar catatan, data panas: 500 juta catatan /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 volume data: 1 miliar catatan, data panas: 1 miliar catatan /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 8C 64 GB(polar.o.x8.xlarge) Total volume data: 1 miliar catatan, data panas: 100 juta catatan /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 volume data: 1 miliar catatan, data panas: 500 juta catatan /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 volume data: 1 miliar catatan, data panas: 1 miliar catatan /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 8C 32 GB(polar.o.x4.xlarge) Total volume data: 1 miliar catatan, data panas: 100 juta catatan /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 volume data: 1 miliar catatan, data panas: 500 juta catatan /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 volume data: 1 miliar catatan, data panas: 1 miliar catatan /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 4C 16 GB(polar.o.x4.large) Total volume data: 500 juta catatan, data panas: 50 juta catatan /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 volume data: 500 juta catatan, data panas: 100 juta catatan /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 2C 8 GB(polar.o.x4.medium) Total volume data: 100 juta catatan, data panas: 50 juta catatan /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 volume data: 100 juta catatan, data panas: 100 juta catatan /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- skala: Nilai skala dikalikan dengan 100.000 menunjukkan jumlah catatan data pengujian.
- rentang: Menentukan jumlah catatan data panas.
- -c: Menentukan jumlah koneksi dalam pengujian. Nilai parameter ini tidak menunjukkan jumlah maksimum koneksi yang didukung oleh jenis kluster ini. Untuk informasi lebih lanjut, lihat Spesifikasi node komputasi.
- Jalankan perintah berikut untuk menguji operasi hanya-baca:
Hasil pengujian
| Kode spesifikasi | Jumlah catatan data pengujian | Jumlah catatan data panas (aktif) | Hanya-baca QPS | Baca-tulis QPS |
polar.o.x8.12xlarge 88 core, 710 GB | 1 miliar | 100 juta | 630650.40 | 263746.37 |
| 500 juta | 601262.24 | 247352.76 | ||
| 1 miliar | 589405.79 | 218788.92 | ||
polar.o.x8.8xlarge 64 core, 512 GB | 1 miliar | 100 juta | 592064.65 | 227352.23 |
| 500 juta | 554777.11 | 213343.13 | ||
| 1 miliar | 508404.07 | 203331.35 | ||
polar.o.x8.4xlarge 32 core, 256 GB | 1 miliar | 100 juta | 522182.92 | 213212.34 |
| 500 juta | 509372.85 | 203322.34 | ||
| 1 miliar | 489349.72 | 198531.37 | ||
polar.o.x8.2xlarge 16 core, 128 GB | 1 miliar | 100 juta | 263893.72 | 152863.27 |
| 500 juta | 250221.62 | 129238.26 | ||
| 1 miliar | 239832.62 | 106212.82 | ||
polar.o.x8.xlarge 8 core, 64 GB | 1 miliar | 100 juta | 142836.56 | 69725.29 |
| 500 juta | 133931.69 | 55927.65 | ||
| 1 miliar | 124151.02 | 50786.21 | ||
polar.o.x4.xlarge 8 core, 32 GB | 1 miliar | 100 juta | 126748.07 | 59738.33 |
| 500 juta | 113432.32 | 48372.25 | ||
| 1 miliar | 104232.84 | 49763.64 | ||
polar.o.x4.large 4 core, 16 GB | 500 juta | 50 juta | 76238.89 | 47388.27 |
| 100 juta | 69892.83 | 43638.85 | ||
polar.o.x4.medium 2 core, 8 GB | 100 juta | 50 juta | 28320.70 | 18152.63 |
| 100 juta | 30792.19 | 19111.15 |
- Kode spesifikasi: kode spesifikasi PolarDB for PostgreSQL (Compatible with Oracle).
- Jumlah catatan data pengujian: jumlah catatan data untuk pengujian.
- Jumlah catatan data panas (aktif): jumlah catatan untuk kueri dan pembaruan perintah SQL dalam pengujian.
- Hanya-baca QPS: jumlah permintaan hanya-baca yang diproses per detik.
- Baca-tulis QPS: jumlah permintaan baca/tulis yang diproses per detik.







