このトピックでは、完全なデータタスクが停止または減速する問題の一般的な原因について説明し、問題の解決策を提供します。 これらの原因に基づいて問題をトラブルシューティングし、ソリューションに基づいてタスクを再開できます。
発行
Data Transmission Service (DTS) が完全なデータ同期または移行を実行している場合、同期または移行に時間がかかるか、停止します。
考えられる原因
ソースデータベースから同期または移行されるデータの量が多いか、同期または移行されるテーブルにプライマリキーがありません。
ソースデータベースに複数のDTSタスクが作成されます。
DTSは、ソースまたはターゲットデータベースへの接続に失敗します。 たとえば、データベースにホワイトリストが設定されている場合、データベースアカウントに必要な権限がない場合、データベースアカウントまたはパスワードが無効な場合などです。
送信元データベースまたは送信先データベースのパフォーマンス、ネットワーク遅延、またはネットワーク帯域幅がビジネス要件を満たしていない。
データをターゲットデータベースに書き込むことはできません。 たとえば、宛先データベースが読み取り専用データベースである場合、宛先データベースのディスクがいっぱいである場合、宛先データベースでデッドロックが発生している場合などです。
トラブルシューティング
次の方法を使用して、問題をトラブルシューティングできます。
ソースデータベースを確認します。
移行時間の見積もり:
移行元データベースから移行するオブジェクトのデータボリュームを確認します。
最初に一部のテーブルを移行して、すべてのテーブルを移行するのに必要な合計時間を評価します。 たとえば、10 GBのデータを移行するのにかかる時間に基づいて、全体的な移行時間を見積もることができます。
同時タスクの確認: 複数のタスクが同時に実行されるかどうかを確認します。
説明同時タスクは、一時的なリソース不足につながる可能性があります。 別々の期間でタスクを実行することを推奨します。
ソースデータベースのユーザー名とパスワードが有効かどうかを確認します。
DTSタスクに指定されているユーザー名とパスワードを使用して、リモートホストからソースデータベースに接続できるかどうかを確認します。 たとえば、MySQLデータベースに接続するには、次のコマンドを実行します。
mysql -h <ソースデータベースのIPアドレスまたはドメイン名> -P <ソースデータベースのポート番号> -u <ユーザー名> -p <パスワード>ホワイトリストの設定が有効かどうかを確認します。 ソースデータベースが自己管理データベースの場合、DTSサーバーのCIDRブロックがソースデータベースのセキュリティ設定に追加されているかどうかを確認できます。 詳細については、次をご参照ください: ユーザー作成データベースのホワイトリストDTS IP範囲。
ソースデータベース内のすべての大きなテーブルに主キーまたは一意のインデックスが含まれているかどうかを確認します。 たとえば、MySQLデータベース内の大きなテーブルにプライマリキーまたは一意のインデックスが含まれているかどうかを確認するには、次のコマンドを実行します。
show create table <database name>.<table name>;説明ソースデータベースに共通インデックスのみが含まれている場合、またはインデックスが含まれていない場合、DTSは重複するデータレコードをターゲットデータベースに移行できます。
ターゲットデータベースを確認します。
ターゲットデータベースのユーザー名とパスワードが有効かどうかを確認します。
DTSタスクに指定されているユーザー名とパスワードを使用して、リモートホストからターゲットデータベースに接続できるかどうかを確認します。 たとえば、MySQLデータベースに接続するには、次のコマンドを実行します。
mysql -h <宛先データベースのIPアドレスまたはドメイン名> -P <宛先データベースのポート番号> -u <ユーザー名> -p <パスワード>ホワイトリストの設定が有効かどうかを確認します。 ターゲットデータベースが自己管理データベースの場合、DTSサーバーのCIDRブロックがターゲットデータベースのセキュリティ設定に追加されているかどうかを確認できます。 詳細については、次をご参照ください: ユーザー作成データベースのホワイトリストDTS IP範囲。
ターゲットデータベースインスタンスが読み取り専用かどうかを確認します。
たとえば、MySQLデータベースのステータスを照会および変更するには、次のコマンドを実行します。
show global variables like '% read_only %;コマンドを実行します。 read_onlyが返され、super_read_onlyがONの場合、MySQLデータベースは読み取り専用に設定されます。次のコマンドを実行して、MySQLデータベースのステータスを読み取り専用から読み取り /書き込みに変更します。
unlock tables; set global read_only=0;
説明MySQLデータベースが読み取り専用状態の場合、read_onlyパラメーターを1またはTRUEに設定します。 MySQLデータベースが読み書き状態の場合は、read_onlyパラメーターを0またはFALSEに設定します。 詳細については、「MySQLドキュメント」をご参照ください。
移行先データベースに使用可能なディスク容量があるかどうかを確認します。
たとえば、ApsaraDB RDSコンソールでApsaraDB RDS For MySQLインスタンスのストレージ使用量を表示できます。 詳細については、「ApsaraDB RDS For MySQLインスタンスのストレージ不足のトラブルシューティング」をご参照ください。
ターゲットデータベースのパフォーマンスがボトルネックに達しているかどうかを確認します。
たとえば、ターゲットデータベースインスタンスがApsaraDB RDS For MySQLインスタンスの場合、ApsaraDB RDSコンソールのインスタンスの [モニタリングとアラート] ページで、インスタンスのCPU使用率、メモリ使用量、およびI/O負荷を表示できます。 インスタンスの制限に達しているかどうかを確認することもできます。 詳細については、「監視情報を表示する」および「標準プライマリApsaraDB RDS For MySQLインスタンス (オリジナルのx86アーキテクチャ) のインスタンスタイプ」をご参照ください。
ターゲットデータベースにデッドロックがあるかどうかを確認します。
たとえば、ターゲットデータベースがMySQLデータベースの場合、次のコマンドを実行してデッドロックを照会および削除します。
show OPEN TABLES whereIn_use > 0;コマンドを実行して、テーブルがロックされているかどうかを確認します。SHOW PROCESSLIST;コマンドを実行して、ロックされたテーブルまたは低速のSQLプロセスを照会します。KILL [CONNECTION | QUERY]thread_idコマンドを実行して、プロセスを削除します。
説明ターゲットデータベースにデッドロックがある場合、データをデータベースに書き込むことはできません。
ネットワーク接続とネットワーク帯域幅が制限されているかどうかを確認します。 必要に応じて、ネットワーク帯域幅をアップグレードすることを推奨します。
説明pingやtelnetコマンドなどのOSコマンドを実行するか、サードパーティのツールを使用してネットワーク接続とネットワーク遅延をテストできます。
関連ドキュメント
増分データ移行または同期タスクのレイテンシを処理する方法の詳細については、増分データ移行または同期中にレイテンシが発生した場合はどうすればよいですか。