如何对 TiDB 进行 TPC-C 测试

    本文介绍如何对 TiDB 进行 测试。

    TPC-C 是一个对 OLTP(联机交易处理)系统进行测试的规范,使用一个商品销售模型对 OLTP 系统进行测试,其中包含五类事务:

    • NewOrder – 新订单的生成
    • Payment – 订单付款
    • OrderStatus – 最近订单查询
    • StockLevel – 库存缺货状态分析

    在测试开始前,TPC-C Benchmark 规定了数据库的初始状态,也就是数据库中数据生成的规则,其中 ITEM 表中固定包含 10 万种商品,仓库的数量可进行调整,假设 WAREHOUSE 表中有 W 条记录,那么:

    • STOCK 表中应有 W * 10 万条记录(每个仓库对应 10 万种商品的库存数据)
    • DISTRICT 表中应有 W * 10 条记录(每个仓库为 10 个地区提供服务)
    • CUSTOMER 表中应有 W * 10 * 3000 条记录(每个地区有 3000 个客户)
    • HISTORY 表中应有 W * 10 * 3000 条记录(每个客户一条交易历史)
    • ORDER 表中应有 W * 10 * 3000 条记录(每个地区 3000 个订单),并且最后生成的 900 个订单被添加到 NEW-ORDER 表中,每个订单随机生成 5 ~ 15 条 ORDER-LINE 记录。

    我们将以 1000 WAREHOUSE 为例进行测试。

    本文使用 go-tpc 作为 TPC-C 测试实现,可以通过 命令下载测试程序:

    关于 TiUP Bench 组件的详细用法可参考 TiUP Bench

    导入数据通常是整个 TPC-C 测试中最耗时,也是最容易出问题的阶段。

    在 shell 中运行 TiUP 命令:

      数据导入完成后,可以通过命令 tiup bench tpcc -H 172.16.5.140 -P 4000 -D tpcc --warehouses 4 check 验证数据正确性。

      运行测试的命令是:

      运行过程中控制台上会持续打印测试结果:

      1. [Current] NEW_ORDER - Takes(s): 4.6, Count: 5, TPM: 65.5, Sum(ms): 4604, Avg(ms): 920, 90th(ms): 1500, 99th(ms): 1500, 99.9th(ms): 1500
      2. [Current] PAYMENT - Takes(s): 6.9, Count: 5, TPM: 43.7, Sum(ms): 2208, Avg(ms): 441, 90th(ms): 512, 99th(ms): 512, 99.9th(ms): 512
      3. [Current] STOCK_LEVEL - Takes(s): 4.4, Count: 1, TPM: 13.8, Sum(ms): 224, Avg(ms): 224, 90th(ms): 256, 99th(ms): 256, 99.9th(ms): 256

      运行结束后,会打印测试统计结果:

      1. tiup bench tpcc -H 172.16.5.140 -P 4000 -D tpcc --warehouses 4 cleanup