ITPub博客

首页 > 数据库 > MySQL > 第60期 MySQL Threads_connected 最透彻讲解

第60期 MySQL Threads_connected 最透彻讲解

原创 MySQL 作者:pxbibm 时间:2026-03-27 09:13:01 0 删除 编辑
我们今天讲解一下 MySQL Threads_connected ,我给你讲 最实用、最准确、生产直接用的版本,包括:含义、正常值、异常判断、优化方案。

一、 Threads_connected 到底是什么?

含义:当前已经连接到 MySQL 的客户端连接总数,其中包含这几个状态的(包括空闲、活跃、休眠的)

简单说: Threads_connected = 目前有多少个客户端连在 MySQL 服务器上。

可以通过下面的sql进程查询:

MySQL [(none)]> show global status like 'Threads_connected';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_connected | 95    |
+-------------------+-------+
1 row in set (0.00 sec)

二、 它和 max_connections 的关系(最重要)

max_connections:MySQL 允许的 最大连接数,也就是能允许有多少个客户端连接mysql服务器上。
  • Threads_connected: 当前已用连接数,当前已经连接到mysql服务器上的数据量。

  • 使用sql查询max_connections最大连接数

  • MySQL [(none)]> show variables like 'max_connections';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | max_connections | 1500  |
    +-----------------+-------+
    1 row in set (0.01 sec)
  • 我们可以使用连接百分比判断连接是否快满了。

公式(判断是否快满)

已用连接百分比 = Threads_connected / max_connections * 100%

生产健康评判的标准

  • < 50%:健康,这种状态是比较健康的。
  • 50% ~ 75%:警戒,连接数比较多了,建议进行排查。
  • > 80%:危险(快爆连接)连接已经非常多了,非常危险了,赶快处理。
  • = max_connections: 无法新建连接,业务报错 Too many connections

三、 Threads_connected 高代表什么?

1. 连接池配置过大(最常见)

应用连接池 max-active / maximum-pool-size 设太大,查看java中间的代码配置。

比如jboss的配置文件,这里设置连接池最小10,最大100

 <datasource jta="false" jndi-name="java:/lis" pool-name="lis" enabled="true" use-java-context="true" use-ccm="true" statistics-enabled="true">
			<connection-url>jdbc:oracle:thin:@test:1521/lis</connection-url>
                    <driver>oracle</driver>
                    <pool>
                        <min-pool-size>10</min-pool-size>
                        <max-pool-size>100</max-pool-size>
                        <prefill>true</prefill>
                        <use-strict-min>false</use-strict-min>
                        <flush-strategy>FailingConnectionOnly</flush-strategy>
                    </pool>
                    <security>
                        <user-name>test</user-name>
                        <password>test</password>
                    </security>
                    <validation>
                        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
                        <validate-on-match>false</validate-on-match>
                        <background-validation>false</background-validation>
                        <use-fast-fail>false</use-fast-fail>
                        <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
                        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
                    </validation>
                </datasource>

2. 连接泄露(忘记释放连接)

代码没关闭连接 → 连接一直占着 → Threads_connected 只升不降

3. 慢查询过多

查询执行慢 → 连接不释放 → 连接数暴涨

4. 短连接风暴

PHP / 脚本频繁创建销毁连接

5. 数据库压力大、响应慢

四、 怎么看当前所有连接?

show processlist;
或(看全 SQL)
show full processlist;

重点看

  • Sleep:空闲连接(连接池正常保留)
  • Query:正在执行 SQL
  • Connect:正在连接
  • 大量 Sleep 且时间很长 → 连接池正常
  • 大量非 Sleep、执行很慢 → 性能问题

五、 生产优化方案(直接用)

1. HikariCP 最佳连接数(SpringBoot)

spring.datasource.hikari.maximum-pool-size= 10~20 (MySQL最佳)
MySQL 最佳连接数不是越大越好!一般 10~20 性能最高!

2. 设置合理的 MySQL 最大连接数

set global max_connections = 1000;

3. 缩短空闲连接超时(防止占坑)

set global wait_timeout = 600;set global interactive_timeout = 600;
空闲 10 分钟自动断开。

4. 检查连接泄露

  • 开启 HikariCP 泄露检测
spring.datasource.hikari.leak-detection-threshold=60000

六、 你可以直接用的巡检命令(收藏)

1. 看当前连接数

show global status like 'Threads_connected';

2. 看历史最高连接数

show global status like 'Max_used_connections';

3. 看最大连接数限制

show variables like 'max_connections';

4. 看连接使用率(%)

MySQL [(none)]> SELECT ROUND(( variable_value / @@max_connections ) * 100,
    -> 2 
    -> ) AS "连接使用率%" 
    -> FROM
    -> PERFORMANCE_SCHEMA.global_status 
    -> WHERE
    -> Variable_name = 'Threads_connected';
+------------------+
| 连接使用率%      |
+------------------+
|             6.60 |
+------------------+
1 row in set (0.00 sec)

七、 一句话总结

✅ Threads_connected = 当前 MySQL 总连接数

✅ 不能超过 max_connections

✅ 过高 = 连接池过大 / 慢查询 / 连接泄露

✅ 最佳连接数 10~20,不是越大越好


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12798004/viewspace-3114669/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
【DBAplus社群】联合发起人。ACOUG核心成员,Oracle用户组年轻专家。熟悉Oracle的体系结构,擅长Oracle数据库架构规划、SQL优化、OWI方面性能的优化。曾服务于航天、航空、机车、大型制造行业数据库的维护以及系统开发工作,开发过基于Oracle数据库的大型ERP系统。
  • 博文量
    341
  • 访问量
    2469610