TiDB TPC-H 性能对比测试报告 - v4.0 对比 v3.0

    对比 TiDB v4.0 和 v3.0 OLAP 场景下的性能。

    因为 TiDB v4.0 中新引入了 组件增强 TiDB HTAP 形态,本文的测试对象如下:

    • v3.0 仅从 TiKV 读取数据。
    • v4.0 仅从 TiKV 读取数据。
    • v4.0 通过智能选择混合读取 TiKV、TiFlash 的数据。

    测试环境 (AWS EC2)

    v3.0

    v3.0 的 TiDB 和 TiKV 均为默认参数配置。

    变量配置

    v4.0

    v4.0 的 TiDB 为默认参数配置。

    TiKV 配置
    1. readpool.coprocessor.use-unified-pool: true
    PD 配置
    TiFlash 配置
    1. logger.level: "info"
    2. learner_config.log-level: "info"
    变量配置

    硬件准备

    为了避免 TiKV 和 TiFlash 争抢磁盘和 I/O 资源,把 EC2 配置的两个 NVMe SSD 盘分别挂载为 /data1 及 ,把 TiKV 的部署至 /data1,TiFlash 部署至 /data2

    测试过程

    1. 通过 TiUP 部署 TiDB v4.0 和 v3.0。

    2. 通过 TiUP 的 bench 工具导入 TPC-H 10G 数据。

      • 执行以下命令将数据导入 v3.0:

        1. tiup bench tpch prepare \
        2. --analyze --tidb_build_stats_concurrency 8 --tidb_distsql_scan_concurrency 30
      • 执行以下命令将数据导入 v4.0:

      1. 下载 TPC-H 的 SQL 查询文件:

        1. git clone https://github.com/pingcap/tidb-bench.git && cd tpch/queries
      2. 查询并记录耗时。

        • 对于 TiDB v3.0,使用 MySQL 客户端连接到 TiDB,然后执行查询,记录 v3.0 查询耗时。
        • 对于 TiDB v4.0,使用 MySQL 客户端连接到 TiDB,再根据测试的形态,选择其中一种操作:
          • 设置 set @@session.tidb_isolation_read_engines = 'tikv,tidb'; 后,再执行查询,记录 v4.0 仅从 TiKV 读取数据的查询耗时。
          • 设置 set @@session.tidb_isolation_read_engines = 'tikv,tiflash,tidb'; 后,再执行查询,记录 v4.0 通过智能选择从 TiKV 和 TiFlash 混合读取数据的查询耗时。
    3. 提取整理耗时数据。

    注意:

    本测试所执行 SQL 语句对应的表只有主键,没有建立二级索引。因此以下测试结果为无索引结果。

    以上性能图中蓝色为 v3.0,红色为 v4.0(仅从 TiKV 读),黄色为 v4.0(从 TiKV、TiFlash 智能选取),纵坐标是查询的处理时间。纵坐标越低,表示性能越好。

    • v4.0(仅从 TiKV 读取数据),即 TiDB 仅会从 TiKV 中读取数据。将该结果与 v3.0 的结果对比可得知,TiDB、TiKV 升级至 4.0 版本后,TPC-H 性能得到的提升幅度。