Ekstensi pg_hint_plan dari AnalyticDB for PostgreSQL menyediakan fitur hint, yang memungkinkan Anda memodifikasi dan mengoptimalkan rencana eksekusi untuk meningkatkan performa eksekusi SQL.
Batasan
Untuk instance AnalyticDB for PostgreSQL yang menjalankan versi V6.3.8.1 atau lebih baru, fitur hint diaktifkan setelah Anda memasang ekstensi pg_hint_plan.
Sebelum memasang ekstensi pg_hint_plan, disarankan untuk memperbarui versi mesin minor instance ke V6.3.8.1 atau lebih baru.
Untuk memasang atau meningkatkan ekstensi pada instance yang menjalankan V6.3.8.9 atau lebih baru, Submit a ticket.
Untuk informasi lebih lanjut tentang cara melihat dan memperbarui versi mesin minor instance, lihat Lihat Versi Mesin Minor dan Perbarui Versi Mesin Minor.
Ikhtisar
AnalyticDB for PostgreSQL menggunakan Optimalisasi berbasis biaya yang memanfaatkan statistik data alih-alih aturan statis. Optimizer memperkirakan biaya setiap rencana eksekusi yang mungkin untuk Pernyataan SQL dan memilih rencana dengan biaya minimum untuk dieksekusi. Meskipun optimizer melakukan yang terbaik untuk memilih rencana eksekusi optimal, rencana akhir mungkin tetap tidak sesuai untuk skenario tertentu karena keterbatasan dalam memprediksi korelasi antara data.
Ekstensi pg_hint_plan dapat menggunakan hint untuk memodifikasi dan mengoptimalkan rencana eksekusi SQL serta mendaftarkan pola SQL yang dioptimalkan dan aturan hint. Dengan cara ini, rencana eksekusi yang dioptimalkan dapat dibuat secara otomatis ketika pernyataan SQL dengan pola SQL terdaftar yang sama dijalankan, meningkatkan efisiensi eksekusi.
Aktifkan fitur hint
Jalankan pernyataan berikut untuk memasang ekstensi pg_hint_plan guna mengaktifkan fitur hint:
CREATE EXTENSION pg_hint_plan;Fitur hint hanya dapat digunakan untuk database yang memiliki ekstensi pg_hint_plan terpasang.
Hint yang didukung
Kategori | Format | Deskripsi |
Hint untuk pengaturan parameter GUC (Grand Unified Configuration) |
| Mengatur parameter GUC saat optimizer berjalan. Parameter GUC hanya berlaku saat optimizer berjalan dan tidak pada fase lain seperti rewrite dan execute.
|
Hint untuk metode scan |
| Memaksa sequential scans pada tabel. |
| Memaksa tuple identifier (TID) scans pada tabel. | |
| Memaksa index scans pada tabel. Anda dapat menentukan indeks. | |
| Memaksa index-only scans pada tabel. Anda dapat menentukan indeks. | |
| Memaksa bitmap index scans pada tabel. | |
| Melarang sequential scans pada tabel. | |
| Melarang TID scans pada tabel. | |
| Melarang index scans pada tabel. | |
| Melarang index-only scans pada tabel. | |
| Melarang bitmap index scans pada tabel. | |
Hint untuk metode join Catatan Hint untuk metode join harus digunakan bersamaan dengan hints for join order. |
| Memaksa nested loops untuk join yang terdiri dari tabel-tabel yang ditentukan. |
| Memaksa hash joins untuk join yang terdiri dari tabel-tabel yang ditentukan. | |
| Memaksa merge joins untuk join yang terdiri dari tabel-tabel yang ditentukan. | |
| Melarang nested loops untuk join yang terdiri dari tabel-tabel yang ditentukan. | |
| Melarang hash joins untuk join yang terdiri dari tabel-tabel yang ditentukan. | |
| Melarang merge joins untuk join yang terdiri dari tabel-tabel yang ditentukan. | |
Hint untuk urutan join |
| Memaksa urutan join seperti yang ditentukan. |
| Memaksa urutan join dan arah seperti yang ditentukan. | |
Hint untuk koreksi jumlah baris |
| Mengoreksi jumlah baris hasil dari join yang terdiri dari tabel-tabel yang ditentukan. Metode koreksi yang tersedia adalah nilai absolut
Catatan Hint Rows mengoreksi jumlah total baris, sedangkan hasil query menunjukkan jumlah rata-rata baris per node (jumlah total baris/jumlah node). |
Hint selain pengaturan parameter GUC hanya berlaku untuk optimizer query PostgreSQL, bukan optimizer ORCA.
Hint tidak dapat digunakan untuk memodifikasi derajat paralelisme (DOP).
Contoh:
Hint untuk Pengaturan Parameter GUC
Pengaturan parameter GUC yang dilakukan saat optimizer berjalan berlaku baik untuk optimizer ORCA maupun query.
Nonaktifkan optimizer ORCA.
/*+ SET(optimizer off) */EXPLAIN SELECT * FROM t1 JOIN t2 ON t1.val = t2.val;Setelah optimizer ORCA dinonaktifkan, optimizer tersebut tidak digunakan.
Aktifkan optimizer ORCA.
/*+ SET(optimizer on) */EXPLAIN SELECT * FROM t1 JOIN t2 ON t1.val = t2.val;Setelah optimizer ORCA diaktifkan, optimizer tersebut digunakan dalam banyak kasus, kecuali dalam skenario tertentu seperti query pada tabel tunggal atau tabel partisi berlebihan.
Paksa aktifkan optimizer ORCA.
/*+ SET(optimizer on) SET(rds_optimizer_options 0) */EXPLAIN SELECT * FROM t1 JOIN t2 ON t1.val = t2.val;Setelah optimizer ORCA dipaksa aktifkan, optimizer tersebut selalu digunakan, kecuali jika tidak dapat membuat rencana.
Paksa aktifkan optimizer ORCA dan nonaktifkan HashJoin optimizer ORCA.
/*+ SET(optimizer on) SET(rds_optimizer_options 0) SET(optimizer_enable_hashjoin off) */EXPLAIN SELECT * FROM t1 JOIN t2 ON t1.val = t2.val;
Hint untuk Metode Scan
Hint untuk metode scan hanya berlaku untuk optimizer query. Jalankan pernyataan berikut untuk menonaktifkan optimizer ORCA:
SET optimizer to off;Paksa index scans pada tabel t1.
/*+ Indexscan(t1) */EXPLAIN SELECT * FROM t1 JOIN t2 ON t1.val = t2.val;Larang index scans pada tabel t1.
/*+ NoIndexscan(t1) */EXPLAIN SELECT * FROM t1 JOIN t2 ON t1.val = t2.val;Paksa bitmap index scans pada tabel t1 menggunakan indeks bitmap t1_val.
/*+ Bitmapscan(t1 t1_val) */EXPLAIN SELECT * FROM t1 JOIN t2 ON t1.val = t2.val;Paksa index-only scans pada tabel t1.
/*+ Indexonlyscan(t1) */EXPLAIN SELECT t2.*, t1.val FROM t1 JOIN t2 ON t1.val = t2.val;CatatanIndex-only scans hanya dapat digunakan pada kolom-kolom index-only.
Paksa TID scans pada tabel t1.
/*+ Tidscan(t1) */EXPLAIN SELECT * FROM t1 JOIN t2 ON t1.val = t2.val where t1.ctid = '(1,2)';CatatanTID scans hanya dapat digunakan pada tabel yang mengandung kondisi TID.
Hint untuk Metode Join dan Urutan Join
Hint untuk metode join cocok hanya untuk optimizer query. Jalankan pernyataan berikut untuk menonaktifkan optimizer ORCA:
SET optimizer to off;Paksa merge joins ketika tabel t1 adalah tabel kiri.
/*+ Leading((t1 t2)) MergeJoin(t1 t2) */EXPLAIN SELECT * FROM t1 JOIN t2 ON t1.val = t2.val;Paksa nested loop joins ketika tabel t1 adalah tabel kiri.
/*+ Leading((t1 t2)) NestLoop(t1 t2) */EXPLAIN SELECT * FROM t1 JOIN t2 ON t1.val = t2.val;Larang hash joins ketika tabel t1 adalah tabel kiri.
/*+ Leading((t1 t2)) NoHashJoin(t1 t2) */EXPLAIN SELECT * FROM t1 JOIN t2 ON t1.val = t2.val;Paksa hash joins untuk t2 dan t3 lalu paksa nest loop joins dengan t1.
/*+ Leading(((t2 t3) t1)) HashJoin(t2 t3) NestLoop(t2 t3 t1) */EXPLAIN SELECT * FROM t1, t2, t3 WHERE t1.val = t2.val and t2.val = t3.val;
Hint untuk Koreksi Jumlah Baris
Hint untuk koreksi jumlah baris cocok hanya untuk optimizer query. Jalankan pernyataan berikut untuk menonaktifkan optimizer ORCA:
SET optimizer to off;Tingkatkan jumlah total baris sebanyak 100 kali lipat pada tabel yang diperoleh dengan menggabungkan t1 dan t2.
/*+ Rows(t1 t2 *100) */EXPLAIN SELECT * FROM t1 JOIN t2 ON t1.val = t2.val;Kurangi jumlah total baris sebanyak 100 kali lipat pada tabel yang diperoleh dengan menggabungkan t1 dan t2.
/*+ Rows(t1 t2 *0.01) */EXPLAIN SELECT * FROM t1 JOIN t2 ON t1.val = t2.val;Tambahkan 100 ke jumlah total baris pada tabel yang diperoleh dengan menggabungkan t1 dan t2.
/*+ Rows(t1 t2 +100) */EXPLAIN SELECT * FROM t1 JOIN t2 ON t1.val = t2.val;Kurangi 100 dari jumlah total baris pada tabel yang diperoleh dengan menggabungkan t1 dan t2.
/*+ Rows(t1 t2 -100) */EXPLAIN SELECT * FROM t1 JOIN t2 ON t1.val = t2.val;Koreksi jumlah total baris menjadi 100 pada tabel yang diperoleh dengan menggabungkan t1 dan t2.
/*+ Rows(t1 t2 #100) */EXPLAIN SELECT * FROM t1 JOIN t2 ON t1.val = t2.val;
Parameter GUC
Parameter | Nilai default | Deskripsi |
pg_hint_plan.enable_hint | on | Menentukan apakah akan mengaktifkan fitur hint untuk memodifikasi rencana eksekusi. Nilai valid:
|
pg_hint_plan.enable_hint_table | off | Menentukan apakah akan mengaktifkan fitur pendaftaran hint. Nilai valid:
|
pg_hint_plan.jumble_mode | off | Menentukan apakah akan menggunakan pengenal objek (OID) untuk mengidentifikasi objek dalam pernyataan SQL berparameter, seperti tabel, fungsi, dan operator. Nilai valid:
Catatan Kami menyarankan Anda untuk tidak sering mengubah parameter ini. Jika Anda mengubah parameter ini, hint yang terdaftar sebelumnya tidak dapat digunakan. |
pg_hint_plan.parse_messages | info | Tingkat log kesalahan parse hint. Nilai valid: error, warning, notice, info, log, dan debug[1-5]. |
pg_hint_plan.message_level | log | Tingkat log kesalahan dalam fase selain parse hint. Nilai valid: error, warning, notice, info, log, dan debug[1-5]. |
Daftarkan hint
Jika Anda ingin hint diterapkan secara otomatis pada pernyataan SQL yang menggunakan pola SQL yang sama atau jika hint tidak dapat ditambahkan ke pernyataan SQL, Anda dapat mendaftarkan hint dengan menambahkannya ke tabel sistem hint_plan.hints. Setelah hint didaftarkan, rencana eksekusi yang dioptimalkan dengan hint dibuat secara otomatis ketika pernyataan SQL dengan pola SQL yang sama dijalankan.
Tabel berikut menjelaskan kolom dalam tabel hint_plan.hints.
Kolom | Tipe | Deskripsi |
id | integer | Nomor unik yang mengidentifikasi hint. Kolom ini diisi secara otomatis oleh urutan. |
norm_query_string | text | Pola SQL tempat hint berlaku. Pola SQL adalah pernyataan SQL yang tidak mengandung parameter atau konstanta. |
application_name | text | Aplikasi yang terdaftar dengan hint. Nilai defaultnya adalah string kosong ( Kolom application_name memiliki batasan UNIQUE. |
hints | text | Hint yang akan didaftarkan. Kolom hints memiliki batasan UNIQUE. |
query_hash | bigint | Nilai hash dari pola SQL berparameter, yang merupakan pengenal unik dari pernyataan SQL standar. Kolom query_hash memiliki batasan UNIQUE. |
enable | boolean | Menentukan apakah akan mengaktifkan hint. Anda hanya dapat menerapkan satu hint pada pola SQL. |
prepare_param_strings | text | Parameter yang direkam jika pernyataan PREPARE digunakan. |
Anda dapat meminta tabel hint_plan.hints, namun kami menyarankan untuk tidak memodifikasinya secara langsung. Modifikasi tabel disarankan melalui fungsi modifikasi.
Berikut ini menjelaskan fungsi yang digunakan untuk pendaftaran hint.
Fungsi untuk Mendapatkan Parameter Pernyataan SQL
hint_plan.gp_hint_query_parameterize(<query>, <application_name>)Parameter
Deskripsi
queryPernyataan SQL yang mengandung hint.
application_nameAplikasi yang terdaftar dengan hint. Nilainya adalah string kosong (
'').Fungsi ini digunakan untuk mendapatkan parameter dari pernyataan SQL yang mengandung hint. Tabel berikut menjelaskan parameter yang dapat diperoleh.
Parameter
Deskripsi
query_hashNilai hash dari pola SQL berparameter, yang merupakan pengenal unik dari pernyataan SQL standar.
norm_query_stringPola SQL.
comment_hintsHint.
first_matched_hint_in_tableHint dalam tabel hint_plan.hints yang cocok dengan pola SQL.
prepare_param_stringsParameter dalam pernyataan SQL.
Contoh:
SELECT * FROM hint_plan.gp_hint_query_parameterize('/*+ MergeJoin(t1 t2) Leading((t1 t2)) */SELECT * FROM t1, t2 WHERE t1.id = t2.id and t1.val < 100 and t2.val > 20;');Informasi berikut dikembalikan:
-[ RECORD 1 ]---------------+-------------------------------------------------------------------------- query_hash | -4733464863014584191 norm_query_string | SELECT * FROM t1, t2 WHERE t1.id = t2.id and t1.val < $1 and t2.val > $2; comment_hints | MergeJoin(t1 t2) Leading((t1 t2)) first_matched_hint_in_table | HashJoin(t1 t2) Leading((t1 t2)) prepare_param_strings | {}Fungsi yang digunakan untuk mendaftarkan hint.
hint_plan.insert_hint_table(<query>, <application_name>)Parameter
Deskripsi
queryPernyataan SQL yang mengandung hint.
application_nameAplikasi yang terdaftar dengan hint. Nilainya adalah string kosong (
'').Fungsi ini dapat digunakan untuk mendaftarkan hint yang berbeda untuk pola SQL yang sama. Saat Anda menyisipkan hint dengan pola SQL yang sama, nama hint yang sama, dan nama aplikasi yang sama, tidak ada hint baru yang ditambahkan ke tabel hint_plan.hints. Hint yang disisipkan diaktifkan sementara hint yang ada dinonaktifkan.
Contoh:
SELECT hint_plan.insert_hint_table('/*+ MergeJoin(t1 t2) Leading((t1 t2)) */SELECT * FROM t1, t2 WHERE t1.id = t2.id and t1.val < 100 and t2.val > 1;');Informasi berikut dikembalikan:
insert_hint_table --------------------------------------------------------------------------------------------------------------------------------------------------- (1,"SELECT * FROM t1, t2 WHERE t1.id = t2.id and t1.val < $1 and t2.val > $2;","","MergeJoin(t1 t2) Leading((t1 t2)) ",-4733464863014584191,t,{}) (1 row)Fungsi untuk Memodifikasi Hint
hint_plan.upsert_hint_table(<query>, <application_name>)Parameter
Deskripsi
queryPernyataan SQL yang mengandung hint.
application_nameAplikasi yang terdaftar dengan hint. Nilainya adalah string kosong (
'').Jika pola SQL yang digunakan oleh pernyataan SQL mengandung hint, hint yang ada dalam tabel hint_plan.hints diganti dengan hint yang terkandung dalam pernyataan SQL yang ditentukan oleh
query. Jika pola SQL tidak mengandung hint, hint baru didaftarkan.Contoh:
Minta hint yang ada dalam tabel hint_plan.hints.
SELECT * FROM hint_plan.hints;Informasi berikut dikembalikan:
id | norm_query_string | application_name | hints | query_hash | enable | prepare_param_strings ----+---------------------------------------------------------------------------+------------------+------------------------------------+----------------------+--------+----------------------- 1 | SELECT * FROM t1, t2 WHERE t1.id = t2.id and t1.val < $1 and t2.val > $2; | | MergeJoin(t1 t2) Leading((t1 t2)) | -4733464863014584191 | f | {} 2 | SELECT * FROM t1, t2 WHERE t1.id = t2.id and t1.val < $1 and t2.val > $2; | | Nestloop(t1 t2) Leading((t1 t2)) | -4733464863014584191 | t | {} (2 rows)Panggil fungsi untuk memodifikasi hint.
SELECT hint_plan.upsert_hint_table('/*+ HashJoin(t1 t2) Leading((t1 t2)) */SELECT * FROM t1, t2 WHERE t1.id = t2.id and t1.val < 100 and t2.val > 1;');Informasi berikut dikembalikan:
upsert_hint_table -------------------------------------------------------------------------------------------------------------------------------------------------- (2,"SELECT * FROM t1, t2 WHERE t1.id = t2.id and t1.val < $1 and t2.val > $2;","","HashJoin(t1 t2) Leading((t1 t2)) ",-4733464863014584191,t,{}) (1 row)Minta hint yang dimodifikasi dalam tabel hint_plan.hints.
SELECT * FROM hint_plan.hints;Hint dari pola SQL berubah dari
Nestloop(t1 t2) Leading((t1 t2))menjadiHashJoin(t1 t2) Leading((t1 t2)). Informasi berikut dikembalikan:id | norm_query_string | application_name | hints | query_hash | enable | prepare_param_strings ----+---------------------------------------------------------------------------+------------------+------------------------------------+----------------------+--------+----------------------- 1 | SELECT * FROM t1, t2 WHERE t1.id = t2.id and t1.val < $1 and t2.val > $2; | | MergeJoin(t1 t2) Leading((t1 t2)) | -4733464863014584191 | f | {} 2 | SELECT * FROM t1, t2 WHERE t1.id = t2.id and t1.val < $1 and t2.val > $2; | | HashJoin(t1 t2) Leading((t1 t2)) | -4733464863014584191 | t | {} (2 rows)
Fungsi untuk Menghapus Hint
Hapus hint dengan ID tertentu.
hint_plan.delete_hint_table(<id>)Hapus hint yang didefinisikan oleh pernyataan SQL tertentu, nama hint, dan nama aplikasi.
hint_plan.delete_hint_table(<query>, <hint>, <application_name>)Hapus hint yang didefinisikan oleh pernyataan SQL tertentu dan nama aplikasi.
hint_plan.delete_all_hint_table(<query>, <application_name>)
Parameter
Deskripsi
idID hint dalam tabel hint_plan.hints.
queryPernyataan SQL yang mungkin atau mungkin tidak mengandung hint.
hintHint.
application_nameAplikasi yang terdaftar dengan hint. Nilainya adalah string kosong (
'').Contoh:
Minta tabel hint_plan.hints asli.
SELECT * FROM hint_plan.hints;Informasi berikut dikembalikan:
id | norm_query_string | application_name | hints | query_hash | enable | prepare_param_strings ----+---------------------------------------------------------------------------+------------------+-------------------------------------------------+----------------------+--------+----------------------- 1 | SELECT * FROM t1, t2 WHERE t1.id = t2.id and t1.val < $1 and t2.val > $2; | | MergeJoin(t1 t2) Leading((t1 t2)) | -4733464863014584191 | f | {} 2 | SELECT * FROM t1, t2 WHERE t1.id = t2.id and t1.val < $1 and t2.val > $2; | | HashJoin(t1 t2) Leading((t1 t2)) | -4733464863014584191 | t | {} 3 | select * from t1 join t2 on t1.val = t2.val; | | set(optimizer on) set(rds_optimizer_options 0) | -2169095602568752481 | f | {} 4 | select * from t1 join t2 on t1.val = t2.val; | | set(optimizer off) | -2169095602568752481 | t | {} (4 rows)Hapus hint dengan ID tertentu.
SELECT hint_plan.delete_hint_table(1);Informasi berikut dikembalikan:
WARNING: "max_appendonly_tables": setting is deprecated, and may be removed in a future release. delete_hint_table --------------------------------------------------------------------------------------------------------------------------------------------------- (1,"SELECT * FROM t1, t2 WHERE t1.id = t2.id and t1.val < $1 and t2.val > $2;","","MergeJoin(t1 t2) Leading((t1 t2)) ",-4733464863014584191,f,{}) (1 row)Minta tabel hint_plan.hints dengan hint tertentu dihapus.
SELECT * FROM hint_plan.hints;Informasi berikut dikembalikan:
id | norm_query_string | application_name | hints | query_hash | enable | prepare_param_strings ----+---------------------------------------------------------------------------+------------------+-------------------------------------------------+----------------------+--------+----------------------- 2 | SELECT * FROM t1, t2 WHERE t1.id = t2.id and t1.val < $1 and t2.val > $2; | | HashJoin(t1 t2) Leading((t1 t2)) | -4733464863014584191 | t | {} 3 | select * from t1 join t2 on t1.val = t2.val; | | set(optimizer on) set(rds_optimizer_options 0) | -2169095602568752481 | f | {} 4 | select * from t1 join t2 on t1.val = t2.val; | | set(optimizer off) | -2169095602568752481 | t | {} (3 rows)Hapus hint yang didefinisikan oleh pernyataan SQL tertentu, nama hint, dan nama aplikasi.
SELECT hint_plan.delete_hint_table('SELECT * FROM t1, t2 WHERE t1.id = t2.id and t1.val < 5 and t2.val > 1;', 'HashJoin(t1 t2) Leading((t1 t2))');Informasi berikut dikembalikan:
delete_hint_table -------------------------------------------------------------------------------------------------------------------------------------------------- (2,"SELECT * FROM t1, t2 WHERE t1.id = t2.id and t1.val < $1 and t2.val > $2;","","HashJoin(t1 t2) Leading((t1 t2)) ",-4733464863014584191,t,{}) (1 row)Minta tabel hint_plan.hints dengan hint tertentu dihapus.
SELECT * FROM hint_plan.hints;Informasi berikut dikembalikan:
id | norm_query_string | application_name | hints | query_hash | enable | prepare_param_strings ----+----------------------------------------------+------------------+-------------------------------------------------+----------------------+--------+----------------------- 3 | select * from t1 join t2 on t1.val = t2.val; | | set(optimizer on) set(rds_optimizer_options 0) | -2169095602568752481 | f | {} 4 | select * from t1 join t2 on t1.val = t2.val; | | set(optimizer off) | -2169095602568752481 | t | {} (2 rows)Hapus hint yang didefinisikan oleh pernyataan SQL tertentu dan nama aplikasi.
SELECT hint_plan.delete_all_hint_table('select * from t1 join t2 on t1.val = t2.val;');Informasi berikut dikembalikan:
delete_all_hint_table ----------------------------------------------------------------------------------------------------------------------------------- (3,"select * from t1 join t2 on t1.val = t2.val;","","set(optimizer on) set(rds_optimizer_options 0) ",-2169095602568752481,f,{}) (4,"select * from t1 join t2 on t1.val = t2.val;","","set(optimizer off) ",-2169095602568752481,t,{}) (2 rows)Minta tabel hint_plan.hints dengan hint tertentu dihapus.
SELECT * FROM hint_plan.hints;Informasi berikut dikembalikan:
id | norm_query_string | application_name | hints | query_hash | enable | prepare_param_strings ----+-------------------+------------------+-------+------------+--------+----------------------- (0 rows)
Fungsi untuk Mengaktifkan Hint
Aktifkan hint dengan ID tertentu. Setelah hint tertentu diaktifkan, hint lain untuk pola SQL yang sama tidak diterapkan.
hint_plan.enable_hint_table(<id>)Aktifkan hint yang didefinisikan oleh pernyataan SQL tertentu, nama hint, dan nama aplikasi. Setelah hint tertentu diaktifkan, hint lain untuk pola SQL yang sama dinonaktifkan.
hint_plan.enable_hint_table(<query>, <hint>, <application_name>)Nonaktifkan hint dengan ID tertentu.
hint_plan.disable_hint_table(<id>)Nonaktifkan hint yang didefinisikan oleh pernyataan SQL tertentu, nama hint, dan nama aplikasi.
hint_plan.disable_hint_table(<query>, <hint>, <application_name>)Nonaktifkan hint yang didefinisikan oleh pernyataan SQL tertentu dan nama aplikasi.
hint_plan.disable_all_hint_table(<query>, <application_name>)
Parameter
Deskripsi
idID hint dalam tabel hint_plan.hints.
queryPernyataan SQL yang mungkin atau mungkin tidak mengandung hint.
hintHint.
application_nameAplikasi yang terdaftar dengan hint. Nilainya adalah string kosong (
'').Contoh:
Minta tabel hint_plan.hints asli.
SELECT * FROM hint_plan.hints;Informasi berikut dikembalikan:
id | norm_query_string | application_name | hints | query_hash | enable | prepare_param_strings ----+----------------------------------------------+------------------+-------------------------------------------------+----------------------+--------+----------------------- 5 | select * from t1 join t2 on t1.val = t2.val; | | set(optimizer off) | -2169095602568752481 | f | {} 6 | select * from t1 join t2 on t1.val = t2.val; | | set(optimizer on) set(rds_optimizer_options 0) | -2169095602568752481 | t | {} (2 rows)Nonaktifkan hint dengan ID tertentu.
SELECT hint_plan.disable_hint_table(6);Informasi berikut dikembalikan:
disable_hint_table ----------------------------------------------------------------------------------------------------------------------------------- (6,"select * from t1 join t2 on t1.val = t2.val;","","set(optimizer on) set(rds_optimizer_options 0) ",-2169095602568752481,f,{}) (1 row)Minta tabel hint_plan.hints dengan hint tertentu dinonaktifkan.
SELECT * FROM hint_plan.hints;Informasi berikut dikembalikan:
id | norm_query_string | application_name | hints | query_hash | enable | prepare_param_strings ----+----------------------------------------------+------------------+-------------------------------------------------+----------------------+--------+----------------------- 5 | select * from t1 join t2 on t1.val = t2.val; | | set(optimizer off) | -2169095602568752481 | f | {} 6 | select * from t1 join t2 on t1.val = t2.val; | | set(optimizer on) set(rds_optimizer_options 0) | -2169095602568752481 | f | {} (2 rows)Aktifkan hint dengan ID tertentu.
SELECT hint_plan.enable_hint_table(5);Informasi berikut dikembalikan:
enable_hint_table ------------------------------------------------------------------------------------------------------- (5,"select * from t1 join t2 on t1.val = t2.val;","","set(optimizer off) ",-2169095602568752481,t,{}) (1 row)Minta tabel hint_plan.hints dengan hint tertentu diaktifkan.
SELECT * FROM hint_plan.hints;Informasi berikut dikembalikan:
id | norm_query_string | application_name | hints | query_hash | enable | prepare_param_strings ----+----------------------------------------------+------------------+-------------------------------------------------+----------------------+--------+----------------------- 6 | select * from t1 join t2 on t1.val = t2.val; | | set(optimizer on) set(rds_optimizer_options 0) | -2169095602568752481 | f | {} 5 | select * from t1 join t2 on t1.val = t2.val; | | set(optimizer off) | -2169095602568752481 | t | {} (2 rows)Aktifkan hint yang didefinisikan oleh pernyataan SQL tertentu dan nama aplikasi.
SELECT hint_plan.enable_hint_table('select * from t1 join t2 on t1.val = t2.val;', 'set(optimizer off)');Informasi berikut dikembalikan:
enable_hint_table ------------------------------------------------------------------------------------------------------- (5,"select * from t1 join t2 on t1.val = t2.val;","","set(optimizer off) ",-2169095602568752481,t,{}) (1 row)Minta tabel hint_plan.hints dengan hint tertentu diaktifkan.
SELECT * FROM hint_plan.hints;Informasi berikut dikembalikan:
id | norm_query_string | application_name | hints | query_hash | enable | prepare_param_strings ----+----------------------------------------------+------------------+-------------------------------------------------+----------------------+--------+----------------------- 6 | select * from t1 join t2 on t1.val = t2.val; | | set(optimizer on) set(rds_optimizer_options 0) | -2169095602568752481 | f | {} 5 | select * from t1 join t2 on t1.val = t2.val; | | set(optimizer off) | -2169095602568752481 | t | {} (2 rows)
Copot pemasangan ekstensi pg_hint_plan
Jika Anda tidak lagi memerlukan fitur hint, jalankan pernyataan berikut untuk mencopot pemasangan ekstensi pg_hint_plan:
DROP EXTENSION pg_hint_plan;