IBM Cloud Docs
MySQL Connections の管理

MySQL Connections の管理

IBM Cloud® Databases for MySQL デプロイメントへの接続ではリソースが使用されるため、デプロイメントのパフォーマンスを調整する際に必要な接続数を考慮してください。 MySQL では、 max_connections 設定を使用して接続 (および接続によって使用されるリソース) の数を制限することで、ランナウェイ接続の動作によってデプロイメントのリソースが負担になることを回避します。

max_connections の値は、管理者ユーザーmysql を使用して確認できます。 次のようなコマンドを使用して、 admin ユーザーとともに max_connections を確認します。

ibmclouddb=> SHOW max_connections;
 max_connections
-----------------
 200
(1 row)

MySQL max_connections 変数の計算方法

max_connections は、データベース・サーバーとの間で確立できる同時接続の最大数を決定する、 MySQL の構成パラメーターです。

MySQL max_connections 基本式

max_connections を計算するための基本的な式は、以下のとおりです。

Available RAM = Global Buffers + (Thread Buffers x `max_connections`)

バッファーとその値のリストを検索するには、次のようなコマンドを使用します。

SHOW VARIABLES LIKE '%buffer%';

MySQL 接続制限

プロビジョン時に、Databases for MySQL では MySQL データベースへの接続の最大数を 200に設定します。 MySQL 構成の変更 によってこの値を上げます。

いくつかの接続は、データベースの状態と保全性を維持するために内部的に予約されているため、使用可能なままにしておいてください。

非管理者アカウントの同時接続数を制限します。 例えば、 max_user_connections=3 を設定すると、ユーザー・アカウントは最大 3 つの同時接続に制限されます。

デプロイメントの接続制限を超えると、データベースの正常性に悪影響が及び、アプリケーションからアクセスできなくなります。 接続限度に達すると、新しい接続を開始しようとしてもエラーになります。

FATAL: remaining connection slots are reserved for
non-replication superuser connections

admin ユーザー、 mysql、および SHOW GLOBAL STATUS を使用して、デプロイメントへの接続に関する情報にアクセスします。

mysql> SHOW GLOBAL STATUS;
+-----------------------------------+------------+
| Variable_name                     | Value      |
+-----------------------------------+------------+
| Aborted_clients                   | 0          |
| Aborted_connects                  | 0          |
| Bytes_received                    | 155372598  |
| Bytes_sent                        | 1176560426 |
...
| Connections                       | 30023      |
| Created_tmp_disk_tables           | 0          |
| Created_tmp_files                 | 3          |
| Created_tmp_tables                | 2          |
...
| Threads_created                   | 217        |
| Threads_running                   | 88         |
| Uptime                            | 1389872    |
+-----------------------------------+------------+

接続先を判別するには、次のようなコマンドを使用して、 threads_connected 変数を利用してデータベース別に接続を分割します。

mysql> show status where `variable_name` = 'Threads_connected';

接続をさらに調査するには、 SHOW PROCESSLIST コマンドを使用します。

SHOW [FULL] PROCESSLIST;

MySQL 接続の終了

mysqld( MySQL サーバー) への各接続は別個のスレッドで実行され、以下のようなコマンドを使用して processlist_id ステートメントで停止できます。

KILL [CONNECTION | QUERY] processlist_id
  • KILL CONNECTION は、接続が実行されているステートメントを停止した後、 processlist_id に関連付けられている接続を終了します。
  • KILL QUERY は、接続が実行されているステートメントを終了しますが、接続自体はそのまま残ります。

詳しくは、「 MySQL Reference Manual KILL Statement」を参照してください。

MySQL 接続の終了

デプロイメントが接続制限に達した場合、またはデプロイメントへの接続に問題があり、接続数が多いことが問題であると考えられる場合は、デプロイメントへのすべての接続を切断 (または終了) します。

UI の_「設定」_タブには、デプロイメントに対する End Connections ボタンがあります。 デプロイメントに接続されているあらゆるものが切断されるので、慎重に使用してください。

CLI で、以下のようなコマンドを使用して、デプロイメントへの接続を終了します。

ibmcloud cdb deployment-kill-connections <deployment name or CRN>

Cloud Databases API でも、すべての接続を終了する操作を実行できます。

MySQL 接続プーリング

接続制限の超過を防ぎ、アプリケーションからの接続を効率的に処理するための 1 つの方法として、接続プーリングを使用する方法があります。

MySQL コネクター を使用すると、別の言語または環境 ( ODBC、 Java (JDBC)、C++、 Python、PHP、 Perl、 Ruby、ネイティブ C、および組み込み MySQL インスタンスなど) から MySQL ステートメントに接続して実行することができます。

例えば、MySQL Connector/J を使用した接続プーリングによって、全体の使用量を削減しながら、パフォーマンスを向上させることができます。 MySQL Connector/Python でも、 mysql.connector.pooling モジュールを使用して最適化を行うことができます。