如何查看打开了多少 MySQL 连接?
Posted
技术标签:
【中文标题】如何查看打开了多少 MySQL 连接?【英文标题】:How can I see how many MySQL connections are open? 【发布时间】:2011-09-24 00:39:51 【问题描述】:在运行于 Apache 的 php 中,如何查看当前请求期间通过 mysql_connect
打开了多少连接?
我知道如果我用相同的参数调用mysql_connect
函数 100 次,它总是会返回相同的连接链接。一旦连接已经存在,它将不会启动新连接。
但我只是想确保mysql_connect
没有开始新的。
我正在使用包含许多 mysql_connect
函数调用的旧系统。
Apache 中是否有任何设置,或者有什么方法可以在 Apache 或 MySQL 日志文件中记录此数量的连接?
【问题讨论】:
一旦成功创建连接,您就可以将其记录下来。 【参考方案1】:您可以使用 MySQL 命令 show processlist 来获取连接数。
【讨论】:
进程列表会显示mysql服务器连接正确吗?还是显示打开了多少个连接? 是的,你现在是对的,我想他的问题是找出在给定时刻打开的连接数【参考方案2】:我不认为你可以看到连接数,但可以限制连接到 mysql 服务器。
【讨论】:
【参考方案3】:我认为有几种方法:
SHOW STATUS WHERE `variable_name` = 'Threads_connected'
或者您可以执行SHOW PROCESSLIST
并在Id
列中找出唯一值。在旧的 PHP API mysql
中,有一个 mysql_list_processes
函数也与 SHOW PROCESSLIST
一样。
但第一个应该适合你。也许您可能想查看其他STATUS variables
【讨论】:
【参考方案4】:当前连接状态:
mysqladmin status
查看Threads:
计数。可以通过以下命令获取有关当前连接的更多详细信息:
user@host:~$ mysqladmin -uroot -ppass extended-status | grep Threads
| Threads_cached | 0 |
| Threads_connected | 3 |
| Threads_created | 3 |
| Threads_running | 1 |
user@host:~$ mysqladmin -uroot -ppass processlist
+----+------+-----------+----+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+----+---------+------+-------+------------------+
| 53 | root | localhost | | Sleep | 258 | | |
| 54 | root | localhost | | Sleep | 253 | | |
| 58 | root | localhost | | Query | 0 | | show processlist |
+----+------+-----------+----+---------+------+-------+------------------+
仅供参考 mysqladmin -v -uroot -ppass processlist
是 show full processlist
的模拟。
命令可以缩短为任何唯一的前缀,并同时调用:
user@host:~$ mysqladmin -v -uroot -ppass proc stat
+----+------+-----------+----+---------+------+-------+-----------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+----+---------+------+-------+-----------------------+
| 53 | root | localhost | | Sleep | 951 | | |
| 54 | root | localhost | | Sleep | 946 | | |
| 65 | root | localhost | | Query | 0 | | show full processlist |
+----+------+-----------+----+---------+------+-------+-----------------------+
Uptime: 1675 Threads: 3 Questions: 171 Slow queries: 0 Opens: 235
Flush tables: 1 Open tables: 57 Queries per second avg: 0.102
【讨论】:
【参考方案5】:还有其他关于连接的有用变量,在您的特定情况下,变量Connections
可能有助于确定您的代码是否建立了太多连接。只需在运行代码之前和之后检查它的值。
# mysql -e 'SHOW STATUS WHERE variable_name LIKE "Threads_%" OR variable_name = "Connections"'
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Connections | 22742 |
| Threads_cached | 1 |
| Threads_connected | 87 |
| Threads_created | 549 |
| Threads_running | 51 |
+-------------------+-------+
连接
与 MySQL 服务器的连接尝试次数(成功与否)。
Threads_cached
线程缓存中的线程数。
Threads_connected
当前打开的连接数。
Threads_created
为处理连接而创建的线程数。如果 Threads_created 很大,您可能需要增加 thread_cache_size 值。缓存未命中率可以计算为 Threads_created/Connections。
线程运行
未休眠的线程数。
【讨论】:
以上是关于如何查看打开了多少 MySQL 连接?的主要内容,如果未能解决你的问题,请参考以下文章