All Products
Search
Document Center

PolarDB:Makalah putih kinerja

Last Updated:Aug 27, 2026

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.
Catatan CentOS 6 tidak mendukung PostgreSQL 11.

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=off
    Catatan 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

  1. 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.
  2. 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
  3. Buat skrip pengujian read-only dan read/write.
    • Buat skrip read-only ro.sql:
      1. Jalankan perintah vim ro.sql.
      2. Tekan tombol I untuk masuk ke mode edit.
      3. Masukkan konten berikut:
        \set aid random_gaussian(1, :range, 10.0)
        SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
      4. Tekan tombol Esc untuk keluar dari mode edit, lalu masukkan :wq untuk menyimpan dan keluar.
    • Buat skrip read/write rw.sql:
      1. Jalankan perintah vim rw.sql.
      2. Tekan tombol I untuk masuk ke mode edit.
      3. 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;
      4. Tekan tombol Esc untuk keluar dari mode edit, lalu masukkan :wq untuk menyimpan dan keluar.
  4. 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.

Hasil pengujian

SpesifikasiVolume data pengujianActive Data Volume (Hot)QPS read-onlyQPS read/write

polar.o.x8.12xlarge

88-core 710 GB

1 miliar100 juta630.650,40263.746,37
500 juta601.262,24247.352,76
1 miliar589.405,79218.788,92

polar.o.x8.8xlarge

64-core 512 GB

1 miliar100 juta592.064,65227.352,23
500 juta554.777,11213.343,13
1 miliar508.404,07203.331,35

polar.o.x8.4xlarge

32-core 256 GB

1 miliar100 juta522.182,92213.212,34
500 juta509.372,85203.322,34
1 miliar489.349,72198.531,37

polar.o.x8.2xlarge

16-core 128 GB

1 miliar100 juta263.893,72152.863,27
500 juta250.221,62129.238,26
1 miliar239.832,62106.212,82

polar.o.x8.xlarge

8-core 64 GB

1 miliar100 juta142.836,5669.725,29
500 juta133.931,6955.927,65
1 miliar124.151,0250.786,21

polar.o.x4.xlarge

8-core 32 GB

1 miliar100 juta126.748,0759.738,33
500 juta113.432,3248.372,25
1 miliar104.232,8449.763,64

polar.o.x4.large

4-core 16 GB

500 juta50 juta76.238,8947.388,27
100 juta69.892,8343.638,85

polar.o.x4.medium

2-core 8 GB

100 juta50 juta28.320,7018.152,63
100 juta30.792,1919.111,15
Catatan
  • 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.
2c8g4c16g8c32g8c64g16c128g32c256g64c512g88c710g