オンライン ワークロードとADD INDEX操作の対話テスト

テストの目的

このドキュメントでは、OLTP シナリオにおけるオンライン ワークロードとADD INDEX操作の間の相互作用の影響をテストします。

テストバージョン、時間、場所

TiDB バージョン: v3.0.1

時期:2019年7月

場所:北京

テスト環境

このテストは、3 つの TiDB インスタンス、3 つの TiKV インスタンス、および 3 つの PD インスタンスでデプロイされた Kubernetes クラスターで実行されます。

バージョン情報

成分GitHash
TiDB9e4e8da3c58c65123db5f26409759fe1847529f8
TiKV4151dc8878985df191b47851d67ca21365396133
PD811ce0b9a1335d1b2a049fd97ef9e186f1c9efc1

システムベンチのバージョン: 1.0.17

TiDBパラメータの設定

TiDB、TiKV、PD はすべてデフォルトのTiDB Operator構成を使用します。

クラスタトポロジ

マシンIPデプロイメントインスタンス
172.31.8.8システムベンチ
172.31.7.69、172.31.5.152、172.31.11.133PD
172.31.4.172、172.31.1.155、172.31.9.210TiKV
172.31.7.80、172.31.5.163、172.31.11.123TiDB

Sysbench を使用したオンライン ワークロード シミュレーション

Sysbench を使用して、 2,000,000 行のデータを含むテーブルをKubernetes クラスターにインポートします。

次のコマンドを実行してデータをインポートします。

sysbench oltp_common \ --threads=16 \ --rand-type=uniform \ --db-driver=mysql \ --mysql-db=sbtest \ --mysql-host=$tidb_host \ --mysql-port=$tidb_port \ --mysql-user=root \ prepare --tables=1 --table-size=2000000

次のコマンドを実行してテストを実行します。

sysbench $testname \ --threads=$threads \ --time=300000 \ --report-interval=15 \ --rand-type=uniform \ --rand-seed=$RANDOM \ --db-driver=mysql \ --mysql-db=sbtest \ --mysql-host=$tidb_host \ --mysql-port=$tidb_port \ --mysql-user=root \ run --tables=1 --table-size=2000000

テスト計画 1: ADD INDEXステートメントのターゲット列への書き込み操作を頻繁に実行する

  1. oltp_read_writeテストを開始します。
  2. ステップ 1 と同時に実行しますalter table sbtest1 add index c_idx(c)を使用してインデックスを追加します。
  3. ステップ 2 の最後に実行します。インデックスが正常に追加されたら、テストoltp_read_writeを停止します。
  4. alter table ... add indexの期間と、この期間における Sysbench の平均 TPS および QPS を取得します。
  5. 2 つのパラメーターtidb_ddl_reorg_worker_cntおよびtidb_ddl_reorg_batch_sizeの値を徐々に増やしてから、ステップ 1 ~ 4 を繰り返します。

試験結果

ADD INDEX操作を行わないoltp_read_writeのテスト結果

システムベンチ TPSシステムベンチ QPS
350.316806

tidb_ddl_reorg_batch_size = 32

tidb_ddl_reorg_worker_cntadd_index_durations(s)システムベンチ TPSシステムベンチ QPS
1402338.46776
2266330.36001
4174288.55769
8129280.65612
1690263.55273
3254229.24583
4857230.14601

add-index-load-1-b32

tidb_ddl_reorg_batch_size = 64

tidb_ddl_reorg_worker_cntadd_index_durations(s)システムベンチ TPSシステムベンチ QPS
1264269.45388
2163266.25324
4105272.55430
878262.55228
1657215.54308
3242185.23715
4845189.23794

add-index-load-1-b64

tidb_ddl_reorg_batch_size = 128

tidb_ddl_reorg_worker_cntadd_index_durations(s)システムベンチ TPSシステムベンチ QPS
1171289.15779
2110274.25485
479250.65011
851246.14922
1639171.13431
3235130.82629
4835120.52425

add-index-load-1-b128

tidb_ddl_reorg_batch_size = 256

tidb_ddl_reorg_worker_cntadd_index_durations(s)システムベンチ TPSシステムベンチ QPS
1145283.05659
296282.25593
456236.54735
845194.23882
1639149.32893
3236113.52268
483386.21715年

add-index-load-1-b256

tidb_ddl_reorg_batch_size = 512

tidb_ddl_reorg_worker_cntadd_index_durations(s)システムベンチ TPSシステムベンチ QPS
1135257.85147
278252.85053
449222.74478
836145.42904
16331092190
323372.51503
483354.21318

add-index-load-1-b512

tidb_ddl_reorg_batch_size = 1024

tidb_ddl_reorg_worker_cntadd_index_durations(s)システムベンチ TPSシステムベンチ QPS
1111244.34885
278228.44573
454168.83320
839123.82475
163659.61213
324293.21835年
4851115.72261

add-index-load-1-b1024

tidb_ddl_reorg_batch_size = 2048

tidb_ddl_reorg_worker_cntadd_index_durations(s)システムベンチ TPSシステムベンチ QPS
1918243.34855
21160209.94194
4342185.43707
81316151.03027
1679530.5679
32113026.69547
4889327.5552

add-index-load-1-b2048

tidb_ddl_reorg_batch_size = 4096

tidb_ddl_reorg_worker_cntadd_index_durations(s)システムベンチ TPSシステムベンチ QPS
13042200.04001
23022203.84076
4858195.53971
83015177.13522
16837143.82875
329421142267
4818754.21416

add-index-load-1-b4096

テストの結論

ADD INDEXステートメントのターゲット列に対して書き込み操作 (このテストにはUPDATEINSERT 、およびDELETE操作が含まれます) を頻繁に実行する場合、デフォルトのADD INDEX構成はシステムのオンライン ワークロードに大きな影響を与えます。これは主に、同時ADD INDEX操作と列更新によって引き起こされる書き込み競合が原因です。システムのパフォーマンスは次のとおりです。

  • tidb_ddl_reorg_worker_cntおよびtidb_ddl_reorg_batch_sizeパラメータの値が増加すると、 TiKV_prewrite_latch_wait_durationの値が大幅に増加し、書き込み速度が遅くなります。
  • tidb_ddl_reorg_worker_cnttidb_ddl_reorg_batch_sizeの値が非常に大きい場合、 admin show ddlコマンドを実行すると、DDL ジョブの複数の再試行 ( Write conflict, txnStartTS 410327455965380624 is stale [try again later], ErrCount:38, SnapshotVersion: 410327228136030220など) を確認できます。この状況では、 ADD INDEX操作が完了するまでに非常に長い時間がかかります。

テスト計画 2: ADD INDEXステートメントのターゲット列への書き込み操作を実行しない (クエリのみ)

  1. oltp_read_onlyテストを開始します。
  2. ステップ 1 と同時に実行しますalter table sbtest1 add index c_idx(c)を使用してインデックスを追加します。
  3. ステップ 2 の最後に実行します。インデックスが正常に追加されたら、テストoltp_read_onlyを停止します。
  4. alter table ... add indexの期間と、この期間における Sysbench の平均 TPS と QPS を取得します。
  5. 2 つのパラメーターtidb_ddl_reorg_worker_cnttidb_ddl_reorg_batch_sizeの値を徐々に増やして、ステップ 1 ~ 4 を繰り返します。

試験結果

ADD INDEX操作を行わないoltp_read_onlyのテスト結果

システムベンチ TPSシステムベンチ QPS
550.98812.8

tidb_ddl_reorg_batch_size = 32

tidb_ddl_reorg_worker_cntadd_index_durations(s)システムベンチ TPSシステムベンチ QPS
1376548.98780
2212541.58523
4135538.68549
8114536.78393
1677533.98292
3246533.48103
4846532.28074

add-index-load-2-b32

tidb_ddl_reorg_batch_size = 1024

tidb_ddl_reorg_worker_cntadd_index_durations(s)システムベンチ TPSシステムベンチ QPS
191536.88316
252533.98165
440522.47947
8365107860
1633485.57704
3231467.57516
4830562.17442

add-index-load-2-b1024

tidb_ddl_reorg_batch_size = 4096

tidb_ddl_reorg_worker_cntadd_index_durations(s)システムベンチ TPSシステムベンチ QPS
1103502.27823
263486.57672
452467.47516
839452.57302
1635447.27206
3230441.97057
4830440.17004

add-index-load-2-b4096

テストの結論

ADD INDEXのステートメントのターゲット列に対してクエリ操作のみを実行する場合、オンライン ワークロードに対するADD INDEX操作の影響は明らかではありません。

テスト計画 3: ADD INDEXステートメントのターゲット列はオンライン ワークロードとは無関係です

  1. oltp_read_writeテストを開始します。
  2. ステップ 1 と同時に実行しますalter table test add index pad_idx(pad)を使用してインデックスを追加します。
  3. ステップ 2 の最後に実行します。インデックスが正常に追加されたら、テストoltp_read_onlyを停止します。
  4. alter table ... add indexの期間と、この期間における Sysbench の平均 TPS と QPS を取得します。
  5. 2 つのパラメーターtidb_ddl_reorg_worker_cntおよびtidb_ddl_reorg_batch_sizeの値を徐々に増やしてから、ステップ 1 ~ 4 を繰り返します。

試験結果

ADD INDEX操作を行わないoltp_read_writeのテスト結果

システムベンチ TPSシステムベンチ QPS
350.316806

tidb_ddl_reorg_batch_size = 32

tidb_ddl_reorg_worker_cntadd_index_durations(s)システムベンチ TPSシステムベンチ QPS
1372350.46892
2207344.26700
4140343.16672
8121339.16579
16763406607
3242343.16695
4842333.46454

add-index-load-3-b32

tidb_ddl_reorg_batch_size = 1024

tidb_ddl_reorg_worker_cntadd_index_durations(s)システムベンチ TPSシステムベンチ QPS
194352.46794
2503326493
4453306456
836325.56324
1632312.56294
3232300.66017
4831279.55612

add-index-load-3-b1024

tidb_ddl_reorg_batch_size = 4096

tidb_ddl_reorg_worker_cntadd_index_durations(s)システムベンチ TPSシステムベンチ QPS
1116325.56324
265312.56290
450300.66017
837279.55612
1634250.45365
3232220.24924
4833214.84544

add-index-load-3-b4096

テストの結論

ADD INDEXステートメントのターゲット列がオンライン ワークロードに無関係な場合、ワークロードに対するADD INDEX操作の影響は明らかではありません。

まとめ

  • ADD INDEXステートメントのターゲット列に対して頻繁に書き込み操作 ( INSERT DELETEおよびUPDATE操作を含む) を実行すると、デフォルトのADD INDEX構成では比較的頻繁に書き込み競合が発生し、オンラインのワークロードに大きな影響を与えます。同時に、再試行が継続的に試行されるため、 ADD INDEX操作が完了するまでに時間がかかります。このテストでは、 tidb_ddl_reorg_worker_cnttidb_ddl_reorg_batch_sizeの積をデフォルト値の 1/32 に変更できます。たとえば、パフォーマンスを向上させるために、 tidb_ddl_reorg_worker_cnt4に、 tidb_ddl_reorg_batch_size256に設定できます。
  • ADD INDEXステートメントのターゲット列に対してクエリ操作のみを実行する場合、またはターゲット列がオンライン ワークロードに直接関連していない場合は、デフォルトのADD INDEX構成を使用できます。

このページは役に立ちましたか?

Playground
新規
登録なしで TiDB の機能をワンストップでインタラクティブに体験できます。
製品
TiDB Cloud
TiDB
価格
PoC お問い合わせ
エコシステム
TiKV
TiFlash
OSS Insight
© 2024 PingCAP. All Rights Reserved.
Privacy Policy.