Mengindeks ulang tabel saat autovacuum berjalan - 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.

Mengindeks ulang tabel saat autovacuum berjalan

Jika indeks rusak, autovacuum tetap akan terus memproses tabel lalu gagal. Jika mencoba vakum manual dalam situasi ini, Anda akan menerima pesan kesalahan seperti berikut ini.

postgres=> vacuum freeze pgbench_branches; ERROR: index "pgbench_branches_test_index" contains unexpected zero page at block 30521 HINT: Please REINDEX it.

Saat indeks rusak dan autovacuum mencoba untuk tetap berjalan di tabel, maka Anda bersaing dengan sesi autovacuum yang sudah berjalan. Saat Anda mengeluarkan REINDEXperintah, Anda mengeluarkan kunci eksklusif di atas meja. Operasi penulisan, dan juga operasi membaca yang menggunakan indeks spesifik tersebut, akan diblokir.

Untuk mengindeks ulang tabel saat autovacuum berjalan di tabel
  1. Buka dua sesi ke basis data yang berisi tabel yang ingin divakum. Untuk sesi kedua, gunakan "layar" atau peralatan lain yang dapat mempertahankan sesi jika koneksi terputus.

  2. Dalam sesi satu, dapatkan sesi autovacuum berjalan di atas meja. PID

    Jalankan kueri berikut untuk mendapatkan PID sesi autovacuum.

    SELECT datname, usename, pid, current_timestamp - xact_start AS xact_runtime, query FROM pg_stat_activity WHERE upper(query) like '%VACUUM%' ORDER BY xact_start;
  3. Dalam sesi kedua, munculkan perintah pengindeksan ulang.

    \timing on Timing is on. reindex index pgbench_branches_test_index; REINDEX Time: 9.966 ms
  4. Dalam sesi pertama, jika autovacuum memblokir proses, Anda akan melihat di pg_stat_activity bahwa proses menunggu untuk sesi vakum diberi tanda "T". Dalam hal ini, Anda mengakhiri proses autovacuum.

    SELECT pg_terminate_backend('the_pid');

    Di titik ini, sesi Anda dimulai. Perlu diperhatikan bahwa proses autovacuum akan segera dimulai ulang karena tabel ini mungkin merupakan urutan tertinggi di daftar pekerjaan.

  5. Mulai perintah Anda di sesi kedua, lalu akhiri proses autovacuum di sesi 1.