基准测试工具之你不知道的两三事 | 13. 怎样保存和复盘一轮测试
基准测试最令人遗憾的结果不是吞吐量低而是几天后再看那张截图已经说不清它来自哪个版本、哪份配置和哪台机器。性能结果天然依赖上下文。同样的吞吐量可能来自不同设备数、批大小、接口、数据库参数和硬件状态同一个 P99 峰值也可能对应客户端 GC、网络抖动、服务端合并或磁盘写满。没有原始证据复盘只能变成猜测。这一篇讨论怎样把一次 IoT Benchmark 运行保存为“可追溯实验包”让结果不仅能看还能复现、解释和审计。1. 为什么只保存截图远远不够截图通常只能保留某一刻的结果矩阵却会丢失决定结果含义的条件。只留下的内容后来无法回答的问题一张吞吐量截图使用了哪个数据库版本和写入接口一份config.properties服务端配置、硬件和网络环境是否相同一个最终 CSV测试中途是否出现超时、重试或错误日志一组监控曲线曲线的时间窗口对应哪一轮 Benchmark一句“测试通过”正确性验证检查了数量、时间戳还是具体值真正可复盘的结果必须能够重新建立“这一轮究竟发生了什么”的时间线。测试问题运行编号配置与版本原始日志与结果资源与正确性证据异常时间线带边界的结论2. 先给每轮测试一个唯一编号不要使用“最终版”“再跑一次”或“test2”作为运行名称。一个实用的运行编号至少应包含日期、对象、负载和轮次例如20260718-iotdb200-session-write-r03它可以映射为字段示例作用日期20260718便于按时间定位环境变化。被测对象iotdb200-session标明版本族或接口。负载write区分纯写、混合、乱序等场景。轮次r03保留同一配置下的重复运行。如果是多实例集群测试还应为每个客户端增加实例后缀如client-0、client-1并由一个总运行编号把它们关联起来。3. 建立一份可追溯实验包下面是一种建议目录。它不是 IoT Benchmark 自动生成的固定格式而是测试者在工具输出之外建立的归档约定。runs/20260718-iotdb200-session-write-r03/ ├── README.md # 测试问题、结论与异常摘要 ├── manifest.yaml # 运行编号、时间、机器和版本 ├── config/ │ ├── benchmark.properties # 本轮实际使用的完整配置 │ └── database.conf # 与结论相关的服务端配置 ├── output/ │ ├── benchmark.log # 完整客户端日志 │ └── test-result.csv # 最终结果与配置快照 ├── monitor/ │ ├── client/ # 压测机 CPU、网络、GC 等 │ └── server/ # 每个数据库节点的资源记录 ├── correctness/ │ ├── verification.log # 验证日志 │ └── checks.md # 预期量、实际量与抽样结果 └── checksums.txt # 关键数据集和文件校验值这个目录最重要的原则是原始证据与人工结论分开保存。日志和 CSV 不应被手工“修漂亮”异常解释放进README.md必要的清洗或汇总则另存新文件并说明生成方法。4. IoT Benchmark 提供了哪些结果出口在当前配置中至少要区分两类 CSV 能力。4.1CSV_OUTPUT保存最终结果和配置CSV_OUTPUTtrue当前代码会把配置、结果指标和延迟统计写入data/csvOutput/下的测试结果文件。它适合保存一轮结束时的最终汇总也是最轻量的归档方式。4.2TEST_DATA_PERSISTENCE持久化测量结果TEST_DATA_PERSISTENCECSV RECORD_SPLITtrue RECORD_SPLIT_MAX_LINE10000000 REMARKwrite_baseline_r03TEST_DATA_PERSISTENCE支持None、IoTDB、MySQL和CSV。选择 CSV 时工具会通过CSVRecorder保存测量记录选择数据库时则需要配置对应的结果库地址、端口、库名、账号和连接参数。二者不要混为一谈CSV_OUTPUTtrue负责输出最终测试结果 CSVTEST_DATA_PERSISTENCECSV走的是测量结果持久化路径。是否两者都开启取决于你需要“最终摘要”还是“更细的过程记录”。需求建议配置说明只保留最终结果与配置CSV_OUTPUTtrue简单适合小规模手工测试。保存更细的测量记录TEST_DATA_PERSISTENCECSV便于分析不同操作和时间段。多轮集中查询结果TEST_DATA_PERSISTENCEIoTDB或MySQL需要单独维护结果库和标识。只看终端或日志TEST_DATA_PERSISTENCENone仍建议额外归档完整日志和配置。配置中的账号和密码不应原样进入公开实验包。可以保存一份脱敏副本同时在受控位置保留实际运行配置。5. 用REMARK和打印间隔增强可追踪性REMARK会参与结果标识或表名构造适合放入简短、无特殊字符的运行标签REMARKiotdb200_session_write_r03 # 保留必要的进度和中间结果 IS_QUIET_MODEfalse LOG_PRINT_INTERVAL5 RESULT_PRINT_INTERVAL60中间结果不是最终结论但它能帮助建立时间线。例如第 180 秒开始 P99 上升而同一时刻某个节点磁盘写入等待升高就比“整轮平均值变差”更容易定位问题。设置打印间隔时也要控制日志量。过密的日志可能产生额外开销过疏则可能错过短时异常。最稳妥的做法是在正式对比前固定间隔并让所有候选对象使用相同配置。6. 配置、版本和环境要保存到什么粒度仅保存 Benchmark 配置还不够。一轮测试至少应记录下面这些信息类别必须记录推荐补充BenchmarkGit 提交或发布版本、DB_SWITCH、完整配置Java 版本、启动方式、客户端日志级别。数据库产品版本、提交或镜像摘要、关键服务端配置驱动版本、插件版本、后台任务状态。数据数据来源、设备数、测点数、类型、时间范围输入文件校验值、乱序比例与随机种子。硬件CPU、内存、磁盘类型与容量、机器数量NUMA、文件系统、挂载参数。部署单机或集群、节点角色、副本和分片设置容器限制、网络拓扑、访问入口。时间开始与结束时间、时区、预热与正式阶段各机器时钟同步状态。版本最好记录为不可变标识例如 Git commit、容器镜像 digest 或完整构建号而不是只写“最新版”。数据库配置也应保存本轮实际生效值不能只链接一份后来可能被修改的公共配置。7. 资源监控必须与运行时间对齐资源曲线只有和 Benchmark 时间线对齐后才有解释力。多机测试尤其要确认时区和系统时钟一致并保存以下关键时间点数据库启动或重启完成时间预热开始与结束时间正式运行开始与结束时间异常、超时或人工操作时间正确性验证开始与结束时间。监控系统数据库压测客户端监控系统数据库压测客户端开始采集预热负载正式运行开始响应、超时或错误记录中间结果正式运行结束正确性验证结束采集并归档时间窗口如果测试期间发生了清库、重启、扩容或参数修改必须记入时间线。这类操作不能只写在聊天记录里否则之后无法判断曲线变化来自系统还是人工干预。8. 怎样复盘一轮测试复盘不应从“吞吐量是多少”开始而应按证据门禁逐层推进。第一步确认实验身份检查运行编号、候选对象、配置摘要、开始结束时间和结果文件是否互相对应防止拿错轮次。第二步检查完整性与正确性确认进程是否正常结束成功与失败点数是否符合预期验证日志是否存在值或行数差异。正确性未通过时性能结果应标记为无效。第三步观察稳定阶段把预热、正式运行和收尾阶段分开。平均吞吐量不能掩盖正式阶段内部的持续下降、周期抖动或长尾恶化。第四步关联资源和事件将 P99、失败数与客户端 CPU、服务端 CPU、磁盘、网络、GC 和后台任务放在同一时间轴上。相关性可以帮助定位但仍不能直接当作因果结论。第五步与同配置多轮结果比较确认当前结果是否落在稳定范围。若只在某一轮异常应先解释环境和状态差异若多轮都出现相同变化才更接近可重复现象。9. 一份复盘摘要应该怎样写一个合格的README.md不需要很长但应包含以下内容# 运行摘要 - 运行编号待填 - 测试问题待填 - 被测对象与版本待填 - 唯一变量待填 - 正式运行窗口待填 - 正确性门禁通过 / 未通过 / 未执行 ## 主要结果 - 各操作成功点数、失败点数待填 - 吞吐量与 P99 的多轮范围待填 - 客户端与服务端资源峰值待填 ## 异常时间线 - 时间点—现象—相关日志—相关资源待填 ## 结论与边界 - 当前证据支持的结论待填 - 尚不能覆盖的场景待填 - 下一步复测条件待填“未执行”比空白更好因为它明确告诉读者哪一类证据缺失。若某项数据来自人工计算或二次汇总也应注明来源文件和计算口径。10. 四个常见误区第一只保存最好的一轮。异常轮次同样重要它能揭示稳定性和环境敏感性。第二测试结束后再凭记忆补配置。运行前就应复制实际配置并生成运行编号。第三把监控截图当原始数据。截图适合展示原始时间序列才适合复盘和重新计算。第四修改原始日志后不留痕迹。任何过滤、聚合和清洗都应生成新文件保留原始证据。系列文章第一篇数据库基准测试工具是什么第二篇从一次时序数据库写入测试开始第三篇如何模拟线上写入负载第四篇如何读懂测试结果波动第五篇什么是读写混合负载第六篇如何模拟线上读写混合负载第七篇怎样做一场公平的性能对比第八篇怎样找到并发与批大小的合理区间第九篇如何模拟乱序写入第十篇不同写入接口该怎样比较第十一篇性能测试与正确性验证有什么区别第十二篇单机测试与集群测试有什么不同第十三篇怎样保存和复盘一轮测试第十四篇一份可复用的基准测试方案模板

相关新闻

广东AI企业崛起:百亿市值背后的技术与商业逻辑

广东AI企业崛起:百亿市值背后的技术与商业逻辑

1. 广东资本市场新势力崛起:AI驱动下的"百亿市值俱乐部"扩容 去年这个时候,广东的百亿市值上市公司名单还只有87家。今天打开股票软件,这个数字已经变成了96家。作为长期跟踪区域经济发展的观察者,我注意到一个有趣的现…

2026/7/24 21:16:33 阅读更多 →
CefFlashBrowser:如何在2025年完美运行Flash内容与游戏存档?

CefFlashBrowser:如何在2025年完美运行Flash内容与游戏存档?

CefFlashBrowser:如何在2025年完美运行Flash内容与游戏存档? 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 当现代浏览器纷纷告别Flash时代,你是否还在…

2026/7/24 7:32:56 阅读更多 →
3分钟诊断修复:为什么你的老手柄在新游戏中失灵?

3分钟诊断修复:为什么你的老手柄在新游戏中失灵?

3分钟诊断修复:为什么你的老手柄在新游戏中失灵? 【免费下载链接】XOutput A small DirectInput to Xinput wrapper 项目地址: https://gitcode.com/gh_mirrors/xou/XOutput 当你满怀期待地连接珍藏多年的游戏手柄,准备在现代游戏中重…

2026/7/23 11:27:50 阅读更多 →

最新新闻

DriverStore Explorer:你的Windows驱动管家,告别系统臃肿的终极解决方案

DriverStore Explorer:你的Windows驱动管家,告别系统臃肿的终极解决方案

DriverStore Explorer:你的Windows驱动管家,告别系统臃肿的终极解决方案 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否曾为Windows系统越来越慢而烦恼&a…

2026/7/25 1:12:02 阅读更多 →
如何将小爱音箱改造成真正的AI语音助手:MiGPT完整配置指南

如何将小爱音箱改造成真正的AI语音助手:MiGPT完整配置指南

如何将小爱音箱改造成真正的AI语音助手:MiGPT完整配置指南 【免费下载链接】mi-gpt 🏠 将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手。 项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt 想让家里的小爱音箱摆脱&q…

2026/7/25 1:12:02 阅读更多 →
Adobe-GenP 3.0:5分钟快速解锁Adobe全家桶的终极解决方案

Adobe-GenP 3.0:5分钟快速解锁Adobe全家桶的终极解决方案

Adobe-GenP 3.0:5分钟快速解锁Adobe全家桶的终极解决方案 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 在创意设计领域,Adobe Creative Cl…

2026/7/25 1:12:02 阅读更多 →
5分钟快速上手:使用Firefox脚本轻松下载Sketchfab 3D模型完整指南

5分钟快速上手:使用Firefox脚本轻松下载Sketchfab 3D模型完整指南

5分钟快速上手:使用Firefox脚本轻松下载Sketchfab 3D模型完整指南 【免费下载链接】sketchfab sketchfab download userscipt for Tampermonkey by firefox only 项目地址: https://gitcode.com/gh_mirrors/sk/sketchfab 你是否曾经在Sketchfab上发现了一个惊…

2026/7/25 1:12:01 阅读更多 →
终极指南:如何3分钟完成BetterNCM插件自动化部署

终极指南:如何3分钟完成BetterNCM插件自动化部署

终极指南:如何3分钟完成BetterNCM插件自动化部署 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer BetterNCM安装器是一款专为Windows平台设计的网易云音乐插件管理工具&…

2026/7/25 1:11:01 阅读更多 →
鸿蒙三方库 | harmony-utils之ClickUtil节流防抖详解

鸿蒙三方库 | harmony-utils之ClickUtil节流防抖详解

前言 节流和防抖是前端开发中常用的性能优化手段,防止用户快速重复点击导致多次触发。pura/harmony-utils 的 ClickUtil 封装了节流防抖方法,保护应用免受重复点击影响。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解&#xff0…

2026/7/25 1:11:01 阅读更多 →

日新闻

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:00:35 阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:00:35 阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:00:35 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻