此页面为机器翻译。请阅读英文原文。 English

IBAnalyst 现在是 HQbird Standard 的一部分!

IBAnalyst 是一款工具,允许数据库管理员分析详细的 Firebird 或 InterBase 数据库统计信息,然后识别数据库性能、维护以及应用程序与数据库交互方式方面可能存在的问题。

文档

IBAnalyst 以用户友好的方式图形化显示 Firebird(或 InterBase)数据库统计信息,并突出显示以下问题:

  • 表和 BLOB 碎片化,
  • 记录版本控制,
  • 垃圾回收,
  • 索引有效性等

此外,IBAnalyst 可以自动提出关于改善数据库性能和数据库维护的智能建议。

IBAnalyst 可以通过 Services API(推荐)从生产数据库获取实时统计信息,或分析 gstat -a -r … 命令的文本输出。高峰负载期间的统计信息可以提供大量关于生产数据库实际性能问题的信息。

IBAnalyst 如何帮助您发现 Firebird 或 InterBase 数据库中的问题

让我们了解 IBAnalyst 的关键功能。当您第一次在 IBAnalyst 中查看数据库统计信息时,可能会感到不清晰,尤其是当 IBAnalyst 在摘要、表和索引视图中通过红色和黄色单元格显示大量警告时。让我们看几个实际的统计信息示例。

摘要视图

IBAnalyst 摘要

摘要页面显示大量信息,但最有价值的是事务状态(请阅读 IBAnalyst 帮助中关于可能的事务状态的描述,可通过按 F1 或菜单中的“帮助”获取)。

在此截图中,您可以看到某个事务已长时间处于活动状态,“占每日平均值的 60%”。IBAnalyst 将此事务的状态标记为红色,因为此事务可能会阻止服务器将累积的版本视为垃圾,从而阻止其被垃圾回收。这可能是性能变慢的原因:某个记录存在的版本越多,读取它所花费的时间就越长。

为了找到这个长时间运行的事务,您可以使用 FBScanner 的 MON$Logger 模块,或直接查询 MON$ 表。然后,要找出哪些表受到长时间运行事务的影响(具有大量记录版本的表),您需要转到 IBAnalyst 的“表”视图。

表视图

IBAnalyst 表

在“表”视图中,您可以看到表及其重要参数:记录数、记录版本数、记录长度、最大版本数等。

您可以对此视图进行排序以找到最大的表。我们特别关注具有大量记录版本的表–大量记录版本会使受影响表的垃圾回收时间更长。通常需要更改更新和删除算法以消除大量记录版本。

“行版本”显示特定表的总版本数,“最大版本”行显示某个记录达到的最大版本数。例如,如果您查看 NAB 表,有 1190 万条记录,总版本数为 20932,但一条记录有 176 个版本。从磁盘读取和解析这样的数据包需要更多时间,因此读取此记录比读取其他记录更慢。

此图还显示了许多数据已被删除的表。但是,由于长时间运行的事务,服务器无法删除这些版本,它们仍然在磁盘上,仍然被索引,并且在读取数据时仍会被服务器读取。

索引视图

IBAnalyst 索引

某些生产数据库可能具有仅索引了单一键值的索引。这可能是因为数据库是“为将来扩展而开发”的,或者有人在开发或测试期间尝试了索引。您可以在 IBAnalyst 中将这些索引视为“无用”:

SKIN04、SKIN05、SKOUT03 等,构建在对于所有行(数百万行)只有单一值的列上。这些索引确实无用,因为:

  • 如果您指定“where field = …”,优化器可能会使用此索引。由于该字段只包含一个值,使用索引将导致从磁盘到内存的无用索引页读取,并在服务器准备该查询要显示哪些行时消耗内存(和时间)。
  • 创建索引是恢复过程的一部分。额外的索引会增加额外的时间。

当然,这并不是您在 IBAnalyst 中能了解到的关于数据库的全部信息。您还可以找到:

  • 每天的平均事务数
  • 是否发生过回滚或连接丢失,以及发生时间
  • 每个表和索引的大小(以兆字节为单位)
  • 记录与 BLOB 交错存储的表,因此仅读取记录会更慢
  • 空表–只是被遗忘,或者在采集统计信息时为空
  • 具有大量重复键的索引(您可以考虑列值的分布)
  • 深度为 4 或更大的索引–也许您需要增加页面大小以加快速度

自动建议

如果您对阅读彩色单元格警告感到困惑,只需打开“报告\查看建议”–所有与数据库性能相关的必要信息都汇集在这里。请随时提出任何问题([email protected])。