TiDB TPC-H パフォーマンス テスト レポート -- v4.0 対 v3.0
テストの目的
このテストは、オンライン分析処理 (OLAP) シナリオで TiDB 4.0 と TiDB 3.0 の TPC-H パフォーマンスを比較することを目的としています。
TiFlashは TiDB v4.0 で導入され、TiDB の Hybrid Transactional and Analytical Processing (HTAP) 機能が強化されるため、このレポートのテスト オブジェクトは次のとおりです。
- TiKV からのみデータを読み取る TiDB v3.0。
- TiKV からのみデータを読み取る TiDB v4.0。
- インテリジェントな選択に基づいて、TiKV およびTiFlashから自動的にデータを読み取る TiDB v4.0。
テスト環境(AWS EC2)
ハードウェア構成
サービスの種類 | EC2タイプ | インスタンス数 |
---|---|---|
PD | m5.xlarge | 3 |
TiDB | c5.4xlarge | 2 |
TiKV & TiFlash | i3.4xlarge | 3 |
TPC-H | m5.xlarge | 1 |
ソフトウェアバージョン
サービスの種類 | ソフトウェアバージョン |
---|---|
PD | 3.0 と 4.0 |
TiDB | 3.0 と 4.0 |
TiKV | 3.0 と 4.0 |
TiFlash | 4.0 |
tiup-bench | 0.2 |
パラメータ構成
v3.0
v3.0 の場合、TiDB、TiKV、および PD はデフォルトのパラメーター構成を使用します。
可変構成
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"
可変構成
ノート:
セッション変数が存在する可能性があります。すべてのクエリを現在のセッションで実行することをお勧めします。
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;
テスト計画
ハードウェア前提条件
ディスクおよび I/O リソースの TiKV とTiFlash の競合を回避するには、EC2 で構成された 2 つの NVMe SSD ディスクを/data1
と/data2
にマウントします。 /data1
に TiKVをデプロイ、 /data2
にTiFlashを展開します。
試験工程
TiUPを使用して TiDB v4.0 および v3.0をデプロイ。
TiUPのベンチ ツールを使用して、TPC-H データをスケール ファクター 10 でインポートします。
- 次のコマンドを実行して、データを v3.0 にインポートします。
```bash
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 にインポートします。
```bash
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
```
TPC-H クエリを実行します。
- TPC-H SQL クエリ ファイルをダウンロードします。
```bash
git clone https://github.com/pingcap/tidb-bench.git && cd tpch/queries
```
2. TPC-H クエリを実行し、各クエリの実行時間を記録します。
- TiDB v3.0 の場合、MySQL クライアントを使用して TiDB に接続し、クエリを実行して、各クエリの実行時間を記録します。
- TiDB v4.0 の場合、MySQL クライアントを使用して TiDB に接続し、データの読み取り元に基づいて次のいずれかの操作を選択します。
- データが TiKV からのみ読み取られる場合は、 `set @@session.tidb_isolation_read_engines = 'tikv,tidb';`を設定してクエリを実行し、各クエリの実行時間を記録します。
- コストベースのインテリジェントな選択に基づいて TiKV およびTiFlashからデータが自動的に読み取られる場合は、 `set @@session.tidb_isolation_read_engines = 'tikv,tiflash,tidb';`を設定してクエリを実行し、各クエリの実行時間を記録します。
- クエリの実行時間のデータを抽出して整理します。
テスト結果
ノート:
このテストで SQL ステートメントが実行されるテーブルには、主キーのみがあり、副次インデックスはありません。したがって、以下のテスト結果はインデックスの影響を受けません。
クエリ ID | v3.0 | v4.0 TiKV のみ | v4.0 TiKV/ TiFlash自動 |
---|---|---|---|
1 | 7.78秒 | 7.45秒 | 2.09秒 |
2 | 3.15秒 | 1.71秒 | 1.71秒 |
3 | 6.61秒 | 4.10秒 | 4.05秒 |
4 | 2.98秒 | 2.56秒 | 1.87秒 |
5 | 20.35秒 | 5.71秒 | 8.53秒 |
6 | 4.75秒 | 2.44秒 | 0.39秒 |
7 | 7.97秒 | 3.72秒 | 3.59秒 |
8 | 5.89秒 | 3.22秒 | 8.59秒 |
9 | 34.08秒 | 11.87秒 | 15.41秒 |
10 | 4.83秒 | 2.75秒 | 3.35秒 |
11 | 3.98秒 | 1.60秒 | 1.59秒 |
12 | 5.63秒 | 3.40秒 | 1.03秒 |
13 | 5.41秒 | 4.56秒 | 4.02秒 |
14 | 5.19秒 | 3.10秒 | 0.78秒 |
15 | 10.25秒 | 1.82秒 | 1.26秒 |
16 | 2.46秒 | 1.51秒 | 1.58秒 |
17 | 23.76秒 | 12.38秒 | 8.52秒 |
18 | 17.14秒 | 16.38秒 | 16.06秒 |
19 | 5.70秒 | 4.59秒 | 3.20秒 |
20 | 4.98秒 | 1.89秒 | 1.29秒 |
21 | 11.12秒 | 6.23秒 | 6.26秒 |
22 | 4.49秒 | 3.05秒 | 2.31秒 |
上記のパフォーマンス ダイアグラムでは、次のようになります。
- 青い線は v3.0 を表します。
- 赤い線は v4.0 を表します (データは TiKV からのみ読み取られます)。
- 黄色の線は v4.0 を表します (インテリジェントな選択に基づいて、TiKV およびTiFlashから自動的に読み取られたデータ)。
- Y 軸はクエリの実行時間を表します。時間が短いほど、パフォーマンスが向上します。
結果の説明:
- v4.0 TiKV Only は、 TiDB が TiKV からのみデータを読み取ることを意味します。結果は、TiDB と TiKV を v4.0 にアップグレードした後、TPC-H のパフォーマンスが向上したことを示しています。
- v4.0 TiKV/ TiFlash自動的にとは、 TiDB オプティマイザーがコスト見積もりに従ってTiFlashレプリカからデータを読み取るかどうかを自動的に決定することを意味します。結果は、v4.0 の完全な HTAP 形式で TPC-H のパフォーマンスが向上したことを示しています。
上の図から、TPC-H のパフォーマンスが 22 個のクエリのセットで平均して約 100% 向上することがわかります。