物理インポートモード

物理インポート モードは、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"

実装

  1. データをインポートする前に、 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 はグローバル スケジューリングを一時停止します。
  2. TiDB Lightning は、ターゲット データベースにテーブル スキーマを作成し、メタデータを取得します。

    add-index-by-sql trueに設定すると、 tidb-lightning SQL インターフェイス経由でインデックスを追加し、データをインポートする前にターゲット テーブルからすべてのセカンダリ インデックスを削除します。デフォルト値はfalseで、以前のバージョンと一致しています。

  3. 各テーブルは複数の連続したブロックに分割されるため、 TiDB Lightning は大規模なテーブル (200 GB 以上) からデータを並行してインポートできます。

  4. TiDB Lightning は、キーと値のペアを処理するために、各ブロックに「エンジン ファイル」を準備します。TiDB TiDB Lightning は、SQL ダンプを並列で読み取り、データ ソースを TiDB と同じエンコーディングでキーと値のペアに変換し、キーと値のペアを並べ替えて、ローカルの一時storageファイルに書き込みます。

  5. エンジン ファイルが書き込まれると、 TiDB Lightning はターゲット TiKV クラスター上のデータの分割とスケジュールを開始し、その後データを TiKV クラスターにインポートします。

    エンジン ファイルには、データ エンジンインデックス エンジンの 2 種類のエンジンが含まれています。各エンジンは、行データとセカンダリ インデックスというキーと値のペアのタイプに対応しています。通常、行データはデータ ソース内で完全に順序付けられており、セカンダリ インデックスは順序付けられていません。そのため、データ エンジン ファイルは対応するブロックが書き込まれた直後にインポートされ、すべてのインデックス エンジン ファイルはテーブル全体がエンコードされた後にのみインポートされます。

    tidb-lightning SQL インターフェイス経由でインデックスを追加する場合 (つまり、 add-index-by-sql trueに設定する場合)、ターゲット テーブルのセカンダリ インデックスは手順 2 ですでに削除されているため、インデックス エンジンはデータを書き込まないことに注意してください。

  6. すべてのエンジン ファイルがインポートされた後、 TiDB Lightning はローカル データ ソースとダウンストリーム クラスター間のチェックサムを比較し、インポートされたデータが破損していないことを確認します。次に、 TiDB Lightningは、ステップ 2 で以前に削除されたセカンダリ インデックスを追加するか、TiDB に新しいデータを分析させて ( ANALYZE )、将来の操作を最適化します。一方、 tidb-lightning 、将来の競合を防ぐためにAUTO_INCREMENT値を調整します。

    自動インクリメント ID は行数の上限によって推定され、テーブル データ ファイルの合計サイズに比例します。したがって、自動インクリメント ID は通常、実際の行数よりも大きくなります。自動インクリメント ID が必ずしも連続しているわけではないあるため、これは正常です。

  7. すべての手順が完了すると、 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のテーブルをインポートできません。
  • TiCDC でTiDB Lightning を使用する場合は、次の点に注意してください。

    • TiCDC は物理インポート モードで挿入されたデータをキャプチャできません。
  • BRでTiDB Lightning を使用する場合は、次の点に注意してください。

    • BR がTiDB Lightningによってインポートされているテーブルのスナップショットをバックアップすると、それらのテーブルのバックアップ データが不整合になる可能性があります。
    • BR がAWS EBS ボリューム スナップショットを使用してデータをバックアップすると、 TiDB Lightning はデータのインポートに失敗する可能性があります。
    • TiDB Lightning物理インポート モードでインポートされたデータはログバックアップサポートしていないため、ポイントインタイム リカバリ (PITR) によって復元することはできません。

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