全部产品
Search
文档中心

PolarDB:Makalah Putih Performa

更新时间:Jul 02, 2025

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

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

  1. 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.
  2. 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
  3. 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.
      1. Jalankan perintah vim ro.sql.
      2. Tekan tombol I untuk masuk ke mode edit.
      3. Di editor, tentukan 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, dan masukkan :wq untuk menyimpan file dan keluar dari editor.
    • Buat skrip untuk menguji operasi baca-tulis. Tetapkan nama skrip ini menjadi rw.sql.
      1. Jalankan perintah vim rw.sql.
      2. Tekan tombol I untuk masuk ke mode edit.
      3. 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;
      4. Tekan tombol Esc untuk keluar dari mode edit, dan masukkan :wq untuk menyimpan file dan keluar dari editor.
  4. 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.

Hasil pengujian

Kode spesifikasiJumlah catatan data pengujianJumlah catatan data panas (aktif)Hanya-baca QPSBaca-tulis QPS

polar.o.x8.12xlarge

88 core, 710 GB

1 miliar100 juta630650.40263746.37
500 juta601262.24247352.76
1 miliar589405.79218788.92

polar.o.x8.8xlarge

64 core, 512 GB

1 miliar100 juta592064.65227352.23
500 juta554777.11213343.13
1 miliar508404.07203331.35

polar.o.x8.4xlarge

32 core, 256 GB

1 miliar100 juta522182.92213212.34
500 juta509372.85203322.34
1 miliar489349.72198531.37

polar.o.x8.2xlarge

16 core, 128 GB

1 miliar100 juta263893.72152863.27
500 juta250221.62129238.26
1 miliar239832.62106212.82

polar.o.x8.xlarge

8 core, 64 GB

1 miliar100 juta142836.5669725.29
500 juta133931.6955927.65
1 miliar124151.0250786.21

polar.o.x4.xlarge

8 core, 32 GB

1 miliar100 juta126748.0759738.33
500 juta113432.3248372.25
1 miliar104232.8449763.64

polar.o.x4.large

4 core, 16 GB

500 juta50 juta76238.8947388.27
100 juta69892.8343638.85

polar.o.x4.medium

2 core, 8 GB

100 juta50 juta28320.7018152.63
100 juta30792.1919111.15
Catatan
  • 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.
2c8g4c16g8c32g8c64g16c128g32c256g64c512g88c710g