FBScanner
FBScanner 已被 HQbird 取代。请参阅 HQbird 中的监控。
FBScanner(Firebird Scanner)是一款用于解决 Firebird 各类性能问题的工具。
FBScanner 文档
FBScanner 模块
FBScanner 是 IBSurgeon 最高效的工具之一:它跟踪服务器与客户端之间的 SQL 流量。FBScanner 的功能包括:
- LogAnalyzer - 用于详细分析 SQL 查询、执行计划、事务和连接的工具,支持所有版本的 Firebird 和 InterBase。
- FBScanner Viewer - 实时查看器,显示通过 FBScanner Service 的连接、查询和事务,支持所有版本的 Firebird 和 InterBase。
- 支持所有版本的 Firebird(1.0 - 2.5)和 InterBase(4.0-XE3)。FBScanner 是唯一能够在 Firebird 2.1 之前的版本中分析生产环境 Firebird 和 InterBase 数据库 SQL 查询的工具,尤其是当应用程序由第三方开发且没有源代码可用时。
FBScanner 最令人兴奋的功能列表:
- 记录 SQL 查询、连接和事务及其所有参数,用于详细分析(适用于单个或多个工作站点),以查找 Firebird(所有版本)和 InterBase(所有版本)中的性能瓶颈。
- 实时监控连接。FBScanner Viewer 显示到所选数据库服务器的所有连接:已连接客户端的 IP/DNS 名称、数据库和连接时间。
- 实时监控 SQL 查询。对于每个连接,FBScanner 显示所有当前正在运行的 SQL 查询及其事务参数。
- 检测最旧的连接和最旧的活动事务,以便您分析可能存在的非最优事务行为、不正确的事务设计,或显示可能以影响性能的方式使用应用程序的用户。
- 客户端断开连接(10054 错误)。检查断开连接是否正确进行,您也可以使用此软件断开用户连接以执行维护或数据库升级。
- FBScanner 允许对特定应用程序或特定用户进行路由,以便您聚焦于特定应用程序或用户。
FBScanner 如何帮助识别和解决 Firebird 或 InterBase 性能问题?让我们快速回顾 FBScanner 最有趣的功能,从 LogAnalyzer 模块开始。
步骤 1:LogAnalyzer “服务器负载”
下载 FBScanner 演示版并安装。从开始菜单运行"FBScanner Service Settings",然后点击"高级选项",选择"SQL Log"选项卡。
创建日志数据库(它应位于本机或另一台计算机上的另一个 Firebird 实例上 - 请参阅"FBScanner 用户指南"第 14-16 页了解详情)。之后,所有通过 FBScanner 的 SQL 流量都将存储在日志数据库中。
运行"FBScanner Log Analyzer"并连接到日志数据库。在第一个选项卡"服务器负载"中,您可以查看 SQL 连接和语句的概览。很容易看到负载峰值并确定性能不佳的时刻。
您可以缩放和滚动此性能图表,打开或关闭参数显示 - 以便捕捉问题开始的时刻。之后右键单击要深入查看的点,选择"转到 HH:mm 的 SQL 列表"。
步骤 2:LogAnalyzer 中的 SQL 日志
如果您选择了"所有语句"选项卡,将显示所有 SQL 查询的列表。请注意,这些 SQL 查询来自 FBScanner 记录的所有连接(可以设置 FBScanner 仅监控单个连接或一组计算机,或仅监控选定的应用程序 - 您只需使用适当的连接字符串和/或端口 - 请参阅"FBScanner 用户指南"了解详情)。
您可以缩小搜索范围 - 设置开始和结束时间,然后按 EXECUTION_TIME 排序查询,以查看最长的查询。
对于每个查询,您可以查看 SQL 查询文本、其参数、开始/结束时间、获取的记录数,还可以知道谁在何时执行了它:IP 地址、用户名等。
您还可以强制 FBScanner 记录 SQL 执行计划,为此您需要在"FBScanner Service Settings"中设置相应的勾选标记。
当您识别出有问题的查询后,可以查看其连接和事务:右键单击并选择"查看语句 ID=… 的连接和事务"。这将带您进入"所有连接和日志"选项卡。
步骤 3:连接和事务
“所有连接和日志"选项卡包含所有连接的列表,以及作为主从关系关联的事务和语句。
当您点击下方网格中的 SQL 查询时,同一事务范围内的所有语句将显示为粗体。这使您了解真实的事务流程。此外,还有事务的参数(空的事务参数表示该事务具有默认的"等待、写入、快照"参数)。
此外,FBScanner LogAnalyzer 允许针对另一个数据库版本运行所选查询并比较其性能。它还可以执行批量 SQL 执行,这在 Firebird 版本之间迁移时非常有用。
重要! FBScanner 演示版将某些查询文本存储为"Demo”,且仅可运行 7 天。完整版没有这些限制。
步骤 4:FBScanner Viewer
FBScanner Viewer 是 FBScanner 的一部分,负责实时跟踪连接、查询和事务。 FBScanner Viewer 直接连接到 FBScanner Service 并检索 SQL 流量信息。
FBScanner Viewer 可以在本地网络中的任何机器上运行:它默认通过端口 30100 连接并从 FBScanner Service 拉取在线数据。
默认情况下,FBScanner Viewer 每 0.5 秒刷新一次状态,还可以查看该连接的最近 20 条查询。
对于较慢(互联网)连接,例如可以将 FBScanner Viewer 设置为每 5 秒刷新一次数据。
此外,FBScanner Viewer 还可用于连接管理:它可以断开用户连接(选定的、全部、按掩码),并模拟 10054 断开错误,同时支持白名单和黑名单功能。
成功优化的提示
重要! 建议从 MON$Logger 开始性能问题调查:在负载高峰期(用户遇到最严重缓慢时)从数据库获取多个快照,并尝试找出哪些业务流程消耗最多的 IO(注意 READ_SEQ_READS 和 RECORD_IDX_READS 值较高的查询)。
然后在这些工作站上安装 FBScanner Service(或使用专用服务器),记录可疑工作站的所有查询:调查其 EXECUTE 和 PREPARE 时间,检查 SQL 执行计划等。找到并修复问题,然后验证新版本比之前运行得更快!
使用 FBScanner Viewer 实时查看服务器上执行的查询(此功能对于调试复杂 SQL 也非常有用)。
FBScanner 描述
FBScanner 是面向 Firebird 和 InterBase 管理员和开发人员的强大工具,专为拦截和分析服务器与客户端应用程序之间的 TCP/IP 流量而设计。
FBScanner 实时提取大量关于连接、查询(语句)、事务的详细信息,并通过独特的标签机制标记和跟踪所有这些流量对象。FBScanner 还可以将所有活动记录到外部 Firebird 数据库,并执行多项独特的管理任务。
FBScanner(Firebird 扫描器)是一款能够监控并查看 Firebird 和 InterBase 服务器与其客户端应用程序之间所有流量的工具。
FBScanner 服务在装有 Firebird/InterBase 的计算机上充当网关(代理)(仅限 Windows),或者可以安装在远程计算机上,并与所有受支持操作系统(Windows、Linux、Mac OS X、HP-UX 等)上的 Firebird 配合使用。
FBScanner 可用于分析数据库应用程序的性能、监控用户活动、管理数据库连接(包括在 Classic 和 SuperServer 架构下断开客户端连接)。它也是排查 INET 错误(INET/inet_error: send errno = 10054)的理想工具,同时适用于审计现有应用程序和性能调优。
FBScanner 支持 Firebird(1.0、2.0、2.1、2.5)和 InterBase(4.0、5.x、6.x、7.0、7.1、7.5、2007、2009、XE、XE3)。
FBScanner 对数据库应用程序而言是透明的,不需要对应用程序或数据库源代码、逻辑或配置进行任何更改。
FBScanner V3.x 仅适用于 Windows,并且需要安装 .NET 2.0(或更高版本)框架。
关于 FBScanner 的演示文稿
| FBScanner:IBSurgeon 用于解决 Firebird 各类性能问题的工具。 | Firebird 迁移:从 Firebird 1.5 到 Firebird 2.5 查看更多来自 Nataly Polyanskaya 的演示文稿 |
FBScanner 的工作原理
FBScanner 服务
重要! 在本节中,我们不描述 MON$Logger 和 TraceAPI 插件的工作,仅介绍 FBScanner 服务、FBScanner 查看器和 LogAnalyzer。
FBScanner 服务通常必须安装在运行 Firebird 或 InterBase 服务器的同一台计算机上(作为选项,您可以将其安装在其他计算机上,然后将流量重定向到实际的 Firebird 或 InterBase 服务器)。在安装过程中,FBScanner 配置实用程序会要求您选择:将 FBScanner 安装到 InterBase 或 Firebird 的默认端口(3050)并将 Firebird 服务的配置更改为 3052(可调整),或者将 FBScanner 安装为监听另一个 TCP 端口。
重要! FBScanner 服务仅适用于 TCP 连接,因此使用本地(XNET)和 NetBEUI(WNET)连接字符串的客户端将绕过 FBScanner。要监控此类客户端应用程序,您应使用 MON$Logger 和 TraceAPI 插件。
如果您选择第一种安装选项,所有应用程序请求都将通过 FBScanner 服务。
| ##### 服务器端安装 | ##### 远程安装 |
![]() |
![]() |
性能影响
性能优化过程的通常场景包括在 1-2 台典型工作站上安装 FBScanner,以捕获典型的 SQL 流量。没有理由拦截并记录来自所有工作站的 SQL 流量–信息量太大,难以分析,而且重复查询过多。
然而,如果您希望将 FBScanner 安装为整个服务器的代理并记录所有操作,请确保提供与生产服务器相当的 IO 带宽以及可比的 CPU 和 RAM。对于高负载数据库,FBScanner 的日志每天可能增长数 GB。在这种情况下,我们建议使用专用(远程服务器)安装 FBScanner。
FBScanner 服务不会更改传输流量中的任何内容,其工作方式类似于透明代理,因此所有应用程序将继续正常运行。FBScanner 服务在监控 50-70 个活动客户端时大约消耗 125-150 MB 内存,并且在使用时会使数据库性能降低 5% 到 15%。内存消耗取决于客户端应用程序的设计。所需的 IO 带宽取决于 SQL 流量的强度。
在测试过程中,我们在多个真实环境和应用程序中检查了 FBScanner 的工作情况,这些环境中数据库有 30-200 个活动连接,并注意到性能下降非常小。在许多情况下,用户无法察觉监控正在运行。
流量分段
在非标准端口上使用 FBScanner 可以使其对不同应用程序的不同流量进行分段。例如,有应用程序 A 和 B。B 是一个旧且稳定的应用程序,不需要任何调优或监控,而 A 是一个新应用程序。很容易为新应用程序 A 设置连接字符串以使用非标准端口(例如 server/3070:Disk:\Path\database.gdb),并通过 FBScanner 路由来自 A 应用程序的所有请求,以监控 SQL 查询和应用程序行为。

使用这种方法,您可以轻松识别并解决生产环境中的问题,无论问题来自新应用程序,还是来自本地网络的特定网段。





