Dokumen ini menjelaskan cara meningkatkan performa paket kueri menggunakan pengelolaan paket kueri di AlloyDB untuk PostgreSQL. Pengelolaan paket kueri terus melacak semua paket kueri dan statistik eksekusinya di database Anda. Setelah meninjau kueri dan biaya yang terkait dengannya, Anda dapat menyetujui paket yang diterapkan secara konsisten untuk kueri tertentu. Pendekatan ini memastikan pemilihan paket kueri yang hemat biaya sehingga meningkatkan performa kueri.
Cara kerjanya
Di PostgreSQL, pengoptimal kueri memilih rencana eksekusi untuk setiap kueri berdasarkan perkiraan biaya. Banyak faktor yang memengaruhi biaya kueri—misalnya, parameter kueri, kompleksitas kueri, ukuran tabel, indeks yang tersedia, dan resource sistem.
Karena parameter kueri dapat berubah dengan setiap kueri yang dijalankan, memilih paket kueri secara dinamis mungkin tidak selalu menghasilkan hasil yang optimal. Saat memproses kueri, pengoptimal mengevaluasi berbagai paket eksekusi dan mencoba memilih paket yang paling hemat biaya.
Perubahan parameter dapat menyebabkan perubahan paket. Meskipun paket yang dipilih biasanya merupakan opsi yang paling hemat biaya, mungkin ada kasus ketika paket yang kurang hemat biaya dipilih, yang mengakibatkan performa kueri yang buruk. Pengelolaan paket kueri membantu Anda memahami pola dan paket yang dihasilkan oleh pengoptimal, serta memungkinkan Anda melihat setiap paket untuk pengambilan keputusan yang tepat.
Dua komponen utama pengelolaan paket kueri adalah sebagai berikut:
- Repositori rencana kueri
- Saat Anda mengaktifkan pengelolaan paket kueri untuk database, repositori paket akan mulai melacak statistik eksekusi dan paket historis di database Anda. Repositori paket kueri memberikan observabilitas tentang performa paket kueri.
- Pengelolaan paket
- Setelah meninjau paket yang tersedia, komponen pengelolaan paket memungkinkan Anda menyetujui satu atau beberapa paket untuk template kueri tertentu. Pengelolaan paket kueri melacak paket yang disetujui ini dan memastikan bahwa saat kueri dieksekusi berikutnya, pengoptimal kueri hanya menggunakan salah satu paket yang disetujui. Jika beberapa paket disetujui, AlloyDB akan memilih dan menjalankan paket dengan perkiraan biaya terendah.
Sebelum memulai
- Tetapkan flag database
google_plan_management.enabledkeon. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi flag database. - Buat ekstensi
google_plan_managementdi database. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan ekstensi. Berikan
google_plan_management_rolekepada pengguna database yang ingin menggunakan pengelolaan paket kueri dan mengelola paket kueri.Di Google Cloud konsol, buka halaman Cluster AlloyDB.
Klik instance yang diperlukan.
Klik AlloyDB Studio, lalu klik tab Editor 1.
Masukkan kueri berikut:
GRANT google_plan_management_role TO DATABASE_USER;Ganti
DATABASE_USERdengan pengguna yang ingin Anda berikan peran.Klik Run.
Melihat paket kueri yang dilacak
Pengelolaan paket kueri menyediakan tampilan paket kueri yang menampilkan semua paket kueri yang dilacak, waktu eksekusinya, dan informasi lainnya. Rencana kueri yang dilacak adalah rencana kueri yang dihasilkan oleh pengoptimal dan disimpan di repositori rencana.
Untuk melihat paket historis yang dilacak, jalankan kueri berikut:
SELECT * FROM google_plan_management.tracked_plans_view;
Respons kueri mirip dengan berikut ini:
db_id | 5
db_name | postgres
user_id | 16392
user_name | postgres
logical_query_id | 15480571796188147798
plan_id | 4740866759615354783
query | SELECT c1, c2, c3 FROM t1 WHERE c1 = 1;
plan | Seq Scan on public.t1 +
| Output: c1, c2, c3 +
| Filter: (t1.c1 = ?)
total_execution_time | 0.003937501
num_executions | 1
creation_time | 2024-11-06 16:52:25.200737+00
last_used_time | 2024-11-06 16:52:25.200737+00
Menonaktifkan pelacakan paket kueri
Jika Anda tidak ingin pengelolaan paket kueri melacak paket kueri yang dihasilkan oleh pengoptimal, Anda harus menonaktifkan flag database google_plan_management.enable_track_plans. Flag ini diaktifkan secara default, dan sebaiknya tetap aktif. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi
flag database.
Melihat paket terkelola
Anda dapat melihat semua kueri dan paket yang dikelola oleh pengelolaan paket kueri, termasuk paket yang disetujui dan ditolak.
Untuk melihat paket terkelola, jalankan kueri berikut:
SELECT * FROM google_plan_management.managed_plans_view;
Respons kueri mirip dengan berikut ini:
db_id | 5
db_name | postgres
user_id | 16392
user_name | postgres
logical_query_id | 15480571796188147798
plan_id | 4740866759615354783
status | approved
Menyetujui paket
Pengoptimal memilih rencana kueri secara dinamis, yang berarti pengoptimal dapat memilih rencana kueri yang berbeda untuk kueri yang sama pada waktu yang berbeda. Untuk menerapkan pemilihan paket yang konsisten, Anda dapat menggunakan pengelolaan paket kueri untuk menyetujui satu atau beberapa paket kueri untuk kueri tertentu.
Jika Anda menyetujui beberapa paket, pengelolaan paket kueri akan membandingkan semua paket yang disetujui dan memilih paket yang paling hemat biaya untuk eksekusi kueri.
Untuk mengevaluasi dan menyetujui paket untuk kueri, ikuti langkah-langkah berikut:
Lihat paket yang dilacak yang dihasilkan oleh pengoptimal dan identifikasi
logical_query_iddalam respons.Tinjau semua paket yang dihasilkan untuk
logical_query_id. Anda dapat menghitung waktu eksekusi rata-rata untuk setiap paket menggunakan nilaitotal_execution_timedannum_executions, lalu menentukan paket terbaik untuk kueri Anda.Kolom
planmencakup detail lainnya seperti indeks yang digunakan atau metode pengurutan yang digunakan yang dapat membantu Anda memutuskan paket kueri.Setujui paket yang ingin Anda terapkan ke kueri dengan menjalankan kueri berikut:
SELECT google_plan_management.approve_plan(QUERY_ID, PLAN_ID);Ganti kode berikut:
QUERY_ID:logical_query_idunik untuk kueri. Setiap ID kueri dapat dikaitkan dengan beberapa ID paket.PLAN_ID:plan_idunik untuk kueri.
Menolak paket
Anda dapat menolak paket yang disetujui untuk kueri dan menghentikan pengelolaan paket kueri agar tidak menerapkan paket ke kueri. Paket yang ditolak tidak dihapus, dan tersedia dalam daftar paket yang dilacak.
Untuk menolak paket yang disetujui, jalankan kueri berikut:
SELECT google_plan_management.deny_plan(QUERY_ID, PLAN_ID);
Menghapus paket yang disetujui
Anda dapat menghapus paket yang disetujui dari repositori paket. Saat Anda menghapus paket yang disetujui, paket tersebut tidak akan muncul lagi dalam daftar paket terkelola.
Untuk menghapus paket yang disetujui, jalankan kueri berikut:
SELECT google_plan_management.update_plan_status(QUERY_ID, PLAN_ID, 'delete');
Berhenti menggunakan paket yang disetujui untuk sementara
Jika Anda ingin berhenti menggunakan paket yang disetujui untuk kueri Anda untuk sementara, Anda harus menonaktifkan flag database google_plan_management.enable_steer_plans.
Flag ini diaktifkan secara default. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi flag
database.
Batasan
- Anda tidak dapat menggunakan pengelolaan paket kueri dalam tabel berpartisi atau set pengelompokan.
- Pengelolaan paket kueri hanya didukung di instance utama.
- Repositori paket kueri dapat menyimpan hingga 100 ribu paket unik, dan tidak menyediakan kebijakan retensi.