从 Firebird 数据库中删除垃圾

Posted

技术标签:

【中文标题】从 Firebird 数据库中删除垃圾【英文标题】:Remove Garbage form Firebird DataBase 【发布时间】:2013-05-18 10:06:01 【问题描述】:

Firebird 2.1.3 数据库似乎从未完成的事务中创建了大量垃圾,这导致数据库运行非常缓慢,直到通过数据库扫描或服务器重新启动删除其垃圾。我的数据库大小为 30gb+。 你知道是什么原因造成的吗? 是否有任何新的存储过程会产生过多的垃圾? 请帮帮我。?

【问题讨论】:

【参考方案1】:

Firebird 数据库在一段时间后变慢通常是客户端事务管理不良的标志。这可以通过检查头页中的各种事务计数器来轻松检查,可以通过运行来查询:

gstat -h <yourdatabase>

当您的数据库变慢时。例如:几乎所有访问库在以自动提交模式运行事务时(基本上是当您不关心在客户端应用程序中启动显式事务时)都使用 COMMIT RETAINING,这基本上会阻止 OIT/OAT 向前移动。

除了 gstat 命令行工具,在 Firebird 2.1 中,您还拥有监控表,尤其是 MON$TRANSACTIONS,以识别长时间运行的事务。

【讨论】:

我需要从数据库中删除所有垃圾记录。请给我任何方法。? 通过例如运行所谓的“扫描”。 gfix 命令行工具。如果没有并发事务对“查看”记录版本感兴趣,则扫描基本上会访问数据库中的所有记录并删除过时的记录版本。当没有(长时间运行的)事务处于活动状态时,扫描通常是最有效的。另一种选择是通过运行备份/恢复周期从头开始重新创建数据库,例如gbak 命令行工具。

以上是关于从 Firebird 数据库中删除垃圾的主要内容,如果未能解决你的问题,请参考以下文章

从 Firebird 数据库表中获取列名列表

SAS:从 XML 中删除垃圾数据

如何从数组输出中删除垃圾数据

Firebird 从 2.1.3 升级到 2.5?

如何在 C# 中为 Firebird 执行块语句

c# 并从内存中删除敏感数据和所有垃圾收集副本