Cara melakukan upgrade versi utama RDS untuk Postgre SQL - Layanan Basis Data Relasional Amazon

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

Cara melakukan upgrade versi utama RDS untuk Postgre SQL

Kami merekomendasikan proses berikut saat melakukan upgrade versi utama pada database Amazon RDS untuk PostgreSQL:

  1. Siapkan grup parameter yang kompatibel dengan versi – Jika Anda menggunakan grup parameter kustom, Anda memiliki dua opsi. Anda dapat menentukan grup parameter default untuk versi mesin DB baru. Atau Anda dapat membuat grup parameter kustom Anda sendiri untuk versi mesin DB baru. Untuk informasi selengkapnya, silakan lihat Grup parameter untuk RDS dan Menggunakan grup parameter klaster DB untuk klaster DB Multi-AZ.

  2. Periksa kelas basis data yang tidak didukung - Periksa apakah kelas instance database Anda kompatibel dengan SQL versi Postgre yang Anda upgrade. Untuk informasi selengkapnya, lihat Mesin DB yang didukung untuk kelas instans DB.

  3. Periksa penggunaan yang tidak didukung:

    • Transaksi yang disiapkan – Komit atau rollback semua transaksi terbuka yang disiapkan sebelum mencoba melakukan peningkatan.

      Anda dapat menggunakan kueri berikut untuk memverifikasi bahwa tidak ada transaksi terbuka yang disiapkan pada basis data Anda.

      SELECT count(*) FROM pg_catalog.pg_prepared_xacts;
    • Jenis data reg* – Hapus semua penggunaan jenis data reg* sebelum mencoba peningkatan. Kecuali untuk regtype dan regclass, Anda tidak dapat meningkatkan jenis data reg*. pg_upgradeUtilitas tidak dapat mempertahankan tipe data ini, yang digunakan oleh Amazon RDS untuk melakukan peningkatan.

      Untuk memverifikasi bahwa jenis data reg* yang tidak didukung tidak digunakan, gunakan kueri berikut untuk setiap basis data.

      SELECT count(*) FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n, pg_catalog.pg_attribute a WHERE c.oid = a.attrelid AND NOT a.attisdropped AND a.atttypid IN ('pg_catalog.regproc'::pg_catalog.regtype, 'pg_catalog.regprocedure'::pg_catalog.regtype, 'pg_catalog.regoper'::pg_catalog.regtype, 'pg_catalog.regoperator'::pg_catalog.regtype, 'pg_catalog.regconfig'::pg_catalog.regtype, 'pg_catalog.regdictionary'::pg_catalog.regtype) AND c.relnamespace = n.oid AND n.nspname NOT IN ('pg_catalog', 'information_schema');
  4. Periksa database yang tidak valid:

    • Pastikan tidak ada database yang tidak valid. datconnlimitKolom dalam pg_database katalog mencakup nilai -2 untuk menandai database sebagai tidak valid yang terputus selama operasi. DROP DATABASE

      Gunakan kueri berikut untuk memeriksa database yang tidak valid:

      SELECT datname FROM pg_database WHERE datconnlimit = - 2;
    • Query sebelumnya mengembalikan nama database yang tidak valid. Anda dapat menggunakan DROP DATABASE invalid_db_name; untuk menjatuhkan database yang tidak valid. Anda juga dapat menggunakan perintah berikut untuk menjatuhkan database yang tidak valid:

      SELECT 'DROP DATABASE ' || quote_ident(datname) || ';' FROM pg_database WHERE datconnlimit = -2 \gexec

    Untuk informasi selengkapnya tentang database yang tidak valid, lihat Memahami perilaku autovacuum dengan database yang tidak valid.

  5. Tangani slot replikasi logis – Peningkatan tidak dapat terjadi jika basis data memiliki slot replikasi logis. Slot replikasi logis biasanya digunakan untuk migrasi AWS DMS dan untuk mereplikasi tabel dari basis data ke danau data, alat BI, dan target lainnya. Sebelum meningkatkan, pastikan Anda mengetahui tujuan dari setiap slot replikasi logis yang digunakan, dan konfirmasikan bahwa menghapusnya tidak akan jadi masalah. Jika slot replikasi logis masih digunakan, Anda tidak boleh menghapusnya, dan Anda tidak dapat melakukan peningkatan.

    Jika slot replikasi logis tidak diperlukan, Anda dapat menghapusnya menggunakan yang berikut: SQL

    SELECT * FROM pg_replication_slots; SELECT pg_drop_replication_slot(slot_name);

    Pengaturan replikasi logis yang menggunakan ekstensi pglogical juga harus dihapus beberapa slotnya agar peningkatan versi mayor berhasil dilakukan. Untuk informasi tentang cara mengidentifikasi dan menghapus slot yang dibuat menggunakan ekstensi pglogical, lihat Mengelola slot replikasi logis untuk untuk Postgre SQL.

  6. Tangani replika baca – Peningkatan instans DB AZ Tunggal atau deployment instans DB Multi-AZ juga akan meningkatkan replika baca dalam Wilayah bersama instans DB primer. Amazon RDS tidak memutakhirkan replika baca cluster multi-AZ DB.

    Anda tidak dapat meningkatkan replika baca secara terpisah. Jika Anda bisa, itu bisa menyebabkan situasi di mana basis data primer dan replika memiliki versi utama SQL Postgre yang berbeda. Namun, tingkatkan replika baca dapat menambah waktu henti pada instans DB primer. Untuk mencegah peningkatan replika, promosikan replika menjadi instans mandiri atau hapus replika tersebut sebelum memulai proses peningkatan.

    Proses peningkatan membuat ulang grup parameter replika baca berdasarkan grup parameter saat ini dari replika baca. Anda dapat menerapkan grup parameter kustom ke replika baca hanya setelah peningkatan selesai dengan memodifikasi replika baca. Untuk informasi selengkapnya tentang replika baca, lihat Bekerja dengan replika baca untuk Amazon RDS untuk Postgre SQL.

  7. Lakukan pencadangan – Kami sarankan Anda melakukan pencadangan sebelum melakukan peningkatan versi mayor sehingga Anda memiliki titik pemulihan yang diketahui untuk basis data Anda. Jika periode retensi cadangan Anda lebih besar dari 0, proses peningkatan akan membuat snapshot DB dari basis data Anda sebelum dan setelah peningkatan. Untuk mengubah periode retensi cadangan Anda, lihat Memodifikasi instans Amazon RDS DB dan Memodifikasi cluster DB Multi-AZ untuk Amazon RDS.

    Untuk melakukan pencadangan secara manual, lihat Membuat snapshot DB untuk instans DB AZ tunggal untuk Amazon RDS dan Membuat snapshot cluster DB multi-AZ untuk Amazon RDS.

  8. Tingkatkan ekstensi tertentu sebelum peningkatan versi mayor – Jika Anda berencana untuk melewati sebuah versi mayor dengan peningkatan, Anda perlu memperbarui ekstensi tertentu sebelum melakukan peningkatan versi mayor. Misalnya, sebuah versi mayor dilewati dalam peningkatan dari versi 9.5.x atau 9,6.x ke versi 11.x. Ekstensi untuk memperbarui termasuk Post GIS dan ekstensi terkait untuk memproses data spasial.

    • address_standardizer

    • address_standardizer_data_us

    • postgis_raster

    • postgis_tiger_geocoder

    • postgis_topology

    Jalankan perintah berikut untuk setiap ekstensi yang Anda gunakan:

    ALTER EXTENSION PostgreSQL-extension UPDATE TO 'new-version';

    Untuk informasi selengkapnya, lihat Meningkatkan SQL ekstensi Postgre untuk database Postgre RDS SQL. Untuk mempelajari lebih lanjut tentang meningkatkan PostGIS, lihatLangkah 6: Tingkatkan GIS ekstensi Post.

  9. Hapus ekstensi tertentu sebelum peningkatan versi mayor – Peningkatan yang melewati versi mayor ke versi 11.x tidak mendukung pembaruan ekstensi pgRouting. Sebuah versi mayor dilewati dalam peningkatan dari versi 9.4.x, 9,5.x, atau 9,6.x ke versi 11.x. Aman untuk menghapus ekstensi pgRouting lalu menginstalnya kembali ke versi yang kompatibel setelah peningkatan. Untuk versi ekstensi yang dapat Anda perbarui, lihat Versi ekstensi Postgre SQL yang didukung.

    chkpassEkstensi tsearch2 dan tidak lagi didukung untuk Postgre SQL versi 11 atau yang lebih baru. Jika Anda meningkatkan ke versi 11.x, hapus ekstensi tsearch2 dan chkpass sebelum peningkatan.

  10. Hapus jenis data yang tidak diketahui – Hapus jenis data unknown tergantung pada versi target.

    Postgre SQL versi 10 berhenti mendukung tipe unknown data. Jika basis data versi 9.6 menggunakan jenis data unknown, tingkatkan ke versi 10 akan menunjukkan pesan kesalahan seperti berikut ini:

    Database instance is in a state that cannot be upgraded: PreUpgrade checks failed: The instance could not be upgraded because the 'unknown' data type is used in user tables. Please remove all usages of the 'unknown' data type and try again."

    Untuk menemukan tipe unknown data dalam database sehingga Anda dapat menghapus kolom yang menyinggung atau mengubahnya menjadi tipe data yang didukung, gunakan yang berikut ini: SQL

    SELECT DISTINCT data_type FROM information_schema.columns WHERE data_type ILIKE 'unknown';
  11. Lakukan percobaan peningkatan – Kami sangat menyarankan Anda untuk menguji peningkatan versi mayor pada duplikat basis data produksi Anda sebelum mencoba peningkatan pada basis data produksi Anda. Anda dapat memantau rencana eksekusi pada basis data uji duplikat untuk setiap kemungkinan regresi rencana eksekusi dan untuk mengevaluasi performanya. Untuk membuat contoh pengujian duplikat, Anda dapat memulihkan database Anda dari snapshot terbaru atau melakukan point-in-time pemulihan database Anda ke waktu restorable terbaru.

    Untuk informasi selengkapnya, lihat Memulihkan dari snapshot atau Memulihkan instans DB ke waktu tertentu untuk Amazon RDS. Untuk klaster DB Multi-AZ, lihat Memulihkan dari snapshot ke klaster DB Multi-AZ atau Memulihkan klaster DB Multi-AZ ke waktu tertentu.

    Untuk detail tentang melakukan peningkatan, lihat Meningkatkan versi mesin secara manual.

    Dalam memutakhirkan database versi 9.6 ke versi 10, ketahuilah bahwa Postgre 10 SQL memungkinkan query paralel secara default. Anda dapat menguji dampak paralelisme sebelum peningkatan dengan mengubah parameter max_parallel_workers_per_gather pada basis data uji Anda menjadi 2.

    catatan

    Nilai default untuk parameter max_parallel_workers_per_gather dalam grup parameter DB default.postgresql10 adalah 2.

    Untuk informasi selengkapnya, lihat Parallel Query dalam dokumentasi PostgreSQL. Untuk menonaktifkan paralelisme pada versi 10, atur parameter max_parallel_workers_per_gather ke 0.

    Selama peningkatan versi mayor, basis data public dan template1 serta skema public di setiap basis data akan diubah namanya untuk sementara. Objek-objek ini muncul dalam log menggunakan nama aslinya dan string acak. String ditambahkan sehingga pengaturan kustom seperti locale dan owner dipertahankan selama peningkatan versi mayor. Setelah peningkatan selesai, objek diubah namanya kembali ke nama aslinya.

    catatan

    Selama proses pemutakhiran versi utama, Anda tidak dapat melakukan point-in-time pemulihan instans DB atau cluster DB multi-AZ Anda. Setelah Amazon RDS melakukan upgrade, dibutuhkan backup otomatis database. Anda dapat melakukan point-in-time pemulihan ke waktu sebelum pemutakhiran dimulai dan setelah pencadangan otomatis database Anda selesai.

  12. Jika pemutakhiran gagal dengan kesalahan prosedur precheck, selesaikan masalah — Selama proses pemutakhiran versi utama, Amazon RDS for Postgre SQL pertama-tama menjalankan prosedur precheck untuk mengidentifikasi masalah apa pun yang mungkin menyebabkan pemutakhiran gagal. Prosedur pra-pemeriksaan akan memeriksa semua kemungkinan kondisi yang tidak kompatibel di seluruh basis data dalam instans.

    Jika pra-pemeriksaan menemui masalah, proses ini akan membuat peristiwa log yang menunjukkan bahwa pra-pemeriksaan peningkatan gagal. Detail proses pra-pemeriksaan ada dalam log peningkatan yang bernama pg_upgrade_precheck.log untuk semua basis data yang berasal dari sebuah basis data tertentu. Amazon RDS menambahkan stempel waktu ke nama file. Untuk informasi selengkapnya tentang melihat log, lihat Memantau file RDS Amazon.

    Jika peningkatan replika baca gagal pada saat pra-pemeriksaan, replikasi pada replika baca yang gagal rusak dan replika baca diberi status diakhiri. Hapus replika baca ini dan buat ulang replika baca baru berdasarkan instans DB primer yang ditingkatkan.

    Selesaikan semua masalah yang teridentifikasi dalam log pra-pemeriksaan lalu coba lagi peningkatan versi mayor. Berikut ini adalah contoh log pra-pemeriksaan.

    ------------------------------------------------------------------------ Upgrade could not be run on Wed Apr 4 18:30:52 2018 ------------------------------------------------------------------------- The instance could not be upgraded from 9.6.11 to 10.6 for the following reasons. Please take appropriate action on databases that have usage incompatible with the requested major engine version upgrade and try the upgrade again. * There are uncommitted prepared transactions. Please commit or rollback all prepared transactions.* One or more role names start with 'pg_'. Rename all role names that start with 'pg_'. * The following issues in the database 'my"million$"db' need to be corrected before upgrading:** The ["line","reg*"] data types are used in user tables. Remove all usage of these data types. ** The database name contains characters that are not supported by RDS for PostgreSQL. Rename the database. ** The database has extensions installed that are not supported on the target database version. Drop the following extensions from your database: ["tsearch2"]. * The following issues in the database 'mydb' need to be corrected before upgrading:** The database has views or materialized views that depend on 'pg_stat_activity'. Drop the views.
  13. Jika peningkatan replika baca gagal saat meningkatkan basis data, atasi masalah tersebut – Replika baca gagal diubah ke status incompatible-restore dan replikasi diakhiri pada basis data. Hapus replika baca ini dan buat ulang replika baca baru berdasarkan instans DB primer yang ditingkatkan.

    catatan

    Amazon RDS tidak memutakhirkan replika baca untuk cluster DB multi-AZ. Jika Anda melakukan peningkatan versi mayor klaster DB Multi-AZ, maka status replikasi replika bacanya berubah menjadi diakhiri.

    Peningkatan replika baca dapat gagal karena alasan berikut:

    • Replika baca tidak dapat mengimbangi instans primer bahkan setelah waktu tunggu.

    • Replika baca berada dalam status siklus hidup akhir atau tidak kompatibel seperti penyimpanan penuh, pemulihan yang tidak kompatibel, dan seterusnya.

    • Saat peningkatan instans DB primer dimulai, terdapat peningkatan versi minor terpisah yang berjalan pada replika baca.

    • Replika baca menggunakan parameter yang tidak kompatibel.

    • Replika baca tidak dapat berkomunikasi dengan instans DB primer untuk menyinkronkan folder data.

  14. Tingkatkan basis data produksi Anda – Ketika percobaan peningkatan versi mayor yang dijalankan berhasil, Anda dapat meningkatkan basis data produksi Anda dengan percaya diri. Untuk informasi selengkapnya, lihat Meningkatkan versi mesin secara manual.

  15. Jalankan operasi ANALYZE untuk menyegarkan tabel pg_statistic. Anda harus melakukan ini untuk setiap database di semua database Postgre SQL Anda. Statistik pengoptimal tidak ditransfer selama peningkatan versi utama, jadi Anda perlu membuat ulang semua statistik untuk menghindari masalah performa. Jalankan perintah tanpa parameter apa pun untuk menghasilkan statistik untuk semua tabel reguler dalam basis data saat ini, sebagai berikut:

    ANALYZE VERBOSE;

    Bendera VERBOSE bersifat opsional, tetapi kemajuannya akan ditampilkan jika digunakan. Untuk informasi lebih lanjut, lihat ANALYZEdi dokumentasi PostgreSQL.

    catatan

    Jalankan ANALYZE di sistem Anda setelah upgrade untuk menghindari masalah kinerja.

Setelah peningkatan versi mayor selesai, kami menyarankan hal berikut:

  • Upgrade Postgre tidak SQL memutakhirkan ekstensi SQL Postgre apa pun. Untuk meningkatkan ekstensi, lihat Meningkatkan SQL ekstensi Postgre untuk database Postgre RDS SQL.

  • Secara opsional, gunakan Amazon RDS untuk melihat dua log yang dihasilkan pg_upgrade utilitas. Log tersebut adalah pg_upgrade_internal.log dan pg_upgrade_server.log. Amazon RDS menambahkan stempel waktu ke nama file untuk log ini. Anda dapat melihat log ini sebagaimana Anda dapat melihat log lainnya. Untuk informasi selengkapnya, lihat Memantau file RDS Amazon.

    Anda juga dapat mengunggah log pemutakhiran ke Amazon CloudWatch Logs. Untuk informasi selengkapnya, lihat Menerbitkan log Postgre ke Amazon SQL Logs CloudWatch .

  • Untuk memverifikasi bahwa segalanya berfungsi seperti yang diharapkan, uji aplikasi Anda pada basis data yang ditingkatkan dengan beban kerja serupa. Setelah peningkatan diverifikasi, Anda dapat menghapus instans uji ini.