PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Postgres:perintah vakum tidak membersihkan tupel yang mati

Gunakan VACUUM (VERBOSE) untuk mendapatkan statistik terperinci tentang apa yang dilakukannya dan mengapa.

Ada tiga alasan mengapa tupel mati tidak dapat dihapus:

  1. Ada transaksi lama yang belum ditutup. Anda dapat menemukan anak-anak nakal dengan

    SELECT pid, datname, usename, state, backend_xmin
    FROM pg_stat_activity
    WHERE backend_xmin IS NOT NULL
    ORDER BY age(backend_xmin) DESC;
    

    Anda dapat menghapus transaksi dengan pg_cancel_backend() atau pg_terminate_backend() .

  2. Ada transaksi yang disiapkan yang belum dilakukan. Anda dapat menemukannya dengan

    SELECT gid, prepared, owner, database, transaction
    FROM pg_prepared_xacts
    ORDER BY age(transaction) DESC;
    

    Pengguna COMMIT PREPARED atau ROLLBACK PREPARED untuk menutupnya.

  3. Ada slot replikasi yang tidak digunakan. Temukan mereka dengan

    SELECT slot_name, slot_type, database, xmin
    FROM pg_replication_slots
    ORDER BY age(xmin) DESC;
    

    Gunakan pg_drop_replication_slot() untuk menghapus slot replikasi yang tidak digunakan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pernyataan bersyarat INSERT INTO di postgres

  2. Tidak dapat menginstal permata pg di Mavericks dengan Postgres.app

  3. PostgreSQL salah mengonversi dari stempel waktu tanpa zona waktu ke stempel waktu dengan zona waktu

  4. Postgres:INSERT jika belum ada

  5. Apakah kueri jenis SELECT satu-satunya jenis yang dapat disarangkan?