Menggunakan rencana terkelola Aurora PostgreSQL - Amazon Aurora

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan rencana terkelola Aurora PostgreSQL

Agar pengoptimisasi menggunakan rencana yang diambil untuk pernyataan terkelola Anda, atur parameter apg_plan_mgmt.use_plan_baselines ke true. Berikut ini adalah contoh instans lokal.

SET apg_plan_mgmt.use_plan_baselines = true;

Sementara aplikasi berjalan, pengaturan ini menyebabkan pengoptimisasi menggunakan rencana berbiaya minimum, pilihan, atau disetujui yang valid dan diaktifkan untuk setiap pernyataan terkelola.

Menganalisis rencana yang dipilih pengoptimisasi

Jika parameter apg_plan_mgmt.use_plan_baselines diatur ke true, Anda dapat menggunakan pernyataan SQL EXPLAIN ANALYZE untuk membuat pengoptimisasi menampilkan rencana yang akan digunakan jika pengoptimisasi akan menjalankan pernyataan tersebut. Berikut adalah contohnya.

EXPLAIN ANALYZE EXECUTE rangeQuery (1,10000);
QUERY PLAN -------------------------------------------------------------------------- Aggregate (cost=393.29..393.30 rows=1 width=8) (actual time=7.251..7.251 rows=1 loops=1) -> Index Only Scan using t1_pkey on t1 t (cost=0.29..368.29 rows=10000 width=0) (actual time=0.061..4.859 rows=10000 loops=1) Index Cond: ((id >= 1) AND (id <= 10000)) Heap Fetches: 10000 Planning time: 1.408 ms Execution time: 7.291 ms Note: An Approved plan was used instead of the minimum cost plan. SQL Hash: 1984047223, Plan Hash: 512153379

Output ini menunjukkan rencana yang Disetujui dari acuan dasar (baseline) yang akan berjalan. Namun, output ini juga menunjukkan bahwa rencana yang berbiaya lebih rendah ditemukan. Dalam hal ini, Anda perlu mengambil rencana berbiaya minimum yang baru ini dengan mengaktifkan pengambilan rencana otomatis seperti yang dijelaskan dalam Mengambil rencana secara otomatis.

Rencana baru selalu diambil oleh pengoptimisasi sebagai Unapproved. Gunakan fungsi apg_plan_mgmt.evolve_plan_baselines untuk membandingkan rencana dan mengubahnya menjadi disetujui, ditolak, atau dinonaktifkan. Untuk informasi selengkapnya, lihat Mengevaluasi performa rencana.

Bagaimana cara pengoptimisasi memilih rencana yang akan dijalankan

Biaya rencana eksekusi adalah perkiraan yang dibuat oleh pengoptimisasi untuk membandingkan beberapa rencana yang berbeda. Saat menghitung biaya rencana, pengoptimisasi mempertimbangkan faktor-faktor seperti operasi CPU dan I/O yang diperlukan oleh rencana tersebut. Untuk mempelajari selengkapnya tentang perkiraan biaya perencana kueri PostgreSQL, lihat Query Planning dalam dokumentasi PostgreSQL.

Gambar berikut menunjukkan bagaimana rencana dipilih untuk pernyataan SQL tertentu ketika manajemen rencana kueri aktif, dan ketika tidak.

Alur kerja manajemen rencana kueri Aurora PostgreSQL

Alurnya adalah sebagai berikut:

  1. Pengoptimisasi menghasilkan rencana berbiaya minimum untuk pernyataan SQL.

  2. Jika manajemen rencana kueri tidak aktif, rencana pengoptimisasi akan segera dijalankan (A. Jalankan rencana Pengoptimisasi). Manajemen rencana kueri tidak aktif ketika parameter apg_plan_mgmt.capture_plan_baselines dan apg_plan_mgmt.use_plan_baselines berada pada pengaturan default-nya (masing-masing “off” dan “false”).

    Jika tidak, manajemen rencana kueri aktif. Dalam hal ini, pernyataan SQL dan rencana pengoptimisasi untuk pernyataan tersebut akan dinilai lebih lanjut sebelum rencana dipilih.

    Tip

    Pengguna basis data dengan peran apg_plan_mgmt dapat secara proaktif membandingkan rencana, mengubah status rencana, dan memaksa penggunaan rencana tertentu sesuai kebutuhan. Untuk informasi selengkapnya, lihat Mengelola rencana eksekusi Aurora PostgreSQL.

  3. Pernyataan SQL mungkin sudah memiliki rencana yang disimpan oleh manajemen rencana kueri di masa lalu. Rencana disimpan di apg_plan_mgmt.dba_plans, bersama dengan informasi tentang pernyataan SQL yang digunakan untuk membuatnya. Informasi tentang rencana akan menyertakan statusnya. Status rencana dapat menentukan apakah rencana tersebut digunakan atau tidak, sebagai berikut.

    1. Jika rencana tidak termasuk di antara rencana yang disimpan untuk pernyataan SQL, berarti ini adalah pertama kalinya rencana spesifik ini dihasilkan oleh pengoptimisasi untuk pernyataan SQL yang diberikan. Rencana dikirim ke Pemrosesan Pengambilan Rencana (4).

    2. Jika rencana termasuk di antara rencana yang disimpan dan statusnya Disetujui atau Pilihan, rencana ini akan dijalankan (A. Jalankan rencana Pengoptimisasi).

      Jika rencana termasuk di antara rencana yang disimpan, tetapi tidak berstatus Disetujui atau Pilihan, rencana ini akan dikirim ke Pemrosesan Pengambilan Rencana (4).

  4. Ketika rencana diambil pertama kalinya untuk pernyataan SQL tertentu, status rencana ini selalu diatur ke Disetujui (P1). Jika pengoptimisasi selanjutnya menghasilkan rencana yang sama untuk pernyataan SQL yang sama, status rencana tersebut diubah menjadi Tidak Disetujui (P1+n).

    Dengan rencana diambil dan statusnya diperbarui, evaluasi berlanjut pada langkah berikutnya (5).

  5. Acuan dasar rencana terdiri dari riwayat pernyataan SQL dan rencananya dalam berbagai status. Manajemen rencana kueri dapat mempertimbangkan acuan dasar ini saat memilih rencana, tergantung pada apakah opsi Gunakan acuan dasar rencana diaktifkan atau tidak, sebagai berikut.

    • Gunakan acuan dasar rencana “tidak aktif” ketika parameter apg_plan_mgmt.use_plan_baselines diatur ke nilai default (false). Rencana ini tidak akan dibandingkan dengan acuan dasar (baseline) sebelum dijalankan (A. Jalankan rencana Pengoptimisasi).

    • Gunakan acuan dasar rencana “aktif” saat parameter apg_plan_mgmt.use_plan_baselines diatur ke true. Rencana tersebut dinilai lebih lanjut menggunakan acuan dasar (6).

  6. Rencana tersebut dibandingkan dengan rencana lain untuk pernyataan di acuan dasar.

    1. Jika rencana pengoptimisasi termasuk di antara rencana di acuan dasar, statusnya diperiksa (7a).

    2. Jika rencana pengoptimisasi tidak termasuk di antara rencana dalam acuan dasar, rencana ini akan ditambahkan ke rencana untuk pernyataan tersebut sebagai rencana Unapproved baru.

  7. Status rencana diperiksa hanya untuk menentukan apakah statusnya Tidak Disetujui.

    1. Jika status rencana Tidak Disetujui, perkiraan biaya rencana ini dibandingkan dengan perkiraan biaya yang ditentukan untuk ambang batas rencana eksekusi yang tidak disetujui.

      • Jika perkiraan biaya rencana di bawah ambang batas, pengoptimisasi akan menggunakannya meskipun rencana ini Tidak Disetujui (A. Jalankan rencana Pengoptimisasi). Umumnya, pengoptimisasi tidak akan menjalankan rencana yang Tidak Disetujui. Namun, ketika parameter apg_plan_mgmt.unapproved_plan_execution_threshold menentukan nilai ambang batas biaya, pengoptimisasi akan membandingkan biaya rencana yang Tidak Disetujui dengan ambang batas ini. Jika perkiraan biaya lebih rendah dari ambang batas, pengoptimisasi akan menjalankan rencana. Untuk informasi selengkapnya, lihat apg_plan_mgmt.unapproved_plan_execution_threshold.

      • Jika perkiraan biaya rencana tidak di bawah ambang batas, atribut lainnya dari rencana ini akan diperiksa (8a).

    2. Jika status rencana adalah apa pun selain Tidak Disetujui, atribut lainnya akan diperiksa (8a).

  8. Pengoptimisasi tidak akan menggunakan rencana yang dinonaktifkan. Rencana yang dinonaktifkan adalah rencana yang atribut enable-nya diatur ke 'f' (false). Pengoptimisasi juga tidak akan menggunakan rencana yang memiliki status Ditolak.

    Pengoptimisasi tidak dapat menggunakan rencana apa pun yang tidak valid. Rencana dapat menjadi tidak valid dari waktu ke waktu ketika objek yang diandalkannya, misalnya indeks dan partisi tabel, dihapus.

    1. Jika pernyataan memiliki rencana Pilihan yang diaktifkan dan valid, pengoptimisasi akan memilih rencana berbiaya minimum di antara rencana Pilihan yang disimpan untuk pernyataan SQL ini. Pengoptimisasi kemudian menjalankan rencana Pilihan berbiaya minimum.

    2. Jika pernyataan tidak memiliki rencana Pilihan yang diaktifkan dan valid, pernyataan ini akan dinilai pada langkah berikutnya (9).

  9. Jika pernyataan memiliki rencana Disetujui yang diaktifkan dan valid, pengoptimisasi akan memilih rencana berbiaya minimum dari berbagai rencana Disetujui yang disimpan untuk pernyataan SQL ini. Pengoptimisasi kemudian menjalankan rencana berbiaya minimum yang Disetujui.

    Jika pernyataan tidak memiliki rencana Disetujui yang valid dan diaktifkan, pengoptimisasi akan menggunakan rencana berbiaya minimum (A. Jalankan rencana Pengoptimisasi).