Mengelola paket kueri

Dokumen ini menjelaskan cara meningkatkan performa rencana kueri menggunakan pengelolaan rencana kueri di AlloyDB untuk PostgreSQL. Pengelolaan rencana kueri terus melacak semua rencana kueri dan statistik eksekusinya di database Anda. Setelah meninjau kueri dan biaya yang terkait dengannya, Anda dapat menyetujui rencana, yang diterapkan secara konsisten untuk kueri tertentu. Pendekatan ini memastikan pemilihan rencana 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, pemilihan paket kueri secara dinamis mungkin tidak selalu memberikan hasil yang optimal. Saat memproses kueri, pengoptimal mengevaluasi berbagai rencana eksekusi dan mencoba memilih rencana 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 rencana kueri membantu Anda memahami pola dan rencana yang dihasilkan oleh pengoptimal, dan memungkinkan Anda melihat setiap rencana untuk pengambilan keputusan yang tepat.

Dua komponen utama pengelolaan rencana kueri adalah sebagai berikut:

Repositori paket kueri
Saat Anda mengaktifkan pengelolaan rencana kueri untuk database, repositori rencana akan mulai melacak rencana historis dan statistik eksekusi di database Anda. Repositori paket kueri memberikan kemampuan observasi tentang performa paket kueri.
Pengelolaan paket
Setelah meninjau rencana yang tersedia, komponen pengelolaan rencana memungkinkan Anda menyetujui satu atau beberapa rencana untuk template kueri tertentu. Pengelolaan rencana kueri melacak rencana yang disetujui ini dan memastikan bahwa saat kueri dieksekusi selanjutnya, pengoptimal kueri hanya menggunakan salah satu rencana yang disetujui. Jika beberapa rencana disetujui, AlloyDB akan memilih dan mengeksekusi rencana dengan perkiraan biaya terendah.

Sebelum memulai

  • Tetapkan flag database google_plan_management.enabled ke on. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi flag database.
  • Buat ekstensi google_plan_management di database. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan ekstensi.
  • Berikan google_plan_management_role kepada pengguna database yang ingin menggunakan pengelolaan rencana kueri dan mengelola rencana kueri.

    1. Di konsol Google Cloud , buka halaman Clusters AlloyDB.

      Buka Cluster

    2. Klik instance yang diperlukan.

    3. Klik AlloyDB Studio, lalu klik tab Editor 1.

    4. Masukkan kueri berikut:

      GRANT google_plan_management_role TO DATABASE_USER;
      

      Ganti DATABASE_USER dengan pengguna yang ingin Anda beri peran.

    5. Klik Run.

Melihat paket kueri yang dipantau

Pengelolaan rencana kueri menyediakan tampilan rencana kueri yang menampilkan semua rencana 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 rencana yang dilacak secara historis, jalankan kueri berikut:

SELECT * FROM google_plan_management.tracked_plans_view;

Respons kuerinya 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 rencana kueri

Jika Anda tidak ingin pengelolaan paket kueri melacak paket kueri yang dihasilkan oleh pengoptimal, Anda harus menonaktifkan tanda google_plan_management.enable_track_plans database. Flag ini diaktifkan secara default, dan sebaiknya Anda tetap mengaktifkannya. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi flag database.

Melihat paket terkelola

Anda dapat melihat semua kueri dan rencana yang dikelola oleh pengelolaan rencana kueri, termasuk rencana yang disetujui dan ditolak.

Untuk melihat rencana 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 rencana

Pengoptimal memilih paket kueri secara dinamis, yang berarti pengoptimal dapat memilih paket kueri yang berbeda untuk kueri yang sama pada waktu yang berbeda. Untuk menerapkan pemilihan rencana yang konsisten, Anda dapat menggunakan pengelolaan rencana kueri untuk menyetujui satu atau beberapa rencana kueri untuk kueri tertentu.

Jika Anda menyetujui beberapa rencana, maka pengelolaan rencana kueri akan membandingkan semua rencana yang disetujui dan memilih rencana yang paling hemat biaya untuk eksekusi kueri.

Untuk mengevaluasi dan menyetujui rencana untuk kueri, ikuti langkah-langkah berikut:

  1. Lihat rencana yang dilacak yang dibuat pengoptimal dan identifikasi logical_query_id dalam respons.

  2. Tinjau semua rencana yang dibuat untuk logical_query_id. Anda dapat menghitung waktu eksekusi rata-rata untuk setiap rencana menggunakan nilai total_execution_time dan num_executions, lalu memutuskan rencana terbaik untuk kueri Anda.

    Kolom plan menyertakan detail lain seperti indeks yang digunakan atau metode pengurutan yang digunakan yang dapat membantu Anda memutuskan rencana kueri.

  3. Setujui rencana 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_id unik untuk kueri. Setiap ID kueri dapat dikaitkan dengan beberapa ID paket.
    • PLAN_ID: plan_id unik untuk kueri.

Menolak rencana

Anda dapat menolak rencana yang disetujui untuk kueri dan menghentikan pengelolaan rencana kueri agar tidak menerapkan rencana ke kueri. Paket yang ditolak tidak dihapus, dan tersedia dalam daftar paket yang dilacak.

Untuk menolak rencana yang disetujui, jalankan kueri berikut:

    SELECT google_plan_management.deny_plan(QUERY_ID, PLAN_ID);

Menghapus rencana yang disetujui

Anda dapat menghapus rencana yang disetujui dari repositori rencana. Saat Anda menghapus rencana yang disetujui, rencana tersebut tidak akan muncul lagi dalam daftar rencana terkelola.

Untuk menghapus rencana 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 menghentikan penggunaan rencana yang disetujui untuk kueri Anda secara sementara, Anda harus menonaktifkan tanda 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 rencana kueri di tabel berpartisi atau set pengelompokan.
  • Pengelolaan rencana kueri hanya didukung di instance utama.
  • Repositori rencana kueri dapat menyimpan hingga 100 ribu rencana unik, dan tidak menyediakan kebijakan retensi.

Langkah berikutnya