AnalyticDB for MySQLは、SQL診断機能を提供し、クエリ、ステージ、および演算子レベルでSQLクエリ情報の統計を個別に収集し、統計を使用して問題を診断し、最適化の提案を提供します。 このトピックでは、ステージレベルの診断結果を表示および分析する方法について説明します。
診断結果タイプ
説明 ステージレベルの診断結果を表示する方法の詳細については、「診断結果の表示」をご参照ください。
大量のデータがブロードキャストされます
- 問題
ブロードキャストは、上流ステージから下流ステージにデータを送信するために使用される方法である。 詳細については、「データ出力タイプ」をご参照ください。 ステージが大量のデータをブロードキャストする場合、クエリは大量の最大メモリリソースを占有する可能性があります。
- 提案
- まず、現在のブロードキャスト動作が適切かどうかを判断します。 ステージ内のデータがブロードキャストされる場合、ブロードキャストデータは、メモリ内にハッシュテーブルを構築するための結合における正しいテーブルとして使用される。 適切なテーブルのサイズが小さいほど良いです。 並列性の高いクエリのシナリオでは、ブロードキャスト方法は、ノード間のネットワーク接続を削減し、システムの全体的な安定性を向上させるのに役立ちます。 次の図は、結合条件でデータスキューが発生するシナリオで、小さなテーブルがブロードキャストされない場合の実行プロセスを示しています。
Tsmall
テーブルのb
列で重大なデータスキューが発生し、Tbig
テーブルのデータが列に基づいてAnalyticDB for MySQLストレージノードに均等に分散されている場合、Tbig
テーブルのデータ再配布で処理時間の長いテールが発生します。次の図は、Tbig
テーブルのデータを再配布せず、Tsmall
テーブルをブロードキャストする場合の実行プロセスを示しています。上の図は、
Tsmall
テーブルのみをブロードキャストすることで、データスキューによるロングテール処理の問題を解決できることを示しています。 - 統計の有効期限などのいくつかのシナリオでは、推定テーブルサイズが不正確であり、大量のデータがブロードキャストされる原因となります。 この場合、
JOIN_DISTRIBUTION_TYPE=repartitioned
ヒントを使用して、データブロードキャスト機能を無効にできます。
ステージ入力でデータスキューが発生
- 問題次の理由により、ステージ入力データにデータスキューが発生することがあります。
- テーブルの作成時に選択した配布列は不適切です。 ステージ内のデータスキャンオペレータは、データがスキャンされているときにスキューされる。
- データスキューは、ネットワークを介して上流ステージから現在のステージにデータが転送されるときに発生します。
- 提案
- テーブルを作成するときに、適切な配布列を選択します。 詳細については、「配布フィールドのスキューに関する診断」をご参照ください。
- 上流ステージで出力データがスキューしていないか確認します。 詳細については、「ステージ出力で発生するデータスキュー」をご参照ください。
ステージ出力でデータスキューが発生
- 問題
ステージ出力のデータスキューは、不均一な処理時間とロングテールを引き起こす可能性があります。 下流ステージの処理が複雑な場合、下流ステージがデータを処理するときにロングテールが発生します。 これは、全体的なクエリのパフォーマンスに影響します。
- 提案
診断結果に表示される列にデータスキューが発生していないか確認してください。 例えば、多数のヌル値が存在する。