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
モジュールを使用して最適化を行うことができます。