このトピックでは、バッチ同期用に構成できるチャネル制御設定について説明します。このトピックで提供される情報は、バッチ同期のチャネル制御パラメーターを理解し、正しく構成するのに役立ち、テクニカルサポートの必要性を軽減します。
チャネル制御設定
並列度
このセクションでは、以下の質問への回答を提供します。
質問 1:データ同期ノードの並列度をどのように構成しますか?
質問 2:データ同期ノードの実行速度が遅いのはなぜですか?この問題は、並列スレッドが不足していることが原因ですか?
質問 3:データ同期ノードに多数の並列スレッドを構成しても、ノードの実行速度が遅いのはなぜですか?データ同期ノードが常に排他リソースグループのリソースを待機しているのはなぜですか?
並列度は、データ同期ノードの実行時に、ソースからのデータの読み取りまたは宛先へのデータの書き込みに使用できる並列スレッドの最大数を指します。データ同期効率を向上させるために、データ同期ノード用に構成された並列度を適切に調整できます。次の図は、コードレス ユーザーインターフェース(UI)でデータ同期ノードの並列度を構成するためのエントリポイントを示しています。
オブジェクトストレージサービス(OSS)、FTP、Hadoop分散ファイルシステム(HDFS)、または AWS S3 データソースに格納されているファイルからデータを同期するためにデータ同期ノードを実行すると、データはファイルの粒度に基づいて読み取られます。デフォルトでは、データを読み取ることができるファイルの数は、データ同期ノードに構成されている並列スレッドの最大数よりも少なくなります。前の図に表示されている「予想される最大同時実行数」パラメーターは、データ同期ノードに構成できる並列スレッドの最大数を指定します。使用する Data Integration のリソースグループのパフォーマンスとデータ同期ノードの特性により、データ同期ノードに対して実行される並列スレッドの実際の数は、データ同期ノードに構成されている並列スレッドの最大数以下になる場合があります。Data Integration(デバッグ用)の共有リソースグループを使用してデータ同期ノードを実行し、データ同期ノードの並列度を構成する場合、実行される並列スレッドの数に基づいて料金が請求されます。Data Integration は、データ同期ノードに対して実行される並列スレッドの実際の数と、データ同期ノードに構成されている並列スレッドの最大数との整合性を確保しようとします。次のシナリオでは、データ同期ノードに対して実行される並列スレッドの実際の数は、データ同期ノードに構成されている並列スレッドの最大数よりも少なくなる場合があります。
データ同期ノードは、MySQL、PolarDB、SQL Server、PostgreSQL、Oracle データベースなどのリレーショナルデータベースからデータを同期するために使用されますが、データ同期ノードにシャードキーが構成されていないか、無効なシャードキーが構成されています。この場合、データ同期ノードはデータベース内のデータをシャードできず、並列スレッドを使用してデータを読み取ることができません。整数データ型のフィールドをシャードキーとして指定できます。Oracle では、時間データ型のフィールドをシャードキーとして指定できます。
PolarDB for Xscale(PolarDB-X)データソースからデータが同期されます。データ同期ノードを実行して PolarDB-X からデータを同期すると、ノードは論理テーブルの物理トポロジに基づいてデータをシャードし、シャードされたデータを読み取ります。デフォルトでは、物理テーブルシャードの数は、データ同期ノードに構成されている並列スレッドの最大数よりも少なくなります。
オブジェクトストレージサービス(OSS)、FTP、Hadoop分散ファイルシステム(HDFS)、または AWS S3 データソースに格納されているファイルからデータを同期するためにデータ同期ノードを実行すると、データはファイルの粒度に基づいて読み取られます。デフォルトでは、データを読み取ることができるファイルの数は、データ同期ノードに構成されている並列スレッドの最大数よりも少なくなります。
ソースのデータ分散が非常に不均一な場合、他のシャードからのデータ読み取りが完了した後、一部のシャードからデータを読み取るのに長時間かかる場合があります。関連するデータ同期ノードの実行の後半では、ノードに対して実行される並列スレッドの実際の数は、ノードに構成されている並列スレッドの最大数よりも少なくなる場合があります。
データ同期ノードの並列度を構成するためのベストプラクティス:
データ同期ノードに対して実行される並列スレッドが多いほど、データ同期ノードによってプリエンプトされるリソースが多くなります。データ同期に使用されるリソースグループのリソース割り当ては、先入れ先出し(FIFO)ルールに準拠しています。これは、データ同期ノードがコミットされるのが早いほど、データ同期ノードがリソースグループのリソースをプリエンプトできるのが早いことを示します。ビジネス要件に基づいてデータ同期ノードの並列度を構成することをお勧めします。これは、多数の並列スレッドがデータ同期ノードの実行時間を増加させるのを防ぎ、データ同期ノードのリソース占有が他のノードの実行をブロックするのを防ぐのに役立ちます。
ソースから少量のデータのみを同期する場合、関連するデータ同期ノードに少数の並列スレッドを構成することをお勧めします。小さな並列処理では、少量のリソースのみが必要です。これは、データ同期ノードが実行のためにフラグメントリソースを迅速にプリエンプトするのに役立ち、データ同期ノードの実行時間を適切な範囲内に制御するのに役立ちます。
同じデータソースに対して複数のデータ同期ノードを構成する場合は、データ同期ノードを並列して実行しないことをお勧めします。これは、リソースグループのリソース使用量をバランスさせ、データソースへの並列読み取りワークロードを削減できます。
データ転送速度
このセクションでは、以下の質問への回答を提供します。
質問 1:データ同期ノードのデータ転送速度をどのように指定しますか?データ同期ノードのスロットリングが有効または無効になっている場合の影響は何ですか?
質問 2:スロットリングを有効にして最大転送速度を指定した後、設定が有効にならない場合があるのはなぜですか?
質問 3:実際のデータ転送速度と指定された最大転送速度の間に大きな差がある場合があるのはなぜですか?
データ転送速度:データ転送速度と並列スレッドの最大数は互いに密接に関連しています。データ同期ノードにこれら 2 つの設定を同時に構成すると、ソースの読み取りワークロードと宛先の書き込みワークロードを適切な範囲内に制御できます。これは、ソースと宛先の安定性を確保するのに役立ちます。
データ同期ノードのスロットリングを有効にしない場合、データ同期ノードは構成した最大数の並列スレッドを実行してデータを同期し、ノードの各スライスのデータ転送速度は制限されません。たとえば、データ同期ノードに対して実行される並列スレッドの実際の数が ActualConcurrent で、ノードの各スライスのデータ転送速度が Speed の場合、データ同期ノードの実際のデータ転送速度は次の式に基づいて計算されます。ActualConcurrent × Speed。データ同期ノードのスロットリングを有効にしない場合、データはノードのハードウェアと構成でサポートされる最大転送速度で転送されます。ノードの構成には、データ同期ノードに構成する並列スレッドの最大数とメモリサイズが含まれます。ハードウェアの構成には、データソースの仕様とネットワーク構成が含まれます。
データ同期ノードのスロットリングを有効にすると、Data Integration は、ノードに構成した最大転送速度と並列スレッドの最大数に基づいてデータ同期ノードを実行します。Data Integration がデータ同期ノードの実行プランを作成する場合、ノードの各スライスのデータ転送速度は、最大転送速度を並列スレッドの最大数で除算した後に得られた商を切り上げて計算されます。データ同期ノードの各スライスの最小データ転送速度は 1 MB/秒です。データ同期ノードの実際の最大転送速度は、次の式に基づいて計算されます。実行される並列スレッドの実際の数 × ノードの各スライスの実際のデータ転送速度。次の説明は、スロットリングの例を示しています。
データ同期ノードに構成されている並列スレッドの最大数が 5 で、最大転送速度が 5 MB/秒の場合、データ同期ノードは並列実行のために 5 つのスライスに分割され、ノードの各スライスの最大転送速度は 1 MB/秒です。
実行される並列スレッドの実際の数が 5 の場合、データ同期ノードの実際の最大転送速度は 5 MB/秒であり、構成されている最大転送速度と同じです。
実行できる並列スレッドの実際の数がデータソースのパフォーマンスによって制限されている場合、実行される並列スレッドの実際の数は、構成されている並列スレッドの最大数よりも少なくなる場合があります。実行される並列スレッドの実際の数が 1 の場合、データ同期ノードの実際の最大転送速度は 1 MB/秒であり、構成されている最大転送速度よりも少なくなります。
データ同期ノードに構成されている並列スレッドの最大数が 5 で、最大転送速度が 3 MB/秒の場合、データ同期ノードは並列実行のために 5 つのスライスに分割され、ノードの各スライスの最大転送速度は 1 MB/秒であり、これは 3 を 5 で除算した後に得られた商を切り上げて計算されます。
実行される並列スレッドの実際の数が 5 の場合、データ同期ノードの実際の最大転送速度は 5 MB/秒であり、構成されている最大転送速度よりも大きくなります。
実行される並列スレッドの実際の数が 1 の場合、データ同期ノードの実際の最大転送速度は 1 MB/秒であり、構成されている最大転送速度よりも少なくなります。
データ同期ノードに構成されている並列スレッドの最大数が 5 で、最大転送速度が 10 MB/秒の場合、データ同期ノードは並列実行のために 5 つのスライスに分割され、ノードの各スライスの最大転送速度は 2 MB/秒であり、これは 10 を 5 で除算した後に得られた商です。
実行される並列スレッドの実際の数が 5 の場合、データ同期ノードの実際の最大転送速度は 10 MB/秒であり、構成されている最大転送速度と同じです。
実行される並列スレッドの実際の数が 1 の場合、データ同期ノードの実際の最大転送速度は 2 MB/秒であり、構成されている最大転送速度よりも少なくなります。
分散実行
このセクションでは、以下の質問への回答を提供します。
質問 1:どのようなシナリオで、データ同期ノードの分散実行モードを有効にする必要がありますか?
質問 2:ノードが分散実行モードで実行されていても、データ同期ノードの実行速度が遅いのはなぜですか?
データ同期ノードの分散実行モードを有効にしない場合、構成された並列スレッドの数は、ノードを実行するための単一の Elastic Compute Service(ECS)インスタンスに対してのみ使用されます。データ同期ノードの分散実行モードを有効にすると、システムはノードをスライスに分割し、並列実行のために複数の ECS インスタンスに分散します。この場合、ECS インスタンスが多いほど、データ同期速度は速くなります。データ同期パフォーマンスに高い要件がある場合は、データ同期ノードを分散実行モードで実行できます。データ同期ノードを分散実行モードで実行すると、ECS インスタンスのフラグメントリソースを活用できます。これにより、リソース使用率が向上します。
制限とベストプラクティス:
多数の並列スレッドを使用してデータ同期ノードを分散実行モードで実行すると、データソースに過剰なアクセスリクエストが送信されます。したがって、分散実行モードを使用する前に、データソースへのアクセス負荷を評価する必要があります。
排他リソースグループに ECS インスタンスが 1 つしか含まれていない場合は、データ同期ノードを分散実行モードで実行しないことをお勧めします。これは、実行プロセスが 1 台のマシンにのみ分散され、使用可能な ECS リソースがないためです。
データ同期ノードを実行して少量のデータのみを同期する場合は、少数の並列スレッドと、単一の ECS インスタンスを含む排他リソースグループをノードに構成することをお勧めします。データ同期ノードの分散実行モードを有効にしないことをお勧めします。
分散実行モードは、構成した並列スレッドの最大数が 8 以上の場合にのみ有効にできます。
データ同期中に許可されるダーティデータレコードの最大数
このセクションでは、以下の質問への回答を提供します。
質問 1:ダーティデータとは何ですか?
質問 2:データ同期中に許可されるダーティデータレコードの最大数をどのように構成しますか?
質問 3:最大転送速度とダーティデータの関係は何ですか?
ダーティデータの制限は、ノードの実行中にダーティデータが生成されたときのデータ同期ノードの動作を制御するために使用されます。単一のデータレコードを宛先に書き込むときに例外が発生した場合、そのデータレコードはダーティデータと見なされます。さまざまな異種システムのデータ処理の側面の複雑さと違いにより、宛先に書き込むことができなかったデータレコードはダーティデータと見なされます。一部のデータ同期シナリオでは、ダーティデータによってデータ同期効率が低下します。たとえば、データ同期ノードを実行してリレーショナルデータベースにデータを同期する場合、データレコードはデフォルトでバッチでデータベースに書き込まれます。ただし、データ同期中にダーティデータが生成されると、書き込みモードが変更されます。ダーティデータレコードを識別し、残りのデータレコードの通常の書き込みを確実にするために、データレコードはデータベースに 1 つずつ書き込まれます。書き込みモードが変更されると、データ同期効率が低下します。その結果、データ同期中に多数のダーティデータレコードが生成されると、データ同期全体の効率が大幅に低下します。
Data Integration では、ほとんどの種類のデータソースに対してダーティデータレコードに関連する設定を構成できます。次の設定がサポートされています。
データ同期中に許可されるダーティデータレコードの最大数を構成しない場合、ダーティデータレコードが生成されてもデータ同期ノードは引き続き実行できます。この設定をデータ同期ノードに適用するには、ノードを構成するときに、許可されるダーティデータレコードの最大数を指定するパラメーターを空のままにします。
データ同期中に許可されるダーティデータレコードの最大数を 0 に設定すると、データ同期中にダーティデータレコードは許可されません。データ同期中にダーティデータレコードが生成されると、データ同期ノードは失敗します。
データ同期中に許可されるダーティデータレコードの最大数を正の整数 N に設定すると、データ同期中に最大 N 個のダーティデータレコードが許可されます。データ同期中に生成されるダーティデータレコードの数が N を超えると、データ同期ノードは失敗します。
ベストプラクティス:
リレーショナルデータベースや Hologres、ClickHouse、AnalyticDB for MySQL データソースなど、データに高い要件を持つデータソースにデータを同期するためにデータ同期ノードを実行する場合は、データ同期中に許可されるダーティデータレコードの最大数を 0 に設定することをお勧めします。これは、データ品質のリスクをできるだけ早く特定するのに役立ちます。リレーショナルデータベースには、MySQL、SQL Server、PostgreSQL、Oracle、PolarDB、PolarDB-X データベースが含まれます。
データに高い要件がないデータソースにデータを同期するためにデータ同期ノードを実行する場合は、データ同期中に許可されるダーティデータレコードの最大数を構成する必要はありません。ビジネス要件に基づいて、データ同期中に許可されるダーティデータレコードの最大数を構成することもできます。これにより、ダーティデータレコードの処理に必要な O&M コストを削減できます。
トリガー条件がノードの障害または主要ノードの遅延であるアラートルールを構成できます。これは、ノードで発生する問題をできるだけ早く特定するのに役立ちます。
データ同期ノードを再実行できる場合は、ノードでエラーが発生した後にノードを再実行できるように設定を構成することをお勧めします。これは、時折発生する環境の問題によってノードの実行がブロックされるのを防ぐのに役立ちます。
データソースでサポートされる接続数のクォータ
このセクションでは、以下の質問への回答を提供します。
質問 1:データソースでサポートされる接続数のクォータとは何ですか?クォータを適切に構成するにはどうすればいいですか?
質問 2:データ同期ソリューションによって生成されたバッチ同期ノードの実行速度が遅く、送信状態で停止するのはなぜですか?
データソースでサポートされる接続数のクォータには、次の項目が含まれます。
宛先へのデータ書き込みでサポートされる並列スレッドの最大数:リアルタイム同期ノードで宛先にデータを書き込むために使用できる並列スレッドの最大数を指定します。使用するリソースグループの仕様と宛先のデータ書き込み機能に基づいて、適切な数を指定する必要があります。最大値は 32 で、デフォルト値は 3 です。
ソースからのデータ読み取りでサポートされる接続の最大数:データ同期ソリューションによって生成されたバッチ同期ノードがソースからすべてのデータを同期するために実行されると、ソースへの Java Database Connectivity(JDBC)接続が確立され、すべての履歴データが読み取られます。最大数は、ソースに許可される JDBC 接続数の上限を指定します。この設定により、多数のバッチ同期ノードの並列実行がソースの接続プールで許可される最大接続数に達するのを防ぎ、ソースの安定性を確保します。この設定は、ソースのリソースに基づいて構成する必要があります。デフォルト値は 15 です。データ同期ソリューションに構成した最大接続数がビジネス要件を満たしていない場合、データ同期ソリューションによって生成されたバッチ同期ノードが送信状態で停止する可能性があります。この問題を解決するには、同じデータソースを使用する他のデータ同期ノードのスケジュール時間を変更するか、最大接続数を適切に増やすことができます。