すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:ApsaraDB RDS for MySQLインスタンスの低速SQLステートメントのトラブルシューティング

最終更新日:Jan 18, 2024

このトピックでは、ApsaraDB RDS for MySQLインスタンスでSQL文が遅くなる問題をトラブルシューティングする方法について説明します。 ビジネスシナリオを変更しない場合、アーキテクチャ設計とインデックス設計がRDSインスタンスのクエリパフォーマンスに影響します。 これらのデザインが適切であれば、RDSインスタンスのクエリパフォーマンスが向上します。 これらの設計が不適切な場合、一部のSQLステートメントは低速で実行される可能性があります。

SQL例外による低速SQL文のトラブルシューティング

  • 原因と症状

    SQL例外は、不適切なスキーマ設計、インデックスの欠落、スキャンが必要な行数が多すぎるなど、さまざまな問題が原因で発生する可能性があります。

    ApsaraDB RDSコンソールにログインし、左側のナビゲーションウィンドウで [SQL Explorerと監査] を選択します。 次に、実行されたSQL文に関する情報を表示できます。 この情報には、各低速SQL文の実行に必要な時間と、各低速SQL文の実行回数が含まれます。

  • 解決策

    ビジネスシナリオに基づいて実行するSQL文を最適化します。 詳細については、「SQLの最適化」をご参照ください。

インスタンス制限による低速SQL文のトラブルシューティング

  • 原因と症状

    ほとんどの場合、RDSインスタンスは次の理由により最大パフォーマンスに達します。

    • ワークロードは増え続けています。 ただし、ストレージ容量はスケーリングされません。
    • RDSインスタンスが存在する物理ホストの年齢。 これにより、RDSインスタンスのパフォーマンスが低下します。
    • データの量は増加し続け、データ構造は変化する。 その結果、ApsaraDB RDSが一部のSQL文を実行する速度が遅くなります。

    ApsaraDB RDSコンソールにログインし、左側のナビゲーションウィンドウで [モニタリングとアラート] をクリックします。 次に、[標準モニタリング] タブで、[リソースモニタリング] をクリックして、RDSインスタンスのリソース使用量を表示します。 すべてのリソース使用量メトリックの値が100% に近い場合、RDSインスタンスは最大パフォーマンスに達しています。

  • 解決策

    RDSインスタンスの最大パフォーマンスをベンチマークするには、SysBenchを使用することを推奨します。 ほとんどの場合、複雑なクエリを実行しても、1秒あたりのクエリ (QPS) と1秒あたりのトランザクション (TPS) は最大パフォーマンスを超えません。 詳細については、「テストガイドライン」をご参照ください。

    RDSインスタンスが最大パフォーマンスに達した場合は、インスタンスをアップグレードすることを推奨します。 詳細は、「インスタンス仕様の変更」をご参照ください。

バージョンのアップグレードによる低速SQL文のトラブルシューティング

  • 原因と症状

    RDSインスタンスをアップグレードすると、SQL文のクエリプランが変更される場合があります。 クエリプランでサポートされている次の結合タイプは、効率に基づいて降順でソートされます。system、const、eq_ref、ref、fulltext、ref_or_null、index_merge、unique_subquery、index_subquery、range、index、all。 詳細については、MySQLの公式ドキュメントをご参照ください。

    アプリケーションが範囲とインデックスの結合を指定するクエリリクエストを頻繁に再送しても、ApsaraDB RDSがこれらのクエリリクエストを低速で処理する場合、多数のSQL文が並列化されます。 この場合、アプリケーションはスレッドを低速でリリースします。 その結果、接続プール内の接続が枯渇する。 これは、RDSインスタンスのすべてのワークロードに影響します。

    ApsaraDB RDSコンソールにログインし、左側のナビゲーションウィンドウで [モニタリングとアラート] をクリックします。 次に、[標準モニタリング] タブで、[リソースモニタリング] をクリックして、RDSインスタンスへの接続を表示できます。

  • 解決策

    インデックスの使用率とスキャンが必要な行数を分析します。 分析は、指定されたクエリプランに基づいています。 次に、クエリ効率を推定し、SQL文を再構築し、分析結果に基づいてインデックスを調整します。 これにより、クエリの効率を向上させることができます。 詳細については、「SQLの最適化」をご参照ください。

不適切なパラメーター設定による遅いSQL文のトラブルシューティング

  • 原因と症状

    innodb_buffer_pool_instancesおよびjoin_buffer_sizeパラメーターの設定が不適切な場合、ApsaraDB RDSはSQL文を低速で実行します。

    ApsaraDB RDSコンソールにログインし、左側のナビゲーションウィンドウで [パラメーター] を選択します。 次に、[履歴の編集] タブで、これらのパラメーターの再構成履歴を表示できます。

  • 解決策

    ビジネスシナリオに基づいてこれらのパラメーターを再設定します。

キャッシュエントリの有効期限が切れたことによる低速SQL文のトラブルシューティング

  • 原因と症状

    システムキャッシュは、多数のクエリを負担する可能性があります。 ただし、Alibaba Cloudはキャッシュヒット率100% を保証しません。 キャッシュされたエントリの有効期限が切れると、大量のクエリがRDSインスタンスにルーティングされます。 これにより、RDSインスタンスのクエリパフォーマンスが低下します。

    ApsaraDB RDSコンソールにログインし、左側のナビゲーションウィンドウで [モニタリングとアラート] をクリックします。 次に、[標準モニタリング] タブで、[リソースモニタリング] をクリックして、RDSインスタンスのキャッシュヒット率、QPS、およびTPSを表示できます。

  • 解決策

    スレッドプール、高速クエリキャッシュ、および自動SQLスロットリング機能を使用して、RDSインスタンスのクエリパフォーマンスを向上させます。 詳細については、「スレッドプール」、「高速クエリキャッシュ」、および「自動SQLスロットリング」をご参照ください。

バッチ操作による低速SQL文のトラブルシューティング

  • 原因と症状

    データのインポート、削除、およびクエリのために多数の操作が実行された場合、ApsaraDB RDSはSQL文を低速で実行します。

    低速SQLステートメントは、ディスク使用量、SQLログ、または低速クエリ統計に基づいて識別できます。 たとえば、各バイナリログファイルのサイズを確認できます。 通常、バイナリログファイルあたりのサイズは500 MBです。 バイナリログファイルのサイズが500 MBを超える場合は、例外が発生するかどうかを確認できます。

    ApsaraDB RDSコンソールにログインし、左側のナビゲーションウィンドウで [モニタリングとアラート] をクリックします。 次に、[標準モニタリング] タブで、[リソースモニタリング] をクリックして、RDSインスタンスのディスク使用量と1秒あたりの入出力操作 (IOPS) を表示できます。 このタブでは、[エンジンモニタリング] をクリックして、RDSインスタンスのTPSを表示することもできます。

    Binlog
  • 解決策

    オフピーク時にバッチ操作を実行します。 それ以外の場合は、各バッチ操作を複数のリクエストに分割し、これらのリクエストを個別に送信します。

クローズされていないトランザクションによる低速SQLステートメントのトラブルシューティング

  • 原因と症状

    タスクの速度が突然低下したが、CPU使用率とIOPS使用率が正常で、アクティブなセッションの数が増え続ける場合、一部のトランザクションはクローズされません。

  • 解決策

    トランザクション間で競合を引き起こすロックを確認します。 次に、トランザクションに含まれるSQL文を終了します。

スケジュールされたタスクに起因する低速SQL文のトラブルシューティング

  • 原因と症状
    RDSインスタンスの負荷が時間とともに定期的に変化する場合、スケジュールされたタスクが設定される場合があります。
    説明 モニタリング情報は、[モニタリングとアラート] ページの [標準モニタリング] タブで表示できます。
  • 解決策

    スケジュールされたタスクの実行時間を調整します。 オフピーク時にスケジュールタスクを実行することを推奨します。

概要

推奨される機能を使用して、低速なSQLステートメントを引き起こす問題をトラブルシューティングします。 詳細については、以下のトピックをご参照ください。