全部产品
Search
文档中心

:Gunakan fitur Elastic Parallel Query untuk menjalankan kueri analitik

更新时间:Nov 09, 2025

PolarDB untuk PostgreSQL memungkinkan Anda menggunakan fitur Elastic Parallel Query untuk menjalankan kueri analitik, sehingga mendukung kemampuan pemrosesan transaksi/analitik hibrida (HTAP). Topik ini menjelaskan cara menggunakan fitur tersebut untuk meningkatkan performa kueri analitik.

Cara kerja fitur Elastic Parallel Query

Dalam Elastic Parallel Query, sebuah kueri dijalankan secara paralel pada beberapa node. Node yang mengoordinasikan eksekusi disebut node koordinator kueri (QC), sedangkan node lainnya disebut node eksekusi paralel (PX). Setelah permintaan kueri dimulai, node QC membagi rencana eksekusi menjadi beberapa bagian (shard) dan merutekannya ke node PX. Setiap node PX menjalankan bagian rencana yang ditugaskan dan mengirimkan hasilnya ke node QC, yang kemudian menggabungkan hasil tersebut.

How the cross-node parallel execution feature works

Pada gambar sebelumnya, RO1 adalah node QC, sedangkan RO2, RO3, dan RO4 adalah node PX. Setelah RO1 menerima permintaan kueri, RO1 membagi rencana eksekusi menjadi tiga shard dan merutekannya ke RO2, RO3, dan RO4. Setiap node PX menjalankan bagian rencana yang ditugaskan, mengambil blok data dari sistem penyimpanan bersama Polar File System (PolarFS), lalu mengirimkan hasilnya ke node QC. Node QC kemudian menggabungkan hasil tersebut dan mengembalikan hasil akhir.

Peringatan

Karena beberapa node baca-saja diperlukan untuk menjalankan setiap kueri secara paralel, Elastic Parallel Query hanya cocok untuk kueri analitik yang jarang dijalankan.

Parameter

Secara default, fitur Elastic Parallel Query dinonaktifkan dalam PolarDB untuk PostgreSQL. Untuk menggunakan fitur ini, konfigurasikan parameter yang dijelaskan dalam tabel berikut.

Parameter

Parameter

polar_cluster_map

Mengambil nama semua node baca-saja dalam PolarDB untuk PostgreSQL. Anda tidak dapat mengonfigurasi parameter ini. Setiap kali Anda menambahkan node baca-saja, daftar nama node yang dikembalikan untuk parameter ini diperbarui secara otomatis.

Catatan

Parameter ini hanya tersedia untuk kluster yang menggunakan versi kernel minor 1.1.20 (dirilis pada Januari 2022) atau lebih lama.

polar_px_nodes

Menentukan node baca-saja di mana kueri Anda dijalankan pada beberapa node. Parameter ini kosong secara default, yang menunjukkan bahwa semua node baca-saja digunakan untuk eksekusi paralel. Jika Anda ingin menggunakan node tertentu untuk eksekusi paralel, atur parameter ini ke nama node yang ingin Anda gunakan. Gunakan koma (,) untuk memisahkan nama node. Contoh:

SHOW polar_px_nodes ;
 polar_px_nodes
----------------

(1 row)
SET polar_px_nodes='node1,node2';
SHOW polar_px_nodes ;
 polar_px_nodes
----------------
 node1,node2
(1 row)

polar_px_enable_replay_wait

Menentukan apakah akan mengaktifkan konsistensi kuat. Nilai valid: on dan off. Ada jeda antara node utama dan node baca-saja dalam kluster PolarDB untuk PostgreSQL Anda. Sebagai contoh, setelah node utama mengeksekusi pernyataan CREATE TABLE, pernyataan DDL ini diputar ulang pada node baca-saja agar node baca-saja disinkronkan dengan node utama. Pemutaran ulang ini menyebabkan jeda. Jika Anda mengatur parameter polar_px_enable_replay_wait ke on, konsistensi kuat diaktifkan. Setelah permintaan dimulai untuk menjalankan kueri pada beberapa node baca-saja secara paralel, permintaan dirutekan ke node baca-saja. Untuk memastikan konsistensi kuat, node baca-saja memutar ulang catatan log terbaru yang dihasilkan sebelum permintaan kueri dimulai dan semua catatan log sebelumnya. Kemudian, node baca-saja mulai menjalankan kueri.

Nilai default adalah off, yang menunjukkan bahwa konsistensi kuat dinonaktifkan. Jika Anda mengatur parameter ke off, ada jeda panjang antara node utama dan node baca-saja karena pemutaran ulang log dan node baca-saja mungkin gagal membaca catatan log terbaru operasi DDL. Jika Anda mengatur parameter polar_px_enable_replay_wait ke on, performa Elastic Parallel Query berkurang.

Anda juga dapat mengatur parameter ini ke on untuk peran basis data tertentu.

polar_px_max_workers_number

Menentukan jumlah maksimum proses pekerja yang dapat dijalankan pada node untuk Elastic Parallel Query. Nilai default adalah 30. Parameter ini digunakan untuk membatasi derajat paralelisme pada setiap node. Jumlah proses pekerja untuk setiap node dalam semua sesi untuk Elastic Parallel Query tidak boleh melebihi nilai parameter ini.

polar_enable_px

Menentukan apakah akan mengaktifkan fitur Elastic Parallel Query. Nilai default adalah off, yang menunjukkan bahwa fitur dinonaktifkan.

polar_px_dop_per_node

Menentukan derajat paralelisme untuk Elastic Parallel Query pada sesi saat ini. Nilai default adalah 1. Kami merekomendasikan Anda mengatur nilai ini ke jumlah core dalam sistem operasi Anda. Jika Anda mengatur polar_px_dop_per_node ke N, setiap node menggunakan N proses pekerja px untuk sesi untuk menjalankan kueri Anda secara paralel.

px_workers

Menentukan apakah fitur diterapkan pada tabel tertentu. Secara default, fitur tidak diterapkan pada tabel apa pun. Fitur ini sangat mengonsumsi sumber daya komputasi. Untuk mengurangi sumber daya komputasi yang dikonsumsi, Anda dapat mengonfigurasi parameter ini untuk menentukan tabel tempat fitur diterapkan. Kode berikut memberikan contoh untuk menjelaskan cara mengonfigurasi parameter ini:

--Aktifkan fitur untuk tabel bernama t1.
ALTER TABLE t1 SET(px_workers=1);

--Nonaktifkan fitur untuk tabel bernama t1.
ALTER TABLE t1 SET(px_workers=-1);

--Jangan terapkan fitur pada tabel bernama t1. Ini adalah pengaturan default.
ALTER TABLE t1 SET(px_workers=0);

synchronous_commit

Menentukan apakah transaksi perlu menunggu log WAL ditulis ke disk sebelum mengembalikan pesan sukses ke klien ketika database melakukan commit transaksi. Nilai default: on. Nilai valid:

  • off: Transaksi tidak menunggu log WAL ditulis ke disk sebelum mengembalikan pesan sukses ke klien. 0, false atau no dapat digunakan untuk menunjukkan off.

  • on: Transaksi menunggu log WAL ditulis ke disk sebelum mengembalikan pesan sukses ke klien. true, yes, atau 1 dapat digunakan untuk menunjukkan on.

  • local: Log WAL ditulis ke disk lokal.

  • remote_write: Setelah log WAL dikirim ke host remote, host remote mengonfirmasi penulisan.

  • remote_apply: Host lokal dapat melakukan commit transaksi lain sampai transaksi yang diterima oleh host remote diputar ulang.

Catatan

Parameter ini diatur ke on dalam mode PX.

Contoh

Berikut ini menjelaskan efek dari fitur Elastic Parallel Query. Dalam contoh ini, kueri dilakukan pada tabel tunggal.

Informasi Latar Belakang

Jalankan pernyataan berikut untuk membuat tabel bernama test dan menyisipkan data ke dalam tabel:

CREATE TABLE test(id int);
INSERT INTO test SELECT generate_series(1,1000000);
EXPLAIN SELECT * FROM test;

Secara default, fitur Elastic Parallel Query dinonaktifkan. Rencana eksekusi asli untuk kueri tabel tunggal adalah melakukan pemindaian berurutan (Seq Scan), seperti yang ditunjukkan dalam kode berikut:

                       QUERY PLAN
--------------------------------------------------------
 Seq Scan on test  (cost=0.00..35.50 rows=2550 width=4)
(1 row)

Untuk mengaktifkan fitur Elastic Parallel Query, ikuti langkah-langkah berikut:

  1. Aktifkan fitur ini untuk tabel bernama test:

    ALTER TABLE test SET (px_workers=1);
    SET polar_enable_px=on;
    EXPLAIN SELECT * FROM test;

    Hasil kueri berikut dikembalikan:

                                      QUERY PLAN
    -------------------------------------------------------------------------------
     PX Coordinator 2:1  (slice1; segments: 2)  (cost=0.00..431.00 rows=1 width=4)
       ->  Seq Scan on test (scan partial)  (cost=0.00..431.00 rows=1 width=4)
     Optimizer: PolarDB PX Optimizer
    (3 rows)
  2. Kueri nama semua node baca-saja.

    Jalankan pernyataan berikut:

    SHOW polar_cluster_map;

    Hasil kueri berikut dikembalikan:

     polar_cluster_map
    -------------------
     node1,node2,node3
    (1 row)

    Dalam contoh ini, kluster memiliki tiga node baca-saja: node1, node2, dan node3.

  3. Tentukan node1 dan node2 untuk Elastic Parallel Query.

    Jalankan pernyataan berikut:

    SET polar_px_nodes='node1,node2';

    Kueri node yang ditentukan untuk Elastic Parallel Query:

    SHOW polar_px_nodes ;

    Hasil kueri berikut dikembalikan:

     polar_px_nodes
    ----------------
     node1,node2
    (1 row)

Data performa

Data performa berikut diperoleh dari tes di mana lima node baca-saja digunakan untuk eksekusi paralel.

  • Ketika SELECT COUNT(*) dieksekusi untuk pemindaian tabel penuh, Elastic Parallel Query 60 kali lebih cepat daripada eksekusi paralel satu node.

  • Dalam kueri TPC-H, Elastic Parallel Query 30 kali lebih cepat daripada eksekusi paralel satu node.

    Catatan Dalam contoh ini, tes berdasarkan benchmark TPC-H diimplementasikan, tetapi tidak memenuhi semua persyaratan tes benchmark TPC-H. Oleh karena itu, hasil tes mungkin tidak dapat dibandingkan dengan hasil yang diterbitkan dari tes benchmark TPC-H.