All Products
Search
Document Center

PolarDB:Petunjuk OPT_PARAM

Last Updated:Aug 25, 2026

OPT_PARAM adalah petunjuk kueri untuk PolarDB for PostgreSQL (Compatible with Oracle) yang mengganti parameter pengoptimal pada tingkat pernyataan SQL individual. Berbeda dengan pengaturan parameter di tingkat database, sesi, atau pengguna, nilai yang ditetapkan melalui OPT_PARAM hanya berlaku untuk pernyataan yang memuat petunjuk tersebut.

Gunakan OPT_PARAM ketika kueri tertentu berkinerja buruk akibat rencana eksekusi yang suboptimal dan Anda perlu menguji strategi rencana berbeda tanpa mengubah konfigurasi global atau sesi.

Parameter enable_* yang dikendalikan oleh OPT_PARAM merupakan cara cepat untuk memengaruhi rencana kueri, bukan solusi penyetelan jangka panjang. Jika suatu kueri secara konsisten menghasilkan rencana yang buruk, selidiki akar penyebabnya, seperti statistik yang kedaluwarsa (jalankan ANALYZE), konstanta biaya yang tidak akurat, atau target statistik per kolom yang tidak mencukupi.

Sintaksis

SELECT /*+ opt_param("parameter_name" "value") */ ...;

Beberapa petunjuk dapat digabungkan dalam satu blok komentar:

SELECT /*+ opt_param("enable_hashjoin" "off"),
opt_param("enable_mergejoin" "off") */ ...;

Parameter yang didukung

Semua parameter menerima nilai "on" atau "off".

Metode pemindaian

Parameter Deskripsi
enable_bitmapscan Mengontrol apakah perencana kueri mempertimbangkan rencana Pemindaian bitmap.
enable_indexscan Mengontrol apakah perencana kueri mempertimbangkan rencana Pemindaian indeks.
enable_indexonlyscan Mengontrol apakah perencana kueri mempertimbangkan rencana Pemindaian indeks-only.
enable_seqscan Mengontrol apakah perencana kueri mempertimbangkan rencana Pemindaian sekuensial. Pemindaian sekuensial tidak dapat dinonaktifkan sepenuhnya; mengatur ini ke off membuat perencana enggan menggunakannya ketika opsi lain tersedia.
enable_tidscan Mengontrol apakah perencana kueri mempertimbangkan rencana Pemindaian TID.

Metode join

Parameter Deskripsi
enable_hashjoin Mengontrol apakah perencana kueri mempertimbangkan rencana hash join.
enable_mergejoin Mengontrol apakah perencana kueri mempertimbangkan rencana merge join.
enable_nestloop Mengontrol apakah perencana kueri mempertimbangkan rencana nested loop join. Nested loop join tidak dapat dinonaktifkan sepenuhnya; mengatur ini ke off membuat perencana enggan menggunakannya ketika metode join lain tersedia.

Agregasi

Parameter Deskripsi
enable_hashagg Mengontrol apakah perencana kueri mempertimbangkan rencana hash aggregate.

Pengurutan dan materialisasi

Parameter Deskripsi
enable_sort Mengontrol apakah perencana kueri menggunakan langkah pengurutan eksplisit. Pengurutan eksplisit tidak dapat dinonaktifkan sepenuhnya; mengatur ini ke off membuat perencana enggan menggunakannya ketika strategi pengurutan lain tersedia.
enable_material Mengontrol apakah perencana kueri menyisipkan node materialisasi. Materialisasi tidak dapat dinonaktifkan sepenuhnya; mengatur ini ke off mencegah perencana menyisipkan node materialisasi.

Kueri paralel

Parameter Deskripsi
enable_gathermerge Mengontrol apakah perencana kueri mempertimbangkan rencana gather merge.
enable_parallel_append Mengontrol apakah perencana kueri mempertimbangkan rencana parallel append.
enable_parallel_hash Mengontrol apakah perencana kueri menggunakan parallel hash untuk rencana hash join. Tidak berpengaruh jika enable_hashjoin bernilai off.

Optimasi partisi

Parameter Deskripsi
enable_partition_pruning Mengontrol apakah perencana kueri mengeliminasi partisi dari rencana kueri dan apakah pelaksana kueri menghapus (mengabaikan) partisi pada waktu proses.
enable_partitionwise_aggregate Mengontrol apakah perencana kueri melakukan pengelompokan atau agregasi secara terpisah untuk setiap partisi. Jika klausa GROUP BY tidak mencakup semua kunci partisi, hanya agregasi parsial yang dijalankan per partisi dan finalisasi dilakukan setelahnya.
enable_partitionwise_join Mengontrol apakah perencana kueri melakukan join antara tabel terpartisi dengan melakukan join antar partisi yang sesuai. Hanya berlaku jika kondisi join mencakup semua kunci partisi, kunci partisi memiliki tipe data yang sama, dan partisi anak memiliki korespondensi satu-ke-satu.

Contoh

Nonaktifkan Pemindaian bitmap untuk satu kueri

EXPLAIN (COSTS OFF) SELECT /*+ opt_param("enable_bitmapscan" "off") */ * FROM sampletable WHERE x < 423;

Nonaktifkan merge join untuk kueri join

EXPLAIN (COSTS OFF) SELECT /*+ opt_param("enable_mergejoin" "off") */ tt1.*, tt2.* FROM tt1 JOIN tt2 ON tt1.joincol = tt2.joincol;

Aktifkan hash join untuk kueri join

EXPLAIN (COSTS OFF) SELECT /*+ opt_param("enable_hashjoin" "on") */ tt1.*, tt2.* FROM tt1 JOIN tt2 ON tt1.joincol = tt2.joincol;

Gabungkan beberapa petunjuk

Nonaktifkan hash join dan merge join dalam satu pernyataan:

EXPLAIN (COSTS OFF) SELECT /*+ opt_param("enable_hashjoin" "off"),
opt_param("enable_mergejoin" "off") */ tt1.*, tt2.* FROM tt1 JOIN tt2 ON tt1.joincol = tt2.joincol;