MySQLで同時接続数の上限や現在の接続状況を確認するには、max_connectionsThreads_connectedMax_used_connectionsを使う。

参考: 【PostgreSQL】接続数の上限と現在の接続数を確認する

max_connectionsで接続数の上限を確認する

MySQLで同時接続数の上限を確認するには、max_connections変数をSHOW VARIABLESで確認する。

mysql> SHOW VARIABLES LIKE 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+

SQLで扱いたい場合はperformance_schema.global_variablesを参照する。

mysql> SELECT VARIABLE_VALUE FROM performance_schema.global_variables
    -> WHERE VARIABLE_NAME = 'max_connections';
+----------------+
| VARIABLE_VALUE |
+----------------+
| 151            |
+----------------+

Threads_connectedで現在の接続数を確認する

現在の接続数を確認するには、Threads_connectedステータス変数をSHOW STATUSで確認する。

mysql> SHOW STATUS LIKE 'Threads_connected';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_connected | 1     |
+-------------------+-------+

3つのクライアント接続でクエリを実行中に確認すると、値が増えているのが分かる。

mysql> SHOW STATUS LIKE 'Threads_connected';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_connected | 4     |
+-------------------+-------+

Threads_connectedにはevent_schedulerのようなMySQL内部のバックグラウンドスレッドも含まれる。
PostgreSQLのpg_stat_activitybackend_type列でclient backendに絞り込めるが、MySQLのThreads_connectedにはクライアント接続のみを取り出す仕組みがなく、内部スレッドの分だけ実際のクライアント接続数より多く見える。

Max_used_connectionsで過去のピーク接続数を確認する

サーバー起動後、同時に使われた接続数の最大値を確認するには、Max_used_connectionsステータス変数を使う。

mysql> SHOW STATUS LIKE 'Max_used_connections';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Max_used_connections | 5     |
+----------------------+-------+

Threads_connectedが現在の接続数を表すのに対し、Max_used_connectionsは過去のピーク値を保持し続ける。
接続が減っても値は下がらないため、一時的なアクセス集中があったかどうかを後から確認できる。

mysql> SHOW STATUS LIKE 'Threads_connected';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_connected | 1     |
+-------------------+-------+

mysql> SHOW STATUS LIKE 'Max_used_connections';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Max_used_connections | 5     |
+----------------------+-------+

Max_used_connections_timeステータス変数(MySQL 8.0.30以降)を確認すると、ピークを記録した日時も分かる。

mysql> SHOW STATUS LIKE 'Max_used_connections_time';
+----------------------------+---------------------+
| Variable_name              | Value               |
+----------------------------+---------------------+
| Max_used_connections_time  | 2026-08-20 15:05:57 |
+----------------------------+---------------------+

Max_used_connectionsFLUSH STATUSを実行するとリセットされる。

mysql> FLUSH STATUS;
mysql> SHOW STATUS LIKE 'Max_used_connections';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Max_used_connections | 1     |
+----------------------+-------+

SHOW PROCESSLISTで接続の内訳を確認する

接続元ユーザーごとの内訳を確認するには、performance_schema.processlistUSER列で集計する。

mysql> SELECT USER, COUNT(*) AS cnt
    -> FROM performance_schema.processlist
    -> WHERE USER != 'event_scheduler'
    -> GROUP BY USER
    -> ORDER BY cnt DESC;
+------------+-----+
| USER       | cnt |
+------------+-----+
| app_user   | 2   |
| root       | 2   |
| batch_user | 1   |
+------------+-----+

SHOW PROCESSLIST;でも同じ情報を一覧形式で確認できるが、集計やソートをする場合はSQLで扱えるperformance_schema.processlistのほうが柔軟である。
同様の情報を持つinformation_schema.processlistは非推奨であり、将来のバージョンで削除される予定のため使わない。

残りの接続数を計算する

max_connectionsThreads_connectedを組み合わせると、残りの接続数を計算できる。

mysql> SELECT
    ->   (SELECT VARIABLE_VALUE FROM performance_schema.global_variables WHERE VARIABLE_NAME = 'max_connections') AS max_connections,
    ->   (SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Threads_connected') AS current_connections;
+------------------+----------------------+
| max_connections  | current_connections  |
+------------------+----------------------+
| 151              | 1                    |
+------------------+----------------------+

接続数が上限に達すると、新規接続時にERROR 1040 (HY000): Too many connectionsエラーが発生する。
定期的に残りの接続数を確認し、アプリケーション側のコネクションプール設定や、ProxySQLなどのコネクションプーラーの導入を検討する。

参考