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

ApsaraDB RDS:ApsaraDB RDS for MySQLインスタンスへの接続数が上限に達した場合はどうすればよいですか?

最終更新日:Mar 19, 2024

問題の説明

ApsaraDB RDS for MySQLインスタンスへの接続数が上限に達し、クライアントはRDSインスタンスに接続できません。

原因

  • 多数のアイドル接続が存在する。

  • 多数のアクティブな接続が存在します。

解決策

説明
  • インスタンスの設定やデータの変更など、リスクの高い操作を実行する前に、インスタンスのディザスタリカバリ機能とフォールトトレランス機能を確認して、データのセキュリティを確保することを推奨します。

  • ECS (Elastic Compute Service) インスタンスやRDSインスタンスなどのインスタンスの設定またはデータを変更する前に、インスタンスのスナップショットを作成するか、バックアップを有効にすることを推奨します。 たとえば、RDSインスタンスのログバックアップを有効にできます。

  • Alibaba Cloud管理コンソールで機密情報または送信された機密情報に対する権限を付与した場合は、できるだけ早い機会に機密情報を変更することを推奨します。 機密情報には、ユーザー名とパスワードが含まれます。

問題の特定

ApsaraDB RDSコンソールで、RDSインスタンスの [モニタリングとアラート] ページにアクセスします。 セッション指標を見つけて、多数のアイドル接続またはアクティブ接続が原因で接続の問題が発生するかどうかを確認します。 mysql.active_sessionパラメーターの値を確認できます。

過度のアイドル接続によって引き起こされる問題の解決策

理由

  • Javaアプリケーションなどのアプリケーションは永続的な接続を使用し、アプリケーション用に接続プールを構成する必要があります。 接続プールの初期接続数に大きな値を指定してアプリケーションを起動すると、アプリケーションはRDSインスタンスへの複数のアイドル接続を確立します。

  • PHPアプリケーションなどのアプリケーションは、短期間の接続を使用し、クエリの完了後に接続を明示的に閉じません。

ソリューションの詳細

  • ApsaraDB RDSコンソール、Data management (DMS) 、またはkillコマンドでセッション管理を使用して、アイドルセッションを終了します。 詳細については、「ApsaraDB RDS For MySQLインスタンスでセッションを終了する方法」をご参照ください。

  • アプリケーションで永続接続を使用する場合は、接続プールの再利用機能を有効にします。 接続検出機能も有効にすることを推奨します。

  • アプリケーションで短期間の接続を使用する場合は、クエリの完了後にアプリケーションコードを変更して接続を終了します。

  • 非インタラクティブモードの接続の場合、ApsaraDB RDSコンソールにログインし、[パラメーター] ページのwait_timeoutの値を減らします。 wait_timeoutは、非対話モードでの接続のタイムアウト期間を決定します。 デフォルト値: 86400 単位は秒です。 デフォルト値は24時間です。 非対話型接続がwait_timeoutの値より長い期間アイドル状態の場合、RDSインスタンスは自動的に接続を終了します。

  • インタラクティブモードで接続する場合は、ApsaraDB RDSコンソールにログインし、[パラメーター] ページのinteractive_timeoutの値を減らします。 interactive_timeoutは、対話モードでの接続のタイムアウト期間を決定します。 デフォルト値: 7200 単位は秒です。 デフォルト値は2時間です。 対話型接続がinteractive_timeoutの値より長い期間アイドル状態になると、RDSインスタンスは自動的に接続を終了します。

説明
  • RDSインスタンスへの接続数が上限に達した場合、DMSまたはその他の方法を使用してアプリケーションをRDSインスタンスに接続することはできません。 アプリケーションが永続接続を使用している場合は、接続プール内の最大接続数を、インスタンスタイプでサポートされている最大接続数よりも小さい値に設定することを推奨します。 たとえば、DMSまたはその他の管理操作のために10個の接続を予約します。 接続の失敗を修正するには、ApsaraDB RDSコンソールでwait_timeoutの値を減らすことを推奨します。 これにより、RDSインスタンスは、接続がタイムアウトした場合にアイドル接続を自動的に終了できます。

  • ほとんどの場合、アプリケーションは非インタラクティブモードでRDSインスタンスに接続します。 接続モードを知りたい場合は、アプリケーションの接続構成を確認する必要があります。 mysql_connect() 関数でMYSQL_CLIENT_INTERACTIVE定数を指定して、PHPアプリケーションのインタラクティブモードを有効にできます。

  • wait_timeoutおよびinteractive_timeoutの値の変更は、変更後に確立された新しい接続にのみ有効になります。 変更前に確立された接続については、元の設定が使用されます。

複数のアクティブな接続によって引き起こされる問題の解決策

理由

  • 遅いクエリが増加します。

  • InnoDBロック待ちやメタデータロック待ちなどのロック待ちが存在します。

  • CPU使用率は高いです。

  • IOPSは高いです。

ソリューションの詳細

  • InnoDBロック待機によってアクティブな接続の問題が発生する場合は、ApsaraDB RDS for MySQLインスタンスで行ロック待機が発生し、行ロックがタイムアウトした場合の対処方法の説明に基づいて問題を解決します。

  • アクティブな接続の問題がメタデータロック待機によって引き起こされる場合は、「DMSを使用してメタデータロックを解放する」をご参照ください。

  • アクティブな接続の問題がCPU使用率の高さによって発生する場合は、ApsaraDB RDS for MySQLインスタンスまたはApsaraDB RDS for MariaDBインスタンスのCPU使用率が高い場合の対処方法の説明に基づいて問題を解決します。

  • アクティブな接続の問題がIOPS使用率の高さによって発生する場合は、ApsaraDB RDS for MySQLインスタンスのIOPS使用率が高い場合の対処方法の説明に基づいて問題を解決します。