

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

# Gambaran umum manajemen rencana kueri Aurora PostgreSQL
<a name="AuroraPostgreSQL.Optimize.overview"></a>

Manajemen rencana kueri Aurora PostgreSQL dirancang untuk memastikan stabilitas rencana terlepas dari perubahan pada basis data yang dapat menyebabkan regresi rencana kueri. *Regresi rencana kueri* terjadi ketika pengoptimal memilih rencana yang kurang optimal untuk pernyataan SQL yang diberikan setelah perubahan sistem atau basis data. Perubahan pada statistik, pembatasan, pengaturan lingkungan, pengikatan parameter kueri, dan peningkatan ke mesin basis data PostgreSQL semuanya dapat menyebabkan regresi rencana.

Dengan manajemen rencana kueri Aurora PostgreSQL, Anda dapat mengendalikan bagaimana dan kapan rencana eksekusi kueri akan berubah. Manfaat manajemen rencana kueri Aurora PostgreSQL meliputi yang berikut ini. 
+ Meningkatkan stabilitas rencana dengan memaksa pengoptimal untuk memilih dari sejumlah kecil rencana yang sudah diketahui bagus.
+ Mengoptimalkan rencana secara terpusat lalu mendistribusikan rencana terbaik secara global.
+ Mengidentifikasi indeks yang tidak digunakan dan menilai dampak dari membuat atau menghapus indeks.
+ Secara otomatis mendeteksi rencana biaya minimum baru yang ditemukan oleh pengoptimal.
+ Mencoba fitur-fitur pengoptimal baru dengan risiko lebih rendah karena Anda dapat memilih untuk hanya menyetujui perubahan rencana yang meningkatkan performa.

Anda dapat menggunakan alat yang disediakan oleh manajemen rencana kueri secara proaktif untuk menentukan rencana terbaik untuk kueri tertentu. Atau, Anda dapat menggunakan manajemen rencana kueri untuk bereaksi terhadap perubahan keadaan dan menghindari regresi rencana. Untuk informasi selengkapnya, lihat [Praktik terbaik untuk manajemen rencana kueri Aurora PostgreSQL](AuroraPostgreSQL.Optimize.BestPractice.md). 

**Topics**
+ [Pernyataan SQL yang didukung](#AuroraPostgreSQL.Optimize.overview.features)
+ [Batasan manajemen rencana kueri](#AuroraPostgreSQL.Optimize.overview.limitations)
+ [Terminologi manajemen rencana kueri](#AuroraPostgreSQL.Optimize.Start-terminology)
+ [Versi manajemen rencana kueri Aurora PostgreSQL](#AuroraPostgreSQL.Optimize.overview.versions)
+ [Mengaktifkan manajemen rencana kueri Aurora PostgreSQL](#AuroraPostgreSQL.Optimize.Enable)
+ [Meningkatkan manajemen rencana kueri Aurora PostgreSQL](#AuroraPostgreSQL.Optimize.Upgrade)
+ [Menonaktifkan manajemen rencana kueri Aurora PostgreSQL](#AuroraPostgreSQL.Optimize.Enable.turnoff)

## Pernyataan SQL yang didukung
<a name="AuroraPostgreSQL.Optimize.overview.features"></a>

Manajemen rencana kueri mendukung jenis pernyataan SQL berikut.
+ Pernyataan SELECT, INSERT, UPDATE, atau DELETE, terlepas dari kompleksitasnya. 
+ Pernyataan yang disiapkan. Untuk informasi selengkapnya, lihat [PREPARE](https://www.postgresql.org/docs/14/sql-prepare.html) dalam dokumentasi PostgreSQL.
+ Pernyataan dinamis, termasuk yang dijalankan dalam mode segera. Untuk informasi selengkapnya, lihat [Dynamic SQL](https://www.postgresql.org/docs/current/ecpg-dynamic.html) dan [EXECUTE IMMEDIATE](https://www.postgresql.org/docs/current/ecpg-sql-execute-immediate.html) dalam dokumentasi PostgreSQL. 
+ Perintah dan pernyataan SQL tersemat. Untuk informasi selengkapnya, lihat [Embedded SQL Commands](https://www.postgresql.org/docs/current/ecpg-sql-commands.html) dalam dokumentasi PostgreSQL.
+ Pernyataan di dalam fungsi bernama. Untuk informasi selengkapnya, lihat [CREATE FUNCTION](https://www.postgresql.org/docs/current/sql-createfunction.html) dalam dokumentasi PostgreSQL. 
+ Pernyataan yang berisi tabel temp.
+ Pernyataan di dalam prosedur dan DO-block.

Anda dapat menggunakan manajemen rencana kueri dengan `EXPLAIN` dalam mode manual untuk menangkap rencana tanpa benar-benar menjalankannya. Untuk informasi selengkapnya, lihat [Menganalisis rencana yang dipilih pengoptimisasi](AuroraPostgreSQL.Optimize.UsePlans.md#AuroraPostgreSQL.Optimize.UsePlans.AnalyzePlans). Untuk mempelajari selengkapnya tentang mode manajemen rencana kueri (manual, otomatis), lihat [Mengambil rencana eksekusi Aurora PostgreSQL](AuroraPostgreSQL.Optimize.CapturePlans.md).

Manajemen rencana kueri Aurora PostgreSQL mendukung semua fitur bahasa PostgreSQL, termasuk tabel yang dipartisi, pewarisan, keamanan tingkat baris, dan ekspresi tabel umum rekursif (). CTEs Untuk mempelajari selengkapnya tentang fitur bahasa PostgreSQL ini, lihat [Table Partitioning](https://www.postgresql.org/docs/current/ddl-partitioning.html), [Row Security Policies](https://www.postgresql.org/docs/current/ddl-rowsecurity.html), dan [WITH Queries (Common Table Expressions)](https://www.postgresql.org/docs/current/queries-with.html) serta topik lainnya dalam dokumentasi PostgreSQL. 

Untuk informasi tentang berbagai versi fitur manajemen rencana kueri Aurora PostgreSQL, lihat [Aurora PostgreSQL versi ekstensi apg\$1plan\$1mgmt](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/AuroraPostgreSQL.Extensions.html#AuroraPostgreSQL.Extensions.apg_plan_mgmt) dalam *Catatan Rilis untuk Aurora PostgreSQL*.

## Batasan manajemen rencana kueri
<a name="AuroraPostgreSQL.Optimize.overview.limitations"></a>

Rilis manajemen rencana kueri Aurora PostgreSQL saat ini memiliki batasan berikut. 
+ **Rencana tidak ditangkap untuk pernyataan yang mereferensikan relasi sistem** – Pernyataan yang mereferensikan relasi sistem, seperti `pg_class`, tidak ditangkap. Hal ini berlaku berdasarkan desain untuk mencegah sejumlah besar rencana yang dihasilkan sistem yang digunakan secara internal agar tidak ditangkap. Hal ini juga berlaku untuk tabel sistem dalam tampilan.
+ **Kelas instans DB yang lebih besar mungkin diperlukan untuk cluster Aurora PostgreSQL DB Anda** — Bergantung pada beban kerja, manajemen rencana kueri mungkin memerlukan kelas instans DB yang memiliki lebih dari 2 v. CPUs Jumlah `max_worker_processes` dibatasi oleh ukuran kelas instans DB. Jumlah `max_worker_processes` yang disediakan oleh kelas instans DB 2-vCPU (db.t3.medium, misalnya) mungkin tidak cukup untuk beban kerja tertentu. Kami menyarankan Anda memilih kelas instans DB dengan lebih dari 2 v CPUs untuk klaster Aurora PostgreSQL DB Anda jika Anda menggunakan manajemen rencana kueri.

  Ketika kelas instans DB tidak dapat mendukung beban kerja, manajemen rencana kueri memunculkan pesan kesalahan seperti berikut ini. 

  ```
  WARNING: could not register plan insert background process
  HINT: You may need to increase max_worker_processes.
  ```

  Dalam hal ini, Anda harus menaikkan skala klaster DB Aurora PostgreSQL Anda ke ukuran kelas instans DB dengan lebih banyak memori. Untuk informasi selengkapnya, lihat [Mesin DB yang didukung untuk kelas instans DB](Concepts.DBInstanceClass.SupportAurora.md).
+ **Rencana yang sudah disimpan dalam sesi tidak terpengaruh** – Manajemen rencana kueri menyediakan cara untuk memengaruhi rencana kueri tanpa mengubah kode aplikasi. Namun, ketika rencana generik sudah disimpan dalam sesi yang ada dan jika Anda ingin mengubah rencana kueri, maka Anda harus terlebih dahulu mengatur `plan_cache_mode` ke `force_custom_plan` dalam grup parameter klaster DB.
+ `queryid` di `apg_plan_mgmt.dba_plans` dan `pg_stat_statements` dapat menyimpang ketika:
  + Objek dihapus dan dibuat ulang setelah disimpan dalam apg\$1plan\$1mgmt.dba\$1plans.
  + Tabel `apg_plan_mgmt.plans` diimpor dari klaster lain.

Untuk informasi tentang berbagai versi fitur manajemen rencana kueri Aurora PostgreSQL, lihat [Aurora PostgreSQL versi ekstensi apg\$1plan\$1mgmt](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/AuroraPostgreSQL.Extensions.html#AuroraPostgreSQL.Extensions.apg_plan_mgmt) dalam *Catatan Rilis untuk Aurora PostgreSQL*.

## Terminologi manajemen rencana kueri
<a name="AuroraPostgreSQL.Optimize.Start-terminology"></a>

Istilah berikut digunakan di seluruh topik ini: 

**pernyataan terkelola**  
Pernyataan SQL yang ditangkap oleh pengoptimal dalam manajemen rencana kueri. Pernyataan terkelola memiliki satu atau beberapa rencana eksekusi kueri yang disimpan dalam tampilan `apg_plan_mgmt.dba_plans`.

**acuan dasar rencana**  
Kumpulan rencana yang disetujui untuk pernyataan terkelola tertentu. Artinya, semua rencana untuk pernyataan terkelola yang telah “Disetujui” untuk kolom `status`-nya dalam tampilan `dba_plan`. 

**riwayat rencana**  
Kumpulan semua rencana yang ditangkap untuk suatu pernyataan terkelola tertentu. Riwayat rencana berisi semua rencana yang ditangkap untuk pernyataan tersebut, terlepas dari statusnya. 

**regresi rencana kueri**  
Kasus ketika pengoptimal memilih rencana yang kurang optimal dibandingkan dengan sebelum perubahan tertentu dilakukan pada lingkungan basis data, seperti versi PostgreSQL baru atau perubahan statistik.

## Versi manajemen rencana kueri Aurora PostgreSQL
<a name="AuroraPostgreSQL.Optimize.overview.versions"></a>

Manajemen rencana kueri didukung oleh semua rilis Aurora PostgreSQL yang tersedia saat ini. Untuk informasi selengkapnya, lihat [Daftar pembaruan Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/AuroraPostgreSQL.Updates.html) dalam *Catatan Rilis untuk Aurora PostgreSQL*.

Fungsionalitas manajemen rencana kueri ditambahkan ke klaster DB Aurora PostgreSQL Anda saat Anda menginstal ekstensi `apg_plan_mgmt`. Berbagai versi Aurora PostgreSQL mendukung versi ekstensi `apg_plan_mgmt` yang berbeda-beda. Kami menyarankan agar Anda meningkatkan ekstensi manajemen rencana kueri ke rilis terbaru untuk versi Aurora PostgreSQL Anda. 

**catatan**  
Untuk catatan rilis untuk setiap versi ekstensi `apg_plan_mgmt`, lihat [Aurora PostgreSQL versi ekstensi apg\$1plan\$1mgmt](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/AuroraPostgreSQL.Extensions.html#AuroraPostgreSQL.Extensions.apg_plan_mgmt) dalam *Catatan Rilis untuk Aurora PostgreSQL*.

Anda dapat mengidentifikasi versi yang berjalan di klaster Anda dengan menghubungkan ke instans menggunakan `psql` lalu menggunakan perintah meta \$1dx untuk menampilkan daftar ekstensi seperti yang ditunjukkan berikut.

```
labdb=> \dx
                       List of installed extensions
     Name      | Version |    Schema     |                            Description
---------------+---------+---------------+-------------------------------------------------------------------
 apg_plan_mgmt | 1.0     | apg_plan_mgmt | Amazon Aurora with PostgreSQL compatibility Query Plan Management
 plpgsql       | 1.0     | pg_catalog    | PL/pgSQL procedural language
(2 rows)
```

Output menunjukkan bahwa klaster ini menggunakan ekstensi versi 1.0. Hanya versi `apg_plan_mgmt` tertentu yang tersedia untuk versi Aurora PostgreSQL tertentu. Dalam beberapa kasus, Anda mungkin perlu meningkatkan klaster DB Aurora PostgreSQL ke rilis minor baru atau menerapkan patch sehingga Anda dapat meningkatkan ke manajemen rencana kueri versi terbaru. `apg_plan_mgmt` versi 1.0 yang ditampilkan dalam output berasal dari klaster DB Aurora PostgreSQL versi 10.17, yang tidak memiliki `apg_plan_mgmt` versi lebih baru. Dalam hal ini, klaster DB Aurora PostgreSQL harus ditingkatkan ke versi PostgreSQL yang lebih baru.

Untuk informasi selengkapnya tentang meningkatkan klaster DB Aurora PostgreSQL Anda ke PostgreSQL versi baru, lihat [Pembaruan mesin database untuk Amazon Aurora PostgreSQL](AuroraPostgreSQL.Updates.md).

Untuk mempelajari cara meningkatkan ekstensi `apg_plan_mgmt`, lihat [Meningkatkan manajemen rencana kueri Aurora PostgreSQL](#AuroraPostgreSQL.Optimize.Upgrade).

## Mengaktifkan manajemen rencana kueri Aurora PostgreSQL
<a name="AuroraPostgreSQL.Optimize.Enable"></a>

Penyiapan manajemen rencana kueri untuk klaster DB Aurora PostgreSQL Anda memerlukan penginstalan ekstensi dan perubahan beberapa pengaturan parameter klaster DB. Anda memerlukan izin `rds_superuser` untuk menginstal ekstensi `apg_plan_mgmt` dan mengaktifkan fitur untuk klaster DB Aurora PostgreSQL.

Saat ekstensi ini diinstal, sebuah peran baru, `apg_plan_mgmt`, akan dibuat. Peran ini memungkinkan pengguna basis data melihat, mengelola, dan memelihara rencana kueri. Sebagai administrator dengan hak akses `rds_superuser`, pastikan untuk memberikan peran `apg_plan_mgmt` kepada pengguna basis data sesuai kebutuhan. 

Hanya pengguna dengan peran `rds_superuser` yang dapat menyelesaikan prosedur berikut. `rds_superuser` diperlukan untuk membuat ekstensi `apg_plan_mgmt` dan peran `apg_plan_mgmt`. Pengguna harus diberi peran `apg_plan_mgmt` untuk mengelola ekstensi `apg_plan_mgmt`.

**Mengaktifkan manajemen rencana kueri untuk klaster DB Aurora PostgreSQL Anda**

Langkah-langkah berikut mengaktifkan manajemen rencana kueri untuk semua pernyataan SQL yang dikirimkan ke klaster DB Aurora PostgreSQL. Hal ini dikenal sebagai mode *otomatis*. Untuk mempelajari selengkapnya tentang perbedaan di antara mode, lihat [Mengambil rencana eksekusi Aurora PostgreSQL](AuroraPostgreSQL.Optimize.CapturePlans.md).

1. Buka konsol Amazon RDS di [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Buat grup parameter klaster DB kustom untuk klaster DB Aurora PostgreSQL Anda. Anda perlu mengubah parameter tertentu untuk mengaktifkan manajemen rencana kueri dan mengatur perilakunya. Untuk informasi selengkapnya, lihat [Membuat grup parameter DB di ](USER_WorkingWithParamGroups.Creating.md).

1. Buka grup parameter klaster DB kustom dan atur parameter `rds.enable_plan_management` ke `1`, seperti yang ditunjukkan pada gambar berikut ini.   
![\[Gambar grup parameter cluster DB.\]](http://docs.aws.amazon.com/id_id/AmazonRDS/latest/AuroraUserGuide/images/aurora-qpm-custom-db-cluster-param-change-1.png)

   Untuk informasi selengkapnya, lihat [Memodifikasi parameter dalam grup parameter cluster DB di Amazon Aurora](USER_WorkingWithParamGroups.ModifyingCluster.md).

1. Buat grup parameter DB kustom yang dapat Anda gunakan untuk mengatur parameter rencana kueri di tingkat instans. Untuk informasi selengkapnya, lihat [Membuat grup parameter cluster DB di Amazon Aurora](USER_WorkingWithParamGroups.CreatingCluster.md). 

1. Ubah instans penulis klaster DB Aurora PostgreSQL untuk menggunakan grup parameter DB kustom. Untuk informasi selengkapnya, lihat [Memodifikasi instans DB dalam klaster DB](Aurora.Modifying.md#Aurora.Modifying.Instance).

1. Ubah klaster DB Aurora PostgreSQL untuk menggunakan grup parameter klaster DB kustom. Untuk informasi selengkapnya, lihat [Memodifikasi klaster DB dengan menggunakan konsol, CLI, dan API](Aurora.Modifying.md#Aurora.Modifying.Cluster).

1. Boot ulang instans DB Anda untuk mengaktifkan pengaturan grup parameter kustom.

1. Hubungkan ke titik akhir instans DB untuk klaster DB Aurora PostgreSQL Anda menggunakan `psql` atau `pgAdmin`. Contoh berikut menggunakan akun `postgres` default untuk peran `rds_superuser`.

   ```
   psql --host=cluster-instance-1.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=my-db
   ```

1. Buat ekstensi `apg_plan_mgmt` untuk instans DB Anda, seperti yang ditunjukkan berikut ini.

   ```
   labdb=> CREATE EXTENSION apg_plan_mgmt;
   CREATE EXTENSION
   ```
**Tip**  
Instal ekstensi `apg_plan_mgmt` dalam basis data templat untuk aplikasi Anda. Basis data templat default diberi nama `template1`. Untuk mempelajari selengkapnya, lihat [Template Databases](https://www.postgresql.org/docs/current/manage-ag-templatedbs.html) dalam dokumentasi PostgreSQL.

1. Ubah parameter `apg_plan_mgmt.capture_plan_baselines` menjadi `automatic`. Pengaturan ini akan menyebabkan pengoptimal menghasilkan rencana untuk setiap pernyataan SQL yang direncanakan atau dijalankan dua kali atau lebih. 
**catatan**  
Manajemen rencana kueri juga memiliki mode *manual* yang dapat Anda gunakan untuk pernyataan SQL tertentu. Untuk mempelajari selengkapnya, lihat [Mengambil rencana eksekusi Aurora PostgreSQL](AuroraPostgreSQL.Optimize.CapturePlans.md). 

1. Ubah nilai parameter `apg_plan_mgmt.use_plan_baselines` menjadi "on". Parameter ini menyebabkan pengoptimal memilih rencana untuk pernyataan dari acuan dasar rencananya. Untuk mempelajari selengkapnya, lihat [Menggunakan rencana terkelola Aurora PostgreSQL](AuroraPostgreSQL.Optimize.UsePlans.md). 
**catatan**  
Anda dapat mengubah nilai salah satu parameter dinamis ini untuk sesi tanpa perlu mem-boot ulang instans. 

Ketika pengaturan manajemen rencana kueri Anda selesai, pastikan untuk memberikan peran `apg_plan_mgmt` kepada setiap pengguna basis data yang perlu melihat, mengelola, atau memelihara rencana kueri. 

## Meningkatkan manajemen rencana kueri Aurora PostgreSQL
<a name="AuroraPostgreSQL.Optimize.Upgrade"></a>

Kami menyarankan agar Anda meningkatkan ekstensi manajemen rencana kueri ke rilis terbaru untuk versi Aurora PostgreSQL Anda.

1. Hubungkan ke instans penulis klaster DB Aurora PostgreSQL Anda sebagai pengguna yang memiliki hak akses `rds_superuser`. Jika Anda menyimpan nama default saat menyiapkan instans, Anda akan terhubung sebagai `postgres`. Contoh ini menunjukkan cara menggunakan `psql`, tetapi Anda juga dapat menggunakan pgAdmin jika mau.

   ```
   psql --host=111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
   ```

1. Jalankan kueri berikut untuk meningkatkan ekstensi.

   ```
   ALTER EXTENSION apg_plan_mgmt UPDATE TO '2.1';
   ```

1. Gunakan fungsi [apg\$1plan\$1mgmt.validate\$1plans](AuroraPostgreSQL.Optimize.Functions.md#AuroraPostgreSQL.Optimize.Functions.validate_plans) untuk memperbarui hash semua rencana. Pengoptimal akan memvalidasi semua rencana yang Disetujui, Tidak Disetujui, dan Ditolak untuk memastikan bahwa rencana tersebut masih layak untuk ekstensi versi baru. 

   ```
   SELECT apg_plan_mgmt.validate_plans('update_plan_hash');
   ```

   Untuk mempelajari selengkapnya tentang penggunaan fungsi ini, lihat [Memvalidasi rencana](AuroraPostgreSQL.Optimize.Deleting.md#AuroraPostgreSQL.Optimize.Maintenance.ValidatingPlans).

1. Gunakan fungsi [apg\$1plan\$1mgmt.reload](AuroraPostgreSQL.Optimize.Functions.md#AuroraPostgreSQL.Optimize.Functions.reload) untuk me-refresh rencana apa pun di memori bersama dengan rencana yang divalidasi dari tampilan dba\$1plans. 

   ```
   SELECT apg_plan_mgmt.reload();
   ```

Untuk mempelajari selengkapnya tentang semua fungsi yang tersedia untuk manajemen rencana kueri, lihat [Referensi fungsi untuk manajemen rencana kueri Aurora PostgreSQL](AuroraPostgreSQL.Optimize.Functions.md).

## Menonaktifkan manajemen rencana kueri Aurora PostgreSQL
<a name="AuroraPostgreSQL.Optimize.Enable.turnoff"></a>

Anda dapat menonaktifkan manajemen rencana kueri setiap saat dengan menonaktifkan `apg_plan_mgmt.use_plan_baselines` dan `apg_plan_mgmt.capture_plan_baselines`. 

```
labdb=> SET apg_plan_mgmt.use_plan_baselines = off;

labdb=> SET apg_plan_mgmt.capture_plan_baselines = off;
```