FBMonLogger
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 比率等。
连接到您想要查找性能问题的数据库后,应获取监控表的多个快照 - 点击「获取快照」即可获取快照。
用户连接的聚合性能统计
在第一个屏幕上,我们可以看到数据库连接的聚合统计信息,并识别问题最大的连接:
顺序读取 / 索引读取
「顺序读取 / 索引读取」显示应用程序中顺序(非索引)读取与索引读取之间的总比率。通常,非索引读取的数量应该很低,因此顺序读取的高百分比表明许多 SQL 查询使用 NATURAL 执行计划,这可能是响应时间缓慢的原因。
点击「TOP 连接:顺序/索引读取」中的记录将带您进入「连接」选项卡,您可以在其中查看有关连接的更多详细信息,然后跳转到「事务」或「语句」选项卡,您将看到与所选连接关联的事务和连接(如果勾选了「链接到所选连接」复选框,否则将显示所有连接的所有事务/语句)。
写入详细信息
「写入详细信息」为您提供写入操作的概览:所有数据库连接中 INSERT/UPDATE/DELETE 之间的比率。在顶级写入者表中,您可以看到写入操作次数最多的连接。这对于识别执行过多更新或删除操作(就垃圾回收而言最危险的操作)的应用程序或软件模块非常有用。
垃圾回收详细信息
垃圾回收操作意味着什么?
- Purge - 引擎删除后版本,数据库中仅保留主版本。
- Expunge - 主版本和所有后版本均被删除。
- Backout - 仅删除主版本(由于回滚)。
通常我们可以将 purge 与 UPDATE 操作关联,Expunge 与 DELETE 关联,Backout 与 INSERT 或 UPDATE 的回滚关联。大量 backout 可能意味着应用程序中的事务管理存在问题。
内存使用情况
「内存使用情况」图表显示当前所有活动连接使用的总内存,以及过去为它们分配的内存峰值。
按内存使用量排序的顶级连接列表显示连接中最大的内存消耗者。这对于查找内存使用过度的应用程序或软件模块非常有用。
语句的聚合性能统计
在第二个选项卡中,您可以找到语句的聚合性能统计信息。此统计信息更好地反映了数据库中的瞬时情况 - 由于监控表收集自每个对象生命周期开始以来的信息,您在此处看到的语句是那些在获取快照时正在运行的语句。
顺序读取 / 索引读取
在此列表中,我们可以看到执行大量数据库顺序读取的顶级语句。通常此类语句需要 SQL 调优 - 通过索引调优或 SQL 查询重新设计。
要调优查询,请检查其执行计划:通常可以通过使用新索引或查询重新设计来消除计划中的 NATURAL,从而提高查询速度。点击此列表中的语句以打开「语句」选项卡,您可以在其中找到有关所选语句的更多详细信息,并跳转到关联的事务或连接。
页面读取/页面写入
此图表和列表显示执行大量读取的顶级语句的简要信息 - 这意味着它们消耗大量 IO,并可能影响其他查询的性能。应仔细检查峰值值的 SQL 语句以确保最佳性能。
语句的写入详细信息
在此图表中,您可以查看在获取监控表快照时写入 SQL 语句正在执行的操作,并识别在数据库中进行了大量更改的 UPDATE 和 DELETE。
语句的垃圾回收详细信息
在此图表中,我们可以查看在快照时运行的语句执行了多少垃圾回收操作。
语句的内存使用情况
与连接的聚合内存使用统计信息不同,语句的内存使用情况可以显示在那一刻消耗大量内存的确切语句列表。
连接
第三个选项卡是「连接」。您可以直接打开此选项卡,或通过点击「聚合性能统计」中的记录之一跳转到此处。
连接显示连接到 Firebird 数据库的用户列表,包含许多有用的详细信息:连接的 USER 和 ROLE、开始时间和连接 ID、是否为连接启用了垃圾回收、建立连接的远程进程名称,以及连接的几个累积性能计数器:顺序读取次数 [自连接开始以来]、索引读取次数、插入、更新和删除次数,以及记录回滚(backout)、清除(purge)和删除(expunge)次数。
默认情况下,连接的某些列已关闭,仅显示最重要的信息。
当然,每次点击连接时,您都可以跳转到其中运行的事务,然后跳转到语句。「事务」和「语句」选项卡的左上角有一个复选框,用于控制行为 - 勾选后,仅显示由所选连接 ID 标记的事务和语句。
事务
「事务」选项卡显示在获取快照时处于活动状态的事务。如果启用了「链接到所选连接」复选框,则仅显示所选连接的事务,否则显示所有事务。
最重要的特征之一是事务的生命周期:由于 Firebird 设计用于短写入事务,因此保持它们尽可能短非常重要。FBMonLogger 会高亮显示具有隔离模式和读/写设置的事务,这些事务持有最旧活动事务(Oldest Active Transaction),从而阻止过多的记录版本被清除。如果您看到此类事务且它已启动一段时间,则意味着它可能是导致过多记录版本的原因。
按「开始时间」列排序,查找以红色标记的旧事务:所有可写事务和只读快照都会卡住最旧活动事务(Oldest Active Transaction),并导致过多的记录版本被保留。识别这些事务的启动位置(右键单击并选择「查看父连接」),并修复您的代码以更早提交此事务。
ステートメント
「ステートメント」タブには、スナップショット時点でアクティブなステートメントが表示されます。すべてのステートメントを捕捉する必要がある場合は、FBPerfMon または FBScanner を使用してください(これらのツールはすべて IBSurgeon Optimization Pack の一部です)。
「選択したアタッチメントにリンク」が有効な場合、特定のアタッチメントのステートメントのみが表示され、無効な場合はすべてのアクティブなステートメントがリストに表示されます。
一部のステートメントには関連するトランザクションIDがありません(=0):これらのクエリは準備済みですが、実行されていません。




