BenchmarkSQL 开启每秒实时性能日志(实时TPS/TPM监控,解决压测日志卡顿不刷新)

BenchmarkSQL 开启每秒实时性能日志(实时TPS/TPM监控,解决压测日志卡顿不刷新)

wdhlzy
2026-07-11 / 0 评论 / 1 阅读 / 正在检测是否收录...

一、问题背景
默认的 BenchmarkSQL 压测输出有一个很大的短板:控制台不会实时刷新性能数据。
原生版本只会间隔很久打印一次汇总数据,无法看到每秒瞬时吞吐量、性能波动、抖动、锁超时阶段性能下跌。
在 TPCC 压测、并发调优、锁冲突排查、参数调优场景中非常鸡肋:

  • 看不到实时 TPM/TPS 变化
  • 压测卡住、锁等待、事务阻塞时无法定位问题阶段
  • 只能等测试结束才能看结果,调测效率极低
    二、优化效果
    修改源码重新编译后,可实现:
  • 每秒自动打印一次压测性能数据
  • 输出:当前时间、平均 TPM、瞬时 TPM、JVM 内存占用
  • 全程可视化观察性能波动、抖动、阻塞、锁超时下跌
  • 无需等待压测结束,实时判断压测稳定性

三、修改原理
原生 updateStatusLine 为低频刷新,本次修改强制 1000ms 秒级刷新,同时手动计算瞬时吞吐量、平均吞吐量、内存使用率,替换原生覆盖式输出为换行日志,全程保留压测记录。

四、完整修改步骤

  1. 进入源码目录
    解压 BenchmarkSQL 安装包,进入核心客户端源码路径:
    cd benchmarksql-5.0/src/client
  2. 编辑 jTPCC.java 核心文件

    synchronized private void updateStatusLine()
    {
    long currTimeMillis = System.currentTimeMillis();
    if(currTimeMillis > sessionNextTimestamp)
    {
    StringBuilder informativeText = new StringBuilder("");
    Formatter fmt = new Formatter(informativeText);
    double tpmC = (6000000*fastNewOrderCounter/(currTimeMillis - sessionStartTimestamp))/100.0;
    double tpmTotal = (6000000*transactionCount/(currTimeMillis - sessionStartTimestamp))/100.0;
    sessionNextTimestamp += 1000; /* update this every seconds */
    fmt.format("%s: Term-00, Running Average tpmTOTAL: %.2f", getCurrentTime(), tpmTotal);
    /* XXX What is the meaning of these numbers? */
    recentTpmC = (fastNewOrderCounter - sessionNextKounter) * 12;
    recentTpmTotal= (transactionCount-sessionNextKounter)*12;
    sessionNextKounter = fastNewOrderCounter;
    fmt.format(" Current tpmTOTAL: %d", recentTpmTotal);
    long freeMem = Runtime.getRuntime().freeMemory() / (1024*1024);
    long totalMem = Runtime.getRuntime().totalMemory() / (1024*1024);
    fmt.format(" Memory Usage: %dMB / %dMB ", (totalMem - freeMem), totalMem);
    System.out.print(informativeText);
    System.out.print("\n");
    //for (int count = 0; count < 1+informativeText.length(); count++)
    //System.out.print("\b");
    }
    }
    }
  3. Ant 重新编译项目
    返回 BenchmarkSQL 根目录,执行编译:ant
    编译成功后会自动覆盖 run 目录下的 class 字节码文件,无需手动替换。
  4. 重新运行压测即可生效
    再次执行压测脚本,控制台将每秒刷新一次性能数据。
1

评论

博主关闭了所有页面的评论