Commit/Rollback 交易未在 MON$TRANSACTIONS 中列出

Commit/Rollback transaction not listed in MON$TRANSACTIONS

我们在客户的 Firebird 数据库中遇到了一个奇怪的问题。我们注意到未在 mon$transactions table.

中列出的活跃交易

根据 gstat 实用程序,事务 231.768.260 处于活动状态:

然而,运行宁一个简单的SELECT * FROM mon$transactions where mon$transaction_id = 231768260并没有return这样的交易ID。

我认为它可能处于 limbo 状态,所以我决定 运行 gfix with limbo switch,结果是没有 transactions in limbo:

我尝试手动回滚它:

它警告我交易正在进行中。

有什么办法可以纠正这种情况吗?现在,我唯一能想到的就是做一个 backup/restore - 创建一个新的数据库并丢弃这个。

老实说,这种问题很少见,但令人沮丧。

如有任何提示,我们将不胜感激。

正如 Mark 指出的那样,重新启动 Firebird 服务删除了有问题的事务。

之后我注意到两件事:

  1. 第一次连接到服务器非常慢 - 我认为 FB 正在收集垃圾。
  2. 第一次连接几分钟后,查询速度比以前慢。

无论如何,我决定做一个backup/restore,一切都很好。