All Products
Search
Document Center

PolarDB:Laporan Pengujian Kinerja

Last Updated:Mar 18, 2026

Laporan ini menyajikan hasil pengujian benchmark kinerja untuk PolarDB for PostgreSQL pada berbagai beban kerja tipikal berdasarkan standar de facto Yahoo! Cloud Serving Benchmark (YCSB). Laporan ini menyediakan data kuantitatif untuk membantu pemilihan teknologi, desain aplikasi, dan perencanaan kapasitas. Hasil pengujian menunjukkan kemampuan baca-tulis yang stabil dan berkinerja tinggi pada berbagai skala data, serta performa luar biasa dalam skenario kueri titik (Point Lookup). Dengan volume data 100 GB, kinerja puncak mencapai 109.808 Operasi Per Detik (OPS).

Rangkuman hasil pengujian

Tabel berikut menunjukkan kinerja puncak (OPS) untuk setiap model pengujian pada berbagai volume data.

Skenario pengujian

Volume data 1 GB (OPS)

Volume data 10 GB (OPS)

Volume data 100 GB (OPS)

Volume data 1 TB (OPS)

100% tulis (Insert)

41.430

39.861

33.357

36.248

100% pembaruan (Update)

44.177

41.486

38.062

30.782

100% dibaca (Dibaca)

80.573

82.856

109.808

75.108

50% baca + 50% pembaruan

45.010

42.962

39.805

32.021

100% pemindaian rentang (Scan)

1.073

1.089

1.075

922

Catatan

Hasil di atas merupakan nilai kinerja puncak yang diperoleh dari pengujian pada berbagai tingkat konkurensi.

Metode dan lingkungan pengujian

Konfigurasi lingkungan

Komponen

Spesifikasi dan konfigurasi

Kluster pengujian (PolarDB)

  • Jumlah kluster: 1

  • Versi kernel: PostgreSQL 14

  • Edisi: Enterprise Edition

  • Spesifikasi node: Dedicated, 16-core 64 GB

Klien pengujian stres (ECS)

  • Jumlah klien: 1

  • Spesifikasi node: 16-core 64 GB

  • Sistem operasi: Alibaba Cloud Linux 3.2104 LTS 64-bit

Wilayah penyebaran

Beijing, Zona K

Alat benchmark

Model beban kerja

Lima skenario bisnis tipikal disimulasikan dengan mengonfigurasi CoreWorkload YCSB. Model data pengujian menggunakan catatan yang masing-masing berisi 10 bidang. Setiap bidang memiliki nilai sepanjang 100 byte, sehingga setiap catatan berukuran sekitar 1 KB.

Beban Kerja YCSB

Deskripsi skenario

Konfigurasi parameter inti

workload_insert_only

100% tulis

insertproportion=1.0

workload_update_only

100% pembaruan

updateproportion=1.0

workload_read_only

100% kueri titik

readproportion=1.0

workload_read_update

50% baca + 50% pembaruan

readproportion=0.5, updateproportion=0.5

workload_scan_only

100% kueri rentang

scanproportion=1.0

Lampiran: Langkah-langkah pengujian

Lampiran ini menjelaskan langkah-langkah untuk mereproduksi pengujian kinerja. Anda dapat menggunakan langkah-langkah ini untuk otentikasi sekunder atau pengujian khusus.

1. Konfigurasi YCSB

Sebelum menjalankan pengujian, Anda harus mengonfigurasi klien DynamoDB YCSB.

  1. Konfigurasi kredensial identitas

    Edit file dynamodb/conf/AWSCredentials.properties. Masukkan kredensial identitas untuk akun DynamoDB khusus yang telah Anda buat di PolarDB console Buat akun DynamoDB khusus.

    # Nama akun adalah ID AccessKey
    accessKey = <YOUR_ACCESS_KEY_ID>
    
    # Kunci rahasia
    secretKey = <YOUR_SECRET_ACCESS_KEY>
  2. Konfigurasi properti koneksi

    Edit file dynamodb/conf/dynamodb.properties untuk menentukan informasi koneksi ke kluster PolarDBKonfigurasi Titik akhir DynamoDB.

    # Jalur mutlak file autentikasi
    dynamodb.awsCredentialsFile = /path/to/your/AWSCredentials.properties
    
    # Buat tabel usertable di kluster terlebih dahulu. Contoh ini membuat tabel usertable hanya dengan kunci partisi bernama pk.
    dynamodb.primaryKey = pk
    
    # Titik akhir DynamoDB untuk PolarDB. Harus menyertakan awalan http://.
    dynamodb.endpoint = http://<your-polardb-ddb-endpoint>:<port>
    
    # Parameter wilayah harus diatur menjadi kosong.
    dynamodb.region = 
    
    # Nama dan tipe kunci utama untuk tabel pengujian. Harus konsisten dengan tabel pengujian.
    dynamodb.primaryKey = HASH

2. Sesuaikan operasi Pembaruan YCSB

Penting

Klien DynamoDB YCSB resmi secara default menggunakan parameter AttributeUpdates yang sudah tidak digunakan lagi untuk melakukan pembaruan. Untuk memastikan kompatibilitas dengan parameter UpdateExpression baru yang didukung oleh PolarDB, Anda harus memodifikasi kode sumber YCSB.

  • Jalur file: dynamodb/src/main/java/site/ycsb/db/DynamoDBClient.java

  • Metode yang dimodifikasi: update()

Kode asli

@Override
public Status update(String table, String key, Map<String, ByteIterator> values) {
  if (LOGGER.isDebugEnabled()) {
    LOGGER.debug("updatekey: " + key + " from table: " + table);
  }

  Map<String, AttributeValueUpdate> attributes = new HashMap<>(values.size());
  for (Entry<String, ByteIterator> val : values.entrySet()) {
    AttributeValue v = new AttributeValue(val.getValue().toString());
    attributes.put(val.getKey(), new AttributeValueUpdate().withValue(v).withAction("PUT"));
  }

  UpdateItemRequest req = new UpdateItemRequest(table, createPrimaryKey(key), attributes);

  try {
    dynamoDB.updateItem(req);
  } catch (AmazonServiceException ex) {
    LOGGER.error(ex);
    return Status.ERROR;
  } catch (AmazonClientException ex) {
    LOGGER.error(ex);
    return CLIENT_ERROR;
  }
  return Status.OK;
}

Setelah pembaruan (menggunakan UpdateExpression)

@Override
public Status update(String table, String key, Map<String, ByteIterator> values) {
  if (LOGGER.isDebugEnabled()) {
    LOGGER.debug("updatekey: " + key + " from table: " + table);
  }

  StringBuilder updateExp = new StringBuilder("SET ");
  Map<String, String> attrNames = new HashMap<>();
  Map<String, AttributeValue> attrValues = new HashMap<>();
  boolean first = true;
  for (Map.Entry<String, ByteIterator> entry : values.entrySet()) {
    String attr = entry.getKey();
    if (!first) {
      updateExp.append(", ");
    }
    String attrName = "#" + attr;
    String valueName = ":" + attr;
    updateExp.append(attrName).append(" = ").append(valueName);
    attrNames.put(attrName, attr);
    attrValues.put(valueName, new AttributeValue(entry.getValue().toString()));
    first = false;
  }

  UpdateItemRequest req = new UpdateItemRequest()
      .withTableName(table)
      .withKey(createPrimaryKey(key))
      .withUpdateExpression(updateExp.toString())
      .withExpressionAttributeNames(attrNames)
      .withExpressionAttributeValues(attrValues);

  try {
    dynamoDB.updateItem(req);
  } catch (AmazonServiceException ex) {
    LOGGER.error(ex);
    return Status.ERROR;
  } catch (AmazonClientException ex) {
    LOGGER.error(ex);
    return CLIENT_ERROR;
  }
  return Status.OK;
}

3. Jalankan pengujian

Pengujian dibagi menjadi dua fase: load (untuk memuat data awal) dan run (untuk menjalankan beban kerja). Contoh berikut adalah untuk pengujian dengan volume data 1 GB (1 juta catatan), 128 thread konkuren, dan model read-only:

Catatan

Untuk menguji dengan volume data berbeda, Anda dapat memodifikasi parameter recordcount dan operationcount dalam perintah.

  1. Muat data (Fase Load)

    # Deskripsi:
    # -s: Menampilkan pembaruan status.
    # -P workloads/workload_read_only: Menentukan file beban kerja dasar.
    # -P /path/to/dynamodb.properties: Menentukan file konfigurasi koneksi database.
    # -p recordcount=1000000: Menentukan jumlah total catatan.
    # -p operationcount=1000000: Menentukan jumlah total operasi yang akan dijalankan.
    # -threads 128: Menentukan jumlah thread konkuren.
    
    nohup ./bin/ycsb load dynamodb -s \
    -P workloads/workload_read_only \
    -P /path/to/dynamodb.properties \
    -p recordcount=1000000 \
    -p operationcount=1000000 \
    -threads 128 \
    > load.log 2>&1 &
  2. Jalankan pengujian (Fase Run)

    nohup ./bin/ycsb run dynamodb -s \
    -P workloads/workload_read_only \
    -P /path/to/dynamodb.properties \
    -p recordcount=1000000 \
    -p operationcount=1000000 \
    -threads 128 \
    > run.log 2>&1 &