文档目录

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

测试目的

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

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

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

测试环境 (AWS EC2)

硬件配置

服务类型EC2 类型实例数
PDm5.xlarge3
TiDBc5.4xlarge2
TiKV & TiFlashi3.4xlarge3
TPC-Hm5.xlarge1

软件版本

服务类型软件版本
PD3.0、4.0
TiDB3.0、4.0
TiKV3.0、4.0
TiFlash4.0
tiup-bench0.2

配置参数

v3.0

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

变量配置
set global tidb_distsql_scan_concurrency = 30;
set global tidb_projection_concurrency = 16;
set global tidb_hashagg_partial_concurrency = 16;
set global tidb_hashagg_final_concurrency = 16;
set global tidb_hash_join_concurrency = 16;
set global tidb_index_lookup_concurrency = 16;
set global tidb_index_lookup_join_concurrency = 16;

v4.0

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

TiKV 配置
readpool.storage.use-unified-pool: false
readpool.coprocessor.use-unified-pool: true
PD 配置
replication.enable-placement-rules: true
TiFlash 配置
logger.level: "info"
learner_config.log-level: "info"
变量配置

注意:

部分参数为 SESSION 变量。建议所有查询都在当前 SESSION 中执行。

set global tidb_allow_batch_cop = 1;
set session tidb_opt_distinct_agg_push_down = 1;
set global tidb_distsql_scan_concurrency = 30;
set global tidb_projection_concurrency = 16;
set global tidb_hashagg_partial_concurrency = 16;
set global tidb_hashagg_final_concurrency = 16;
set global tidb_hash_join_concurrency = 16;
set global tidb_index_lookup_concurrency = 16;
set global tidb_index_lookup_join_concurrency = 16;

测试方案

硬件准备

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

测试过程

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

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

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

      tiup bench tpch prepare \
      --host ${tidb_v3_host} --port ${tidb_v3_port} --db tpch_10 \
      --sf 10 \
      --analyze --tidb_build_stats_concurrency 8 --tidb_distsql_scan_concurrency 30
    • 执行以下命令将数据导入 v4.0:

      tiup bench tpch prepare \
        --host ${tidb_v4_host} --port ${tidb_v4_port} --db tpch_10 --password ${password} \
        --sf 10 \
        --tiflash \
        --analyze --tidb_build_stats_concurrency 8 --tidb_distsql_scan_concurrency 30
  3. 运行 TPC-H 的查询。

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

      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 混合读取数据的查询耗时。
  4. 提取整理耗时数据。

测试结果

Query IDv3.0v4.0 TiKV Onlyv4.0 TiKV / TiFlash Automatically
17.78s7.45s2.09s
23.15s1.71s1.71s
36.61s4.10s4.05s
42.98s2.56s1.87s
520.35s5.71s8.53s
64.75s2.44s0.39s
77.97s3.72s3.59s
85.89s3.22s8.59s
934.08s11.87s15.41s
104.83s2.75s3.35s
113.98s1.60s1.59s
125.63s3.40s1.03s
135.41s4.56s4.02s
145.19s3.10s0.78s
1510.25s1.82s1.26s
162.46s1.51s1.58s
1723.76s12.38s8.52s
1817.14s16.38s16.06s
195.70s4.59s3.20s
204.98s1.89s1.29s
2111.12s6.23s6.26s
224.49s3.05s2.31s

TPC-H

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

  • v4.0(仅从 TiKV 读取数据),即 TiDB 仅会从 TiKV 中读取数据。将该结果与 v3.0 的结果对比可得知,TiDB、TiKV 升级至 4.0 版本后,TPC-H 性能得到的提升幅度。
  • v4.0(从 TiKV、TiFlash 智能选取),即 TiDB 优化器会自动根据代价估算选择是否使用 TiFlash 副本。将该结果与 v3.0 的结果对比可得知,在 v4.0 完整的 HTAP 形态下,TPC-H 性能得到的提升幅度。