バッチ処理
バッチ処理は、実世界のシナリオにおいて一般的かつ不可欠な操作です。データ移行、一括インポート、アーカイブ、大規模な更新といったタスクにおいて、大規模なデータセットを効率的に処理することを可能にします。
バッチ操作のパフォーマンスを最適化するために、TiDB はバージョンの進化とともにさまざまな機能を導入しています。
- データのインポート
IMPORT INTO
ステートメント (TiDB v7.2.0 で導入され、v7.5.0 で GA になりました)
- データの挿入、更新、削除
- パイプライン DML (実験的、TiDB v8.0.0 で導入)
- 非トランザクションDML(TiDB v6.1.0で導入)
- Batch-dml(非推奨)
このドキュメントでは、これらの機能の主な利点、制限事項、使用例について概説し、効率的なバッチ処理に最適なソリューションを選択できるようにします。
データのインポート
IMPORT INTO
ステートメントはデータインポートタスク用に設計されています。これにより、CSV、SQL、PARQUET などの形式のデータを空の TiDB テーブルに迅速にインポートでき、 TiDB Lightning別途デプロイする必要はありません。
主なメリット
- 非常に高速なインポート速度
- TiDB Lightningと比べて使いやすい
制限事項
- ACID保証なし
- さまざまな使用制限の対象となります
ユースケース
- データの移行や復旧などのデータインポートシナリオに適しています。該当する場合は、 TiDB Lightningではなく
IMPORT INTO
使用することをお勧めします。
詳細についてはIMPORT INTO
参照してください。
データの挿入、更新、削除
パイプラインDML
パイプラインDMLは、TiDB v8.0.0で導入された実験的機能です。v8.5.0では、この機能が強化され、パフォーマンスが大幅に向上しました。
主なメリット
- Streams data to the storage layer during transaction execution instead of buffering it entirely in memory, allowing transaction size no longer limited by TiDB memory and supporting ultra-large-scale data processing
- 標準のDMLに比べて優れたパフォーマンスを実現
- SQL を変更せずにシステム変数を通じて有効にすることができます
制限事項
- 自動コミット
INSERT
DELETE
のみUPDATE
サポートしますREPLACE
ユースケース
- 大量のデータの挿入、更新、削除などの一般的なバッチ処理タスクに適しています。
詳細についてはパイプラインDML参照してください。
非トランザクションDMLステートメント
非トランザクションDMLはTiDB v6.1.0で導入されました。当初はDELETE
ステートメントのみがこの機能をサポートしています。v6.5.0以降では、 INSERT
、 REPLACE
、 UPDATE
ステートメントもこの機能をサポートします。
主なメリット
- メモリ制限を回避して、単一の SQL ステートメントを複数の小さなステートメントに分割します。
- 標準の DML よりもわずかに高速、または同等のパフォーマンスを実現します。
制限事項
- 自動コミットステートメントのみをサポートします
- SQL文の変更が必要
- SQL 構文に厳しい要件を課すため、一部のステートメントは書き直しが必要になる場合があります。
- 完全なトランザクションACID保証がないため、障害発生時には文が部分的に実行される可能性がある。
ユースケース
- 大量のデータの挿入、更新、削除を伴うシナリオに適しています。ただし、その制限のため、パイプラインDMLが適用できない場合にのみ、非トランザクションDMLを検討することをお勧めします。
詳細については非トランザクションDML参照してください。
非推奨のbatch-dml機能
TiDB v4.0より前のバージョンで利用可能だったbatch-dml機能は非推奨となり、推奨されなくなりました。この機能は、以下のシステム変数によって制御されます。
tidb_batch_insert
tidb_batch_delete
tidb_batch_commit
tidb_enable_batch_dml
tidb_dml_batch_size
データとインデックスの不一致によってデータが破損または失われるリスクがあるため、これらの変数は非推奨となり、将来のリリースでは削除される予定です。
いかなる状況においても、非推奨のbatch-dml機能の使用は推奨されません。代わりに、このドキュメントで概説されている他の代替機能の使用をご検討ください。