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

FBMonLogger 现在是 HQbird Standard 的一部分!

FBMonLogger 是一款用于分析 Firebird 监控表输出、发现慢 SQL 查询、错误设计的事务(长时间运行的事务、隔离级别不正确的事务等)问题并识别问题应用程序的工具。

FBMonLogger 可以连接到存在性能问题的 Firebird 数据库,并识别缓慢的原因:是某个用户连接、慢 SQL 查询还是长时间运行的事务?

FBMonLogger 支持 Firebird 2.1、2.5 和 3.0 - 对于更旧版本的 Firebird 或 InterBase,请使用 FBScanner

FBMonLogger 可以为您显示:

  • IO 操作次数、非索引读取和索引读取次数最多的顶级连接
  • IO 操作次数、非索引读取和索引读取次数最多的顶级 SQL 语句
  • 有问题的交易:长时间运行的事务、隔离级别错误的事务、读/写事务,以及相关信息:它们何时开始、哪些应用程序启动了这些事务、来自哪个 IP 地址等
  • 垃圾回收操作最频繁的连接和语句
  • 读/写比率、INSERT/UPDATE/DELETE 比率等。

连接到您想要查找性能问题的数据库后,应对监控表进行多次快照 - 点击「获取快照」即可拍摄快照。

用户连接的聚合性能统计

FBMonLogger

在第一个屏幕上,我们可以看到数据库连接的聚合统计信息,并识别问题最大的连接:

顺序读取 / 索引读取

「顺序读取 / 索引读取」显示应用程序中顺序(非索引)读取与索引读取的总比率。通常非索引读取的数量应该很低,因此顺序读取的高百分比表明许多 SQL 查询使用 NATURAL 执行计划,这可能是响应时间缓慢的原因。

点击「TOP 连接:顺序/索引读取」中的记录将带您进入「连接」选项卡,您可以在其中查看有关连接的更多详细信息,然后跳转到「事务」或「语句」选项卡,您将看到与所选连接关联的事务和连接(如果勾选了「链接到所选连接」复选框,否则将显示所有连接的所有事务/语句)。

写入详情

「写入详情」为您提供写入操作的概览:所有数据库连接中 INSERT/UPDATE/DELETE 之间的比率。在写入最多的表中,您可以看到写入操作次数最多的连接。这对于识别执行过多更新或删除操作(就垃圾回收而言最危险的操作)的应用程序或软件模块非常有用。

垃圾回收详情

垃圾回收操作意味着什么?

  • Purge - 引擎移除后版本,数据库中仅保留主版本。
  • Expunge - 主版本和所有后版本均被删除。
  • Backout - 仅移除主版本(由于回滚)。

通常我们可以将 purge 与 UPDATE 操作关联,Expunge 与 DELETE 关联,Backout 与 INSERT 或 UPDATE 的回滚关联。大量 backout 可能意味着应用程序中的事务管理存在问题。

内存使用

「内存使用」图表显示当前所有活动连接使用的总内存,以及过去为它们分配的内存峰值。

按内存使用量排序的顶级连接列表显示您的连接中最大的内存消耗者。这对于查找内存使用过多的应用程序或软件模块非常有用。

语句的聚合性能统计

FBMonLogger

在第二个选项卡中,您可以找到语句的聚合性能统计信息。此统计信息更好地反映了数据库中的瞬时情况 - 由于监控表收集自每个对象生命周期开始以来的信息,您在此处看到的语句是拍摄快照时正在运行的语句。

顺序读取 / 索引读取

在此列表中,我们可以看到执行大量数据库顺序读取的顶级语句。通常此类语句需要 SQL 调优 - 通过索引调优或 SQL 查询重新设计。

要调优查询,请检查其执行计划:通常可以通过使用新索引或查询重新设计消除计划中的 NATURAL 来提高查询速度。点击此列表中的语句以打开「语句」选项卡,您可以在其中找到有关所选语句的更多详细信息,并跳转到关联的事务或连接。

页面读取/页面写入

此图表和列表显示执行大量读取的顶级语句的简要信息 - 这意味着它们消耗大量 IO,可能影响其他查询的性能。应仔细检查峰值值的 SQL 语句以确保最佳性能。

语句的写入详情

在此图表中,您可以查看拍摄监控表快照时正在执行的写入 SQL 语句,并识别在数据库中进行了大量更改的 UPDATE 和 DELETE。

语句的垃圾回收详情

在此图表中,我们可以看到拍摄快照时正在运行的语句执行了多少垃圾回收操作。

语句的内存使用

与连接的聚合内存使用统计不同,语句的内存使用可以显示当前消耗大量内存的确切语句列表。

连接

FBMonLogger

第三个选项卡是「连接」。您可以直接打开此选项卡,或通过点击「聚合性能统计」中的记录跳转到此处。

连接显示连接到 Firebird 数据库的用户列表,包含许多有用的详细信息:连接的 USER 和 ROLE、连接的开始时间和 ID、是否为连接启用了垃圾回收、建立连接的远程进程名称,以及连接的几个累积性能计数器:顺序读取次数 [自连接开始以来]、索引读取次数、插入、更新和删除次数,以及记录回退、purge 和 expunge 次数。

默认情况下,连接的某些列已关闭,仅显示最重要的信息。

当然,每次点击连接时,您都可以跳转到其中运行的事务,然后跳转到语句。「事务」和「语句」选项卡左上角有一个复选框,用于控制行为 - 勾选后,仅显示由所选连接 ID 标记的事务和语句。

事务

FBMonLogger

「事务」选项卡显示拍摄快照时处于活动状态的事务。如果启用了「链接到所选连接」复选框,则仅显示所选连接的事务,否则显示所有事务。

最重要的特征之一是事务的生命周期:由于 Firebird 设计为使用短写入事务,因此保持它们尽可能短非常重要。FBMonLogger 会高亮显示持有最旧活动事务的隔离模式和读写设置的事务,这些事务会导致过多的记录版本无法被清除。如果您看到此类事务且它已启动一段时间,则意味着它可能是过多记录版本的原因。

按「开始时间」列排序并查找以红色标记的旧事务:所有可写事务和只读快照都会卡住最旧活动事务,导致过多的记录版本被保留。识别这些事务的启动位置(右键单击并选择「查看父连接」)并修复您的代码以更早提交此事务。

语句

FBMonLogger

「语句」选项卡显示快照时刻处于活动状态的语句:如果您需要捕获所有语句,应使用 FBPerfMon 或 FBScanner(所有这些工具都是 IBSurgeon Optimization Pack 的一部分)。

如果启用了「链接到所选连接」,则仅显示特定连接的语句,否则列表中显示所有活动语句。

某些语句没有关联的事务 ID(=0):这些查询已准备但未执行。