sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres:vakuumkommando renser ikke døde tupler

Brug VACUUM (VERBOSE) for at få detaljerede statistikker over, hvad den laver og hvorfor.

Der er tre grunde til, at døde tupler ikke kan fjernes:

  1. Der er en langvarig transaktion, som ikke er blevet afsluttet. Du kan finde de dårlige drenge 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 slippe af med en transaktion med pg_cancel_backend() eller pg_terminate_backend() .

  2. Der er forberedte transaktioner, som ikke er indgået. Du kan finde dem med

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

    Bruger COMMIT PREPARED eller ROLLBACK PREPARED for at lukke dem.

  3. Der er replikationsslots, som ikke bruges. Find dem med

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

    Brug pg_drop_replication_slot() for at slette en ubrugt replikeringsplads.



  1. HA for MySQL og MariaDB - Sammenligning af Master-Master-replikering med Galera Cluster

  2. PostgreSQL JDBC-nulstreng taget som en bytea

  3. Indstilling af Oracle-sprogparametre for DG4ODBC

  4. Kode til at validere SQL-scripts