sql >> Databáze >  >> RDS >> PostgreSQL

Postgres:příkaz vakua nevyčistí mrtvé n-tice

Použijte VACUUM (VERBOSE) získat podrobné statistiky toho, co dělá a proč.

Existují tři důvody, proč mrtvé n-tice nelze odstranit:

  1. Existuje dlouho probíhající transakce, která nebyla uzavřena. Bad boys můžete najít pomocí

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

    Transakce se můžete zbavit pomocí pg_cancel_backend() nebo pg_terminate_backend() .

  2. Existují připravené transakce, které nebyly provedeny. Můžete je najít pomocí

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

    Uživatel COMMIT PREPARED nebo ROLLBACK PREPARED zavřete je.

  3. Existují replikační sloty, které se nepoužívají. Najděte je pomocí

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

    Použijte pg_drop_replication_slot() k odstranění nepoužívaného replikačního slotu.



  1. Postupy sdružování připojení JDBC MySql, aby se zabránilo vyčerpání fondu připojení

  2. Používejte relační databáze MySQL na Fedoře 13

  3. Možnosti cloudového zálohování pro PostgreSQL

  4. Načtení posledního záznamu v každé skupině - MySQL