sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres:vakuumkommandot rensar inte upp döda tuplar

Använd VACUUM (VERBOSE) för att få detaljerad statistik över vad den gör och varför.

Det finns tre anledningar till att döda tuplar inte kan tas bort:

  1. Det finns en långvarig transaktion som inte har avslutats. Du kan hitta de dåliga pojkarna med

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

    Du kan bli av med en transaktion med pg_cancel_backend() eller pg_terminate_backend() .

  2. Det finns förberedda transaktioner som inte har begåtts. Du kan hitta dem med

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

    Användaren COMMIT PREPARED eller ROLLBACK PREPARED för att stänga dem.

  3. Det finns replikeringsplatser som inte används. Hitta dem med

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

    Använd pg_drop_replication_slot() för att ta bort en oanvänd replikeringsplats.



  1. SpringBoot+Kotlin+Postgres och JSONB:org.hibernate.MappingException:Ingen dialektmappning för JDBC-typ

  2. ORA-28001:Lösenordet har upphört att gälla

  3. Konvertera DateTime till formatet ÅÅÅÅ-MM-DD i SQL Server

  4. 4 sätt att skilja timmar, minuter och sekunder från ett tidsvärde i MariaDB