PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgres:командата vacuum не почиства мъртвите кортежи

Използвайте VACUUM (VERBOSE) за да получите подробна статистика за това какво прави и защо.

Има три причини, поради които мъртвите кортежи не могат да бъдат премахнати:

  1. Има продължителна транзакция, която не е приключена. Можете да намерите лошите момчета с

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

    Можете да се отървете от транзакция с pg_cancel_backend() или pg_terminate_backend() .

  2. Има подготвени транзакции, които не са ангажирани. Можете да ги намерите с

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

    Потребител COMMIT PREPARED или ROLLBACK PREPARED за да ги затворите.

  3. Има слотове за репликация, които не се използват. Намерете ги с

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

    Използвайте pg_drop_replication_slot() за да изтриете неизползван слот за репликация.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изброите таблици, засегнати от каскадно изтриване

  2. За начинаещ, има ли голяма разлика между MySQL и PostgreSQL

  3. Не може да се използва таблица с име потребител в postgresql hibernate

  4. Как да създадете потребител с pgAdmin

  5. Свързване с база данни PostgreSQL чрез SSH тунелиране в Python