物理インポートモード
物理インポート モードは、SQL インターフェイスを経由せずに、キーと値のペアとしてデータを直接 TiKV ノードに挿入する、効率的で高速なインポート モードです。物理インポート モードを使用する場合、Lightning の 1 つのインスタンスで最大 10 TiB のデータをインポートできます。理論上、サポートされるインポート データ量は Lightning インスタンスの数が増えるにつれて増加します。ユーザーによって、Lightning ベースの並行輸入で最大 50 TiB のデータを効果的に処理できることが検証されています。
物理インポートモードを使用する前に、必ず要件と制限お読みください。
物理インポートモードのバックエンドはlocal
です。 tidb-lightning.toml
で変更できます。
[tikv-importer]
# Set the import mode to "local" to use the physical import mode.
backend = "local"
実装
データをインポートする前に、 TiDB Lightning はTiKV ノードを「インポート モード」に自動的に切り替えます。これにより、書き込みパフォーマンスが向上し、自動圧縮が停止します。TiDB TiDB Lightning は、 TiDB Lightning のバージョンに応じて、グローバル スケジューリングを一時停止するかどうかを決定します。
- v7.1.0 以降では、 TiDB Lightningパラメータ
pause-pd-scheduler-scope
を使用して、一時停止スケジュールの範囲を制御できます。 - TiDB Lightningバージョンが v6.2.0 から v7.0.0 の場合、グローバル スケジューリングを一時停止する動作は TiDB クラスターのバージョンによって異なります。TiDB クラスターが >= v6.1.0 の場合、 TiDB Lightning はターゲット テーブル データを格納するリージョンのスケジューリングを一時停止します。インポートが完了すると、 TiDB Lightning はスケジューリングを回復します。その他のバージョンの場合、 TiDB Lightning はグローバル スケジューリングを一時停止します。
- TiDB Lightning < v6.2.0 の場合、 TiDB Lightning はグローバル スケジューリングを一時停止します。
- v7.1.0 以降では、 TiDB Lightningパラメータ
TiDB Lightning は、ターゲット データベースにテーブル スキーマを作成し、メタデータを取得します。
add-index-by-sql
をtrue
に設定すると、tidb-lightning
SQL インターフェイス経由でインデックスを追加し、データをインポートする前にターゲット テーブルからすべてのセカンダリ インデックスを削除します。デフォルト値はfalse
で、以前のバージョンと一致しています。各テーブルは複数の連続したブロックに分割されるため、 TiDB Lightning は大規模なテーブル (200 GB 以上) からデータを並行してインポートできます。
TiDB Lightning は、TiDB Lightning は、SQL ダンプを並列で読み取り、データ ソースを TiDB と同じエンコーディングでキーと値のペアに変換し、キーと値のペアを並べ替えて、ローカルの一時storageファイルに書き込みます。
エンジン ファイルが書き込まれると、 TiDB Lightning はターゲット TiKV クラスター上のデータの分割とスケジュールを開始し、その後データを TiKV クラスターにインポートします。
エンジン ファイルには、データ エンジンとインデックス エンジンの 2 種類のエンジンが含まれています。各エンジンは、行データとセカンダリ インデックスというキーと値のペアのタイプに対応しています。通常、行データはデータ ソース内で完全に順序付けられており、セカンダリ インデックスは順序付けられていません。そのため、データ エンジン ファイルは対応するブロックが書き込まれた直後にインポートされ、すべてのインデックス エンジン ファイルはテーブル全体がエンコードされた後にのみインポートされます。
tidb-lightning
SQL インターフェイス経由でインデックスを追加する場合 (つまり、add-index-by-sql
をtrue
に設定する場合)、ターゲット テーブルのセカンダリ インデックスは手順 2 ですでに削除されているため、インデックス エンジンはデータを書き込まないことに注意してください。すべてのエンジン ファイルがインポートされた後、 TiDB Lightning はローカル データ ソースとダウンストリーム クラスター間のチェックサムを比較し、インポートされたデータが破損していないことを確認します。次に、 TiDB Lightningは、ステップ 2 で以前に削除されたセカンダリ インデックスを追加するか、TiDB に新しいデータを分析させて (
ANALYZE
)、将来の操作を最適化します。一方、tidb-lightning
、将来の競合を防ぐためにAUTO_INCREMENT
値を調整します。自動インクリメント ID は行数の上限によって推定され、テーブル データ ファイルの合計サイズに比例します。したがって、自動インクリメント ID は通常、実際の行数よりも大きくなります。自動インクリメント ID が必ずしも連続しているわけではないあるため、これは正常です。
すべての手順が完了すると、 TiDB Lightning はTiKV ノードを「通常モード」に自動的に切り替えます。グローバル スケジューリングが一時停止されている場合、 TiDB Lightning はグローバル スケジューリングも回復します。その後、TiDB クラスターは正常にサービスを提供できるようになります。
要件と制限
環境要件
オペレーティング·システム:
新しい CentOS 7 インスタンスを使用することをお勧めします。仮想マシンは、ローカル ホストまたはクラウドにデプロイできます。TiDB TiDB Lightning は、デフォルトで必要なだけの CPU リソースを消費するため、専用サーバーにデプロイすることをお勧めします。これが不可能な場合は、他の TiDB コンポーネント (tikv-server など) と一緒に単一のサーバーにデプロイし、 region-concurrency
設定してTiDB Lightningからの CPU 使用量を制限できます。通常、サイズは論理 CPU の 75% に設定できます。
メモリとCPU :
より良いパフォーマンスを得るには、32 コア以上の CPU と 64 GiB 以上のメモリを割り当てることをお勧めします。
注記:
大量のデータをインポートする場合、1 回の同時インポートで約 2 GiB のメモリが消費されることがあります。メモリ使用量の合計は
region-concurrency * 2 GiB
なります。デフォルトではregion-concurrency
論理 CPU の数と同じです。メモリサイズ (GiB) が CPU の 2 倍未満の場合、またはインポート中に OOM が発生する場合は、region-concurrency
を減らすことで OOM を回避できます。
ストレージ: sorted-kv-dir
構成項目は、ソートされたキー値ファイルの一時storageディレクトリを指定します。ディレクトリは空である必要があり、storageスペースはインポートするデータセットのサイズよりも大きくする必要があります。インポートのパフォーマンスを向上させるには、 data-source-dir
とは異なるディレクトリを使用し、ディレクトリにフラッシュstorageと排他的 I/O を使用することをお勧めします。
ネットワーク: 10Gbps イーサネット カードが推奨されます。
バージョン要件
- TiDB Lightning >= v4.0.3。
- TiDB >= v4.0.0。
制限事項
- 本番で TiDB クラスターにデータを直接インポートする場合、物理インポート モードを使用しないでください。パフォーマンスに重大な影響を及ぼします。必要な場合は、 テーブルレベルでスケジュールを一時停止するを参照してください。
- TiDB クラスターにレイテンシの影響を受けやすいアプリケーションがあり、同時実行性が低い場合は、物理インポート モードを使用してクラスターにデータをインポートしないことを強くお勧めします。このモードは、オンライン アプリケーションに大きな影響を与える可能性があります。
- デフォルトでは、同じ TiDB クラスターにデータをインポートするために複数のTiDB Lightningインスタンスを使用しないでください。代わりに並行輸入を使用してください。
- 複数のTiDB Lightningを使用して同じターゲット クラスターにデータをインポートする場合は、インポート モードを混在させないでください。つまり、物理インポート モードと論理インポート モードを同時に使用しないでください。
- データのインポート処理中は、ターゲット テーブルで DDL および DML 操作を実行しないでください。そうしないと、インポートが失敗するか、データの不整合が発生します。同時に、読み取ったデータに不整合がある可能性があるため、読み取り操作を実行することはお勧めしません。インポート操作が完了したら、読み取り操作と書き込み操作を実行できます。
- 1 つの Lightning プロセスでは、最大 10 TiB の 1 つのテーブルをインポートできます。並列インポートでは、最大 10 個の Lightning インスタンスを使用できます。
他のコンポーネントと併用する場合のヒント
TiDB Lightning をTiFlashと併用する場合は、次の点に注意してください。
- テーブルのTiFlashレプリカを作成したかどうかに関係なく、 TiDB Lightningを使用してテーブルにデータをインポートできます。ただし、インポートは通常のインポートよりも時間がかかる場合があります。インポート時間は、TiDB Lightning がデプロイされているサーバーのネットワーク帯域幅、 TiFlashノードの CPU とディスクの負荷、およびTiFlashレプリカの数によって左右されます。
TiDB Lightning文字セット:
- v5.4.0 より前のTiDB Lightning、
charset=GBK
のテーブルをインポートできません。
- v5.4.0 より前のTiDB Lightning、
TiCDC でTiDB Lightning を使用する場合は、次の点に注意してください。
- TiCDC は物理インポート モードで挿入されたデータをキャプチャできません。
BRでTiDB Lightning を使用する場合は、次の点に注意してください。
- BR がTiDB Lightningによってインポートされているテーブルのスナップショットをバックアップすると、それらのテーブルのバックアップ データが不整合になる可能性があります。
- BR がAWS EBS ボリューム スナップショットを使用してデータをバックアップすると、 TiDB Lightning はデータのインポートに失敗する可能性があります。
- ポイントインタイムリカバリ (PITR) では、 TiDB Lightningによってインポートされたデータをバックアップできません。