MySQL展示状态 - 活动或总连接数?

315
当我运行show status like 'Con%'命令时,它显示连接数为9972且不断增长。这是活动连接数还是总连接数?
9个回答

580
根据文档,这表示整个历史记录中的总连接数:

Connections

尝试连接到MySQL服务器的次数(无论成功与否)。

您可以通过Threads_connected状态变量查看当前活动连接数:

Threads_connected

当前打开连接的数量。

mysql> show status where `variable_name` = 'Threads_connected';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_connected | 4     |
+-------------------+-------+
1 row in set (0.00 sec)

...或通过show processlist命令:

mysql> show processlist;
+----+------+-----------------+--------+---------+------+-------+------------------+
| Id | User | Host            | db     | Command | Time | State | Info             |
+----+------+-----------------+--------+---------+------+-------+------------------+
|  3 | root | localhost       | webapp | Query   |    0 | NULL  | show processlist | 
|  5 | root | localhost:61704 | webapp | Sleep   |  208 |       | NULL             | 
|  6 | root | localhost:61705 | webapp | Sleep   |  208 |       | NULL             | 
|  7 | root | localhost:61706 | webapp | Sleep   |  208 |       | NULL             | 
+----+------+-----------------+--------+---------+------+-------+------------------+
4 rows in set (0.00 sec)

一个连接代表一个用户吗?因此,如果页面上有200个用户进行数据库查询,那么会产生200个连接吗? - Diego Queiroz
是的,有人可以澄清一下吗?我也有同样的问题。此外,这些变量是在每次MySQL服务重启后还是在服务器重新启动后重置? - LonelyRogue
@Diego Queiroz 这并不简单。如果开发人员非常关注,并且每个用户只需要连接一个数据库,那么是的,每个用户将是一个用户。但有可能还有其他正在运行的实用程序或备份服务也需要连接。 - Ryan Shillington
@LonelyRogue 是的,在服务器重新启动后,每个连接都需要重新连接。许多程序/库将自动连接,因此在不明确执行任何操作的情况下,连接数可能会很快填满。但是MySQL在重新启动后不会保留任何旧连接。 - Ryan Shillington
mysql -e "SHOW STATUS WHERE variable_name = 'Threads_connected';" -bash:variable_name:未找到命令 错误1064(42000)在第1行:您的SQL语法有误;请检查与您的MariaDB服务器版本相对应的手册,以了解正确使用= 'Threads_connected'的语法。 - xpredo

164
SHOW STATUS WHERE `variable_name` = 'Threads_connected';

这将向您显示所有打开的连接。


mysql -e "SHOW STATUS WHERE variable_name = 'Threads_connected';" -bash:variable_name:命令未找到 ERROR 1064(42000)位于第1行:您的SQL语法存在错误;请检查您的MariaDB服务器版本的手册,以了解在第1行附近使用的正确语法,如= 'Threads_connected'。 - xpredo

35

您也可以这样做

SHOW STATUS WHERE `variable_name` = 'Max_used_connections';

1
max_used_connections 也是有用的。 - coolnodje
max_user_connections不应该参考指的是允许同时连接到数据库的最大用户数吗?这报告的是mysql的固定变量,而不是实际操作值。 - Fed C

27

这是目前为止连接到服务器的总连接数。要查找当前连接状态,可以使用:

mysqladmin -u -p extended-status | grep -wi 'threads_connected\|threads_running' | awk '{ print $2,$4}'

这将显示:

Threads_connected 12

Threads_running 1  

Threads_connected: Number of connections

Threads_running: connections currently running some sql

22

要查看更完整的列表,您可以运行:

show session status;
或者
show global status;

请查看此链接, 以更好地了解其用法。

如果您想了解有关数据库的详细信息,可以运行:

status;

9

为了检查最大允许的连接数,您可以运行以下查询:

SHOW VARIABLES LIKE "max_connections";

要检查活动连接的数量,您可以运行以下查询:

SHOW VARIABLES LIKE "max_used_connections";

希望这有所帮助。


4
SHOW VARIABLES LIKE "max_used_connections"; 返回了 Empty set (0.00 sec),但是带上 "" 符号的 SHOW STATUS WHERE variable_name = 'Max_used_connections';` 是有效的。 - Markus
SHOW STATUS WHERE variable_name = "max_used_connections"; - Cyril N.
2
max_used_connections 显示自数据库启动以来使用的最大连接数,而不是当前活动连接数。来源:https://dev.mysql.com/doc/refman/8.0/en/server-status-variables.html#statvar_Max_used_connections - Marcelo Lacerda

2

0

MySQL查询的图形用户界面解决方案:

如果有人想要在不使用任何MySQL代码的情况下显示所有活动连接,那么可以使用dbForge Studio中的会话管理器

简单地打开上方菜单中的数据库 > 会话管理器,您将看到所有活动连接:

它将执行与这些MySQL命令相同的操作:

show full processlist;
SELECT * FROM information_schema.PROCESSLIST p;
SELECT * FROM performance_schema.threads t;

-3

2
我发现参考链接非常有用。例如,show status like '%onn%'; 是一个非常有用的查询。 - viddik13
2
这个答案是错误的,应该被删除。请查看其他答案。 - dr_
“连接数指尝试连接 MySQL 服务器的次数(无论成功与否)。它不是活动连接数。” - PYB
各种连接状态,包括中止连接和累计连接。Max_used_connections是高水位标记,Threads_connected是当前连接数,但show processlist不仅提供ID值,还提供正在进行的操作。 - mckenzm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接