All Products
Search
Document Center

PolarDB:Gunakan Elastic Parallel Query untuk mempercepat pembuatan indeks

Last Updated:Mar 29, 2026

Pembuatan Indeks B-tree pada tabel besar memakan waktu lama dengan metode native berbasis proses tunggal. Elastic Parallel Query (EPQ) melakukan paralelisasi pada fase pemindaian heap dalam pembuatan indeks, sehingga mengurangi waktu pembuatan hingga sekitar lima kali lipat pada tabel besar. Topik ini menjelaskan cara kerja EPQ, parameter yang perlu dikonfigurasi, serta langkah-langkah untuk membuat Indeks B-tree atau Indeks B-tree global menggunakan EPQ pada PolarDB for PostgreSQL (Compatible with Oracle).

Cara kerja

Saat PolarDB for PostgreSQL (Compatible with Oracle) membangun indeks, sistem melakukan pemindaian tabel heap untuk mengumpulkan entri indeks, lalu membangun struktur B-tree dari entri tersebut.

Dengan EPQ diaktifkan, database meluncurkan proses query coordinator (QC) yang melakukan pemindaian tabel heap secara paralel. Proses pembuatan indeks menerima hasil pemindaian dari proses QC dan membangun indeks tersebut. Pemindaian paralel ini mengurangi waktu pembuatan indeks pada tabel besar.

Batasan

  • Pembuatan indeks yang dipercepat oleh EPQ hanya berlaku untuk Indeks B-tree pada kolom umum. Klausul CONCURRENTLY dan INCLUDE tidak didukung.

  • Indeks pada kolom ekspresi tidak didukung.

Parameter

Konfigurasikan parameter berikut untuk menggunakan EPQ dalam pembuatan indeks.

ParameterDefaultDeskripsi
polar_px_enable_btbuildoffMengaktifkan pembuatan indeks yang dipercepat oleh EPQ. Atur ke on untuk mengaktifkannya.
polar_px_dop_per_node1Menetapkan tingkat paralelisme (DOP) per node. Atur ke 8 atau 16 untuk tabel besar. Parameter ini juga mengontrol DOP untuk kueri analitis EPQ. Untuk detailnya, lihat .
polar_px_enable_replay_wait(database default)Memastikan entri tabel terbaru dimasukkan ke dalam indeks. Saat polar_px_enable_btbuild diatur ke on, parameter ini diaktifkan secara otomatis untuk session saat ini dan dikembalikan ke nilai default database setelah indeks dibuat.
polar_bt_write_page_buffer_size0Mengontrol kebijakan I/O tulis selama pembuatan indeks. Satuannya adalah blok. Nilai maksimumnya adalah 8192. Atur ke 4096 untuk performa optimal.

Perilaku `polar_bt_write_page_buffer_size`:

  • `0` (default): Menuliskan entri indeks ke disk blok demi blok saat setiap halaman indeks penuh.

  • Nilai bukan nol: Menyimpan entri indeks dalam buffer kernel dengan ukuran yang ditentukan. Saat buffer penuh, semua entri dituliskan ke disk dalam satu operasi I/O, sehingga mengurangi overhead penjadwalan I/O. Hal ini dapat mengurangi waktu pembuatan indeks hingga 20%.

Ketergantungan parameter:

Mengatur polar_px_enable_btbuild=on secara otomatis mengaktifkan polar_px_enable_replay_wait untuk session saat ini. Setelah indeks dibuat, polar_px_enable_replay_wait dikembalikan ke nilai default database.

Buat Indeks B-tree dengan EPQ

Langkah-langkah berikut menggunakan tabel contoh untuk menunjukkan cara mengaktifkan EPQ dan membuat Indeks B-tree.

Sebelum memulai, pastikan Anda telah memiliki:

  • Tabel di PolarDB for PostgreSQL (Compatible with Oracle)

Siapkan tabel contoh

Buat tabel bernama test:

CREATE TABLE test(id int, id2 int);

Verifikasi struktur tabel:

\d test

Output yang diharapkan:

               Table "public.test"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 id     | integer |           |          |
 id2    | integer |           |          |

Buat indeks

  1. Aktifkan pembuatan indeks yang dipercepat oleh EPQ untuk session saat ini:

    SET polar_px_enable_btbuild = on;

    Verifikasi pengaturan:

    SHOW polar_px_enable_btbuild;

    Output yang diharapkan:

    polar_px_enable_btbuild
    -------------------------
     on
    (1 row)
  2. Buat indeks dengan opsi px_build=on:

    CREATE INDEX t ON test(id) WITH (px_build=on);

    Verifikasi indeks:

    \d test

    Output yang diharapkan:

                   Table "public.test"
     Column |  Type   | Collation | Nullable | Default
    --------+---------+-----------+----------+---------
     id     | integer |           |          |
     id2    | integer |           |          |
    Indexes:
        "t" btree (id) WITH (px_build=finish)

    Bidang px_build=finish dalam definisi indeks mengonfirmasi bahwa EPQ digunakan untuk membangun indeks tersebut.

Opsi px_build=on dalam pernyataan CREATE INDEX wajib digunakan. Jika polar_px_enable_btbuild diatur ke on tetapi opsi px_build=on dihilangkan, PolarDB akan menggunakan metode pembuatan indeks native-nya: Dalam kasus ini, definisi indeks tidak menampilkan bidang px_build:
CREATE INDEX t ON test(id);
Indexes:
    "t" btree (id)

Data performa

EPQ membangun Indeks B-tree pada tabel besar sekitar lima kali lebih cepat dibandingkan metode native.

Gambar berikut membandingkan performa pembuatan Indeks B-tree global sebelum dan sesudah mengaktifkan EPQ, menggunakan set data berukuran 130 GB.

Performance comparison