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

OLTP-EMUL 是官方的 Firebird 测试工具,用于在 Firebird 2.5 及以上版本上模拟真实的 OLTP 工作负载。在多个并发 ISQL 会话下进行性能和回归检查时使用它。运行测试前请仔细阅读本指南。

克隆仓库

Windows

git clone --config core.autocrlf=true https://github.com/FirebirdSQL/oltp-emul

Linux / POSIX

git clone --config core.autocrlf=false https://github.com/FirebirdSQL/oltp-emul

快速入门基于 Pavel Zotov(莫斯科)的工作。关于测试本身的问题:[email protected]。IBSurgeon 支持:[email protected]

1. 先决条件

在将要运行 ISQL 会话的主机上,安装 Firebird 客户端并确保以下二进制文件可用:

  • isql(在某些 POSIX 软件包中:isql-fb
  • fbsvcmgr

2. 选择并复制配置文件

src 文件夹中,选择与您的 Firebird 主版本和操作系统匹配的默认配置,然后将其复制并去掉 .default 后缀。

Firebird 操作系统 配置文件
2.5Windowsoltp25_config.win.default
2.5Linuxoltp25_config.nix.default
3.0Windowsoltp30_config.win.default
3.0Linuxoltp30_config.nix.default
4.0Windowsoltp40_config.win.default
4.0Linuxoltp40_config.nix.default
# Windows
copy .\oltp30_config.win.default .\oltp30_config.win

Linux

cp ./oltp30_config.nix.default ./oltp30_config.nix

3. 重要设置

编辑复制的配置。请特别注意以下内容:

  • fbc - 启动会话的机器上 isql 的路径
  • clu - 可选的非标准 ISQL 二进制名称(例如 POSIX 软件包中的 isql-fb
  • dbnm - 服务器上数据库的完整路径和文件名(仅限 ASCII;如果您希望脚本创建数据库,则不能使用别名)
  • hostportusrpwd - 连接参数
  • tmpdir - ISQL 日志和临时测试文件的目录
  • init_docs - 在测量工作负载之前创建的文档数(先尝试 3000-5000)
  • warm_time / test_time - 预热和测量阶段,以分钟为单位
  • sleep_min / sleep_max - 事务之间的暂停时间(将 sleep_max 设置为 0 可禁用暂停)
  • sleep_ddl - 可选的用于暂停的 UDF(优先于 shell sleep / cscript);二进制文件位于 util/udf64/
  • wait_for_copy - 初始化后暂停,以便在预热/测量之前对数据库进行快照(对于重复运行很有用)

初始化后,测试先运行 warm_time 分钟的预热,然后进行 test_time 分钟的测量。

4. Windows 和 firebird.conf 提示

将防病毒/操作系统扫描排除在 tmpdir 和 Firebird 临时文件夹(FIREBIRD_TMP / TMP / TEMP,以及 firebird.conf 中的 TempDirectories)之外。将 FIREBIRD_TMPTempDirectories 对齐可减少多个 ISQL 会话下的性能下降。

至少增加以下参数:

  • DefaultDbCachePages
  • LockHashSlots
  • LockMemSize
  • FileSystemCacheThreshold - 必须显式设置且大于 DefaultDbCachePages(测试会拒绝缺失/被注释的值,某些 POSIX 软件包布局除外)

页面缓存的目标约为内存的 25%。对于 Classic / SuperClassic,不要DefaultDbCachePages 设置为高于 2048。页面大小硬编码为 8192

中等负载示例(约 100 个会话):

参数 SuperServer 3.0+ [Super]Classic 3.0+ [Super]Classic 2.5
DefaultDbCachePages ~0.25 × 内存 / 8192 1024 1024
LockHashSlots 8191 16001 16001
LockMemSize 4194304 16777216 16777216

有关现成的配置,请参阅 配置计算器参考配置

5. 运行测试

打开 shell,切换到 src,然后运行:

1run_oltp_emul <FbMajor> <NumSessions> [nostop]
  • FbMajor - 对于 Firebird 2.5 / 3.0 / 4.0,分别为 253040
  • NumSessions - 要启动的 ISQL 会话数
  • nostop - 可选;跳过交互式暂停(从计划任务运行时很有用)

如果数据库文件不存在且 dbnm 是完整路径(不是别名),脚本可以创建它。不完整或空的旧数据库将根据需要重新创建。

6. 报告和停止

预热 + 测量时间结束后,会话自动停止。第一个 ISQL 会话在 tmpdir 下写入最终报告。在 Windows 上使用 make_html = 1 时,还会生成 HTML 报告(速度较慢)。

报告命名取决于 file_name_with_test_params

  • 注释状态(默认)- 例如 oltp**.report.txt
  • regular - 带时间戳的名称,适合在文件夹列表中浏览多次运行结果
  • benchmark - 适合比较设置/DDL变体的名称

报告包括架构和设置、总体及每间隔性能(CNT_OK_PER_MINUTE / AVG_TIMES_PER_MINUTE)、可选的监控详情、异常、数据库统计、版本/记录比率、修改表的验证,以及 firebird.log 的前后差异。

您还可以查询:

select * from srv_mon_perf_dynamic;
select * from srv_mon_perf_total;

提前停止

使用每次启动时在 tmpdir 中创建的 1stoptest.tmp.bat / .sh)。对于多主机启动,您可以改为在 firebird.conf 中启用 ExternalFileAccess,在 OLTP 配置中设置 use_external_to_stop,然后向该停止文件中写入一个字符(每次新运行前清除它)。

可重复的基线

设置 wait_for_copy = 1,让初始化完成,复制数据库,然后在每次比较运行前恢复该副本,以便每次测量都从相同的起点开始。

工作负载模拟的内容

该场景遵循汽车服务风格的业务文档:

  1. 客户(或内部)订购零件
  2. 订单合并并发送给供应商
  3. 供应商发票(全额或部分)
  4. 库存收货;客户订购的零件被预留
  5. 销售和库存核销
  6. 在多个步骤中可能发生取消
  7. 部分/全额付款和取消影响余额
  8. 第一个会话生成性能、异常、统计和验证报告