All Products
Search
Document Center

PolarDB:Petunjuk OPT_PARAM

Last Updated:Mar 29, 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 penyebab utamanya, 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

ParameterDeskripsi
enable_bitmapscanMengontrol apakah perencana kueri mempertimbangkan rencana pemindaian bitmap.
enable_indexscanMengontrol apakah perencana kueri mempertimbangkan rencana pemindaian indeks.
enable_indexonlyscanMengontrol apakah perencana kueri mempertimbangkan rencana pemindaian hanya-indeks (index-only scan).
enable_seqscanMengontrol apakah perencana kueri mempertimbangkan rencana Pemindaian berurutan. Pemindaian berurutan tidak dapat dinonaktifkan sepenuhnya; menetapkan nilai ini ke off mencegah perencana menggunakan metode tersebut selama opsi lain tersedia.
enable_tidscanMengontrol apakah perencana kueri mempertimbangkan rencana pemindaian TID.

Metode Join

ParameterDeskripsi
enable_hashjoinMengontrol apakah perencana kueri mempertimbangkan rencana hash join.
enable_mergejoinMengontrol apakah perencana kueri mempertimbangkan rencana merge join.
enable_nestloopMengontrol apakah perencana kueri mempertimbangkan rencana nested loop join. Nested loop join tidak dapat dinonaktifkan sepenuhnya; mengatur nilai ini ke off mencegah perencana menggunakannya ketika metode join lain tersedia.

Agregasi

ParameterDeskripsi
enable_hashaggMengontrol apakah perencana kueri mempertimbangkan rencana agregasi hash.

Pengurutan dan materialisasi

ParameterDeskripsi
enable_sortMengontrol apakah perencana kueri menggunakan langkah pengurutan eksplisit. Langkah pengurutan eksplisit tidak dapat dinonaktifkan sepenuhnya; mengatur nilai ini ke off mencegah perencana menggunakan langkah tersebut jika strategi pengurutan lain tersedia.
enable_materialMengontrol apakah perencana kueri menyisipkan node materialisasi. Materialisasi tidak dapat dinonaktifkan sepenuhnya; menyetel ini ke off mencegah perencana menyisipkan node materialisasi.

Kueri paralel

ParameterDeskripsi
enable_gathermergeMengontrol apakah perencana kueri mempertimbangkan rencana gather merge.
enable_parallel_appendMengontrol apakah perencana kueri mempertimbangkan rencana parallel append.
enable_parallel_hashMengontrol apakah perencana kueri menggunakan parallel hash untuk rencana hash join. Tidak berpengaruh jika enable_hashjoin bernilai off.

Optimasi partisi

ParameterDeskripsi
enable_partition_pruningMengontrol apakah perencana kueri mengeliminasi partisi dari rencana kueri dan apakah pelaksana kueri menghapus (mengabaikan) partisi pada waktu proses.
enable_partitionwise_aggregateMengontrol 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_joinMengontrol apakah perencana kueri melakukan join antara tabel terpartisi dengan menggabungkan 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;