PostgreSQL 教程: 检查预备事务

五月 30, 2024

摘要:在本教程中,您将学习如何在 PostgreSQL 中检查遗弃的预备事务。

目录

遗弃的预备事务和 VACUUM

两阶段提交过程中,一个分布式事务首先会使用 PREPARE 语句进行准备,然后使用COMMIT PREPARED语句提交。

一旦 PostgreSQL 准备好了事务,事务就会一直“徘徊”,直到 PostgreSQL 提交或中止它。它甚至能够在服务器重新启动后留存下来!通常,事务不会长时间保持在预备状态,但有时候会出现异常,管理员必须手动删除已准备的事务。

VACUUM 可能会被xmin水位线阻塞,正如我们在检查阻塞 VACUUM 的复制槽教程中所述。

为两阶段提交准备的事务会阻止 VACUUM 的清理,直到它被提交或回滚。

列出遗弃的预备事务

您可以使用下面的查询,查找所有已准备的事务及其xmin值:

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

在识别出以后,可以使用 ROLLBACK PREPARED SQL 语句删除已准备的事务,也可以使用 COMMIT PREPARED SQL 语句提交已准备的事务,如下所示:

COMMIT PREPARED <gid_from_above>;
ROLLBACK PREPARED <gid_from_above>;

了解更多

PostgreSQL 监控