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
CONCURRENTLYdanINCLUDEtidak didukung.Indeks pada kolom ekspresi tidak didukung.
Parameter
Konfigurasikan parameter berikut untuk menggunakan EPQ dalam pembuatan indeks.
| Parameter | Default | Deskripsi |
|---|---|---|
polar_px_enable_btbuild | off | Mengaktifkan pembuatan indeks yang dipercepat oleh EPQ. Atur ke on untuk mengaktifkannya. |
polar_px_dop_per_node | 1 | Menetapkan 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_size | 0 | Mengontrol 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 testOutput yang diharapkan:
Table "public.test"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | |
id2 | integer | | |Buat indeks
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)Buat indeks dengan opsi
px_build=on:CREATE INDEX t ON test(id) WITH (px_build=on);Verifikasi indeks:
\d testOutput 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=finishdalam definisi indeks mengonfirmasi bahwa EPQ digunakan untuk membangun indeks tersebut.
Opsipx_build=ondalam pernyataanCREATE INDEXwajib digunakan. Jikapolar_px_enable_btbuilddiatur keontetapi opsipx_build=ondihilangkan, PolarDB akan menggunakan metode pembuatan indeks native-nya: Dalam kasus ini, definisi indeks tidak menampilkan bidangpx_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.
