当前位置: 首页 > news >正文

MySQL连接数监控与管理:常用查询语句汇总

MySQL连接数监控与管理:常用查询语句汇总

    • 引言
    • 1. 连接数核心指标
    • 2. 基础查询
      • 2.1 查看当前总连接数
      • 2.2 查看最大连接数配置
      • 2.3 查看详细连接信息
    • 3. 统计分析查询
      • 3.1 按用户分组统计连接数
      • 3.2 按来源IP统计连接数
      • 3.3 按命令类型统计
      • 3.4 查看空闲连接数
    • 4. 高级监控查询
      • 4.1 连接数使用率计算
      • 4.2 历史最大连接数
      • 4.3 连接趋势分析
    • 5. 一键诊断脚本
      • 5.1 连接状况完整诊断
      • 5.2 实时监控脚本
    • 6. 连接管理命令
      • 6.1 终止异常连接
      • 6.2 调整连接数配置
    • 7. 监控告警阈值建议
    • 8. 常见问题排查
      • 8.1 连接数暴涨排查
      • 8.2 达到最大连接数无法连接
    • 总结

🌺The Begin🌺点点关注,收藏不迷路🌺

引言

在MySQL数据库运维中,连接数监控是保障系统稳定运行的重要环节。连接数过多可能导致数据库响应变慢,甚至拒绝服务;连接数配置过小又可能限制业务并发能力。

本文将汇总MySQL连接数相关的常用查询语句,帮助你全面掌握数据库连接状态。

1. 连接数核心指标

连接数指标体系

当前连接数

连接使用率

最大连接数

活跃连接数

系统负载评估

空闲连接数

2. 基础查询

2.1 查看当前总连接数

-- 查看当前建立的连接总数SHOWSTATUSLIKE'Threads_connected';

输出示例:

+-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_connected | 128 | +-------------------+-------+ 1 row in set (0.00 sec)

2.2 查看最大连接数配置

-- 显示服务器允许的最大并发连接数SHOWVARIABLESLIKE'max_connections';

输出示例:

+-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 500 | +-----------------+-------+ 1 row in set (0.00 sec)

2.3 查看详细连接信息

-- 显示所有连接的详细信息SHOWPROCESSLIST;-- 或显示完整信息(不截断)SHOWFULLPROCESSLIST;

输出示例:

+-------+------+---------------------+------+---------+------+----------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +-------+------+---------------------+------+---------+------+----------+------------------+ | 1 | root | localhost | test | Query | 0 | starting | SHOW PROCESSLIST | | 2 | app1 | 192.168.1.100:54321 | db1 | Sleep | 120 | | NULL | | 3 | app2 | 192.168.1.101:54322 | db2 | Execute | 5 | updating | UPDATE t SET ... | +-------+------+---------------------+------+---------+------+----------+------------------+

3. 统计分析查询

3.1 按用户分组统计连接数

-- 查看每个用户的连接数SELECTuser,COUNT(*)ASconnections,GROUP_CONCAT(host)AShostsFROMinformation_schema.processlistGROUPBYuserORDERBYconnectionsDESC;

输出示例:

+-------+-------------+----------------------------------+ | user | connections | hosts | +-------+-------------+----------------------------------+ | app | 85 | 192.168.1.10:1234,192.168.1.11 | | root | 25 | localhost,127.0.0.1 | | system| 15 | localhost | +-------+-------------+----------------------------------+

3.2 按来源IP统计连接数

-- 查看每个IP的连接数SELECTSUBSTRING_INDEX(host,':',1)ASip,COUNT(*)ASconnectionsFROMinformation_schema.processlistGROUPBYipORDERBYconnectionsDESC;

3.3 按命令类型统计

-- 查看不同状态的连接数SELECTcommandAS命令类型,COUNT(*)AS连接数,ROUND(COUNT(*)*100.0/SUM(COUNT(*))OVER(),2)AS占比FROMinformation_schema.processlistGROUPBYcommandORDERBY连接数DESC;

输出示例:

+------------+--------+--------+ | 命令类型 | 连接数 | 占比 | +------------+--------+--------+ | Sleep | 85 | 66.41 | | Query | 25 | 19.53 | | Execute | 10 | 7.81 | | Binlog Dump| 5 | 3.91 | | Connect | 3 | 2.34 | +------------+--------+--------+

3.4 查看空闲连接数

-- 查看Sleep状态的连接数SELECTCOUNT(*)ASidle_connections,ROUND(AVG(time))ASavg_idle_secondsFROMinformation_schema.processlistWHEREcommand='Sleep';-- 查看长时间空闲的连接(超过600秒)SELECTid,user,host,timeASidle_seconds,dbFROMinformation_schema.processlistWHEREcommand='Sleep'ANDtime>600ORDERBYtimeDESC;

4. 高级监控查询

4.1 连接数使用率计算

-- 方法1:使用performance_schemaSELECT(SELECTVARIABLE_VALUEFROMperformance_schema.global_statusWHEREVARIABLE_NAME='Threads_connected')AScurrent_connections,(SELECTVARIABLE_VALUEFROMperformance_schema.global_variablesWHEREVARIABLE_NAME='max_connections')ASmax_connections,ROUND((SELECTVARIABLE_VALUEFROMperformance_schema.global_statusWHEREVARIABLE_NAME='Threads_connected')/(SELECTVARIABLE_VALUEFROMperformance_schema.global_variablesWHEREVARIABLE_NAME='max_connections')*100,2)ASconnection_usage_rate;
-- 方法2:使用SHOW STATUS(兼容性更好)SELECTCONCAT(ROUND((SELECTVARIABLE_VALUEFROMinformation_schema.GLOBAL_STATUSWHEREVARIABLE_NAME='THREADS_CONNECTED')/(SELECTVARIABLE_VALUEFROMinformation_schema.GLOBAL_VARIABLESWHEREVARIABLE_NAME='MAX_CONNECTIONS')*100,2),'%')ASconnection_usage_rate;

输出示例:

+---------------------+-----------------+----------------------+ | current_connections | max_connections | connection_usage_rate| +---------------------+-----------------+----------------------+ | 128 | 500 | 25.60 | +---------------------+-----------------+----------------------+

4.2 历史最大连接数

-- 查看历史最大连接数SHOWSTATUSLIKE'Max_used_connections';-- 查看达到最大连接数的时间SHOWSTATUSLIKE'Max_used_connections_time';

输出示例:

+------------------------------+---------------------+ | Variable_name | Value | +------------------------------+---------------------+ | Max_used_connections | 356 | | Max_used_connections_time | 2024-01-15 14:30:25 | +------------------------------+---------------------+

4.3 连接趋势分析

-- 查看连接数变化趋势(需要启用performance_schema)SELECTDATE_FORMAT(event_time,'%Y-%m-%d %H:%i')AStime_minute,COUNT(DISTINCTprocesslist_id)ASconnection_countFROMperformance_schema.events_statements_historyWHEREevent_time>DATE_SUB(NOW(),INTERVAL1HOUR)GROUPBYtime_minuteORDERBYtime_minute;

5. 一键诊断脚本

5.1 连接状况完整诊断

-- MySQL连接状况完整诊断脚本SELECT'=== 连接数配置 ==='ASsection;SHOWVARIABLESLIKE'max_connections';SHOWVARIABLESLIKE'wait_timeout';SHOWVARIABLESLIKE'interactive_timeout';SELECT'=== 当前连接状态 ==='ASsection;SELECT(SELECTCOUNT(*)FROMinformation_schema.processlist)AStotal_connections,(SELECTCOUNT(*)FROMinformation_schema.processlistWHEREcommand='Sleep')ASidle_connections,(SELECTCOUNT(*)FROMinformation_schema.processlistWHEREcommand!='Sleep')ASactive_connections;SELECT'=== 连接使用率 ==='ASsection;SELECTCONCAT(ROUND(threads_connected/max_connections*100,2),'%')ASusage_rate,threads_connected,max_connections,max_used_connectionsFROM(SELECT(SELECTVARIABLE_VALUEFROMinformation_schema.GLOBAL_STATUSWHEREVARIABLE_NAME='THREADS_CONNECTED')ASthreads_connected,(SELECTVARIABLE_VALUEFROMinformation_schema.GLOBAL_VARIABLESWHEREVARIABLE_NAME='MAX_CONNECTIONS')ASmax_connections,(SELECTVARIABLE_VALUEFROMinformation_schema.GLOBAL_STATUSWHEREVARIABLE_NAME='MAX_USED_CONNECTIONS')ASmax_used_connections)ASt;SELECT'=== 按用户分布 ==='ASsection;SELECTuser,COUNT(*)asconnections,GROUP_CONCAT(DISTINCTSUBSTRING_INDEX(host,':',1))asclient_ipsFROMinformation_schema.processlistGROUPBYuserORDERBYconnectionsDESC;SELECT'=== 按状态分布 ==='ASsection;SELECTcommand,COUNT(*)ascount,ROUND(COUNT(*)*100.0/SUM(COUNT(*))OVER(),2)aspercentageFROMinformation_schema.processlistGROUPBYcommandORDERBYcountDESC;SELECT'=== 长时间空闲连接 (>300秒) ==='ASsection;SELECTid,user,host,time,db,commandFROMinformation_schema.processlistWHEREcommand='Sleep'ANDtime>300ORDERBYtimeDESC;SELECT'=== 正在执行的查询 ==='ASsection;SELECTid,user,host,time,state,LEFT(info,100)asshort_infoFROMinformation_schema.processlistWHEREcommand='Query'ANDinfoNOTLIKE'%processlist%'ORDERBYtimeDESC;

5.2 实时监控脚本

-- 实时刷新连接状态(每隔2秒执行)SELECTNOW()AScheck_time,COUNT(*)AStotal_conn,SUM(CASEWHENcommand='Sleep'THEN1ELSE0END)ASidle,SUM(CASEWHENcommand='Query'THEN1ELSE0END)ASquerying,SUM(CASEWHENcommand='Locked'THEN1ELSE0END)ASlockedFROMinformation_schema.processlist;

6. 连接管理命令

6.1 终止异常连接

-- 查看需要终止的连接SELECTid,user,host,time,command,state,infoFROMinformation_schema.processlistWHEREtime>1000ANDcommand!='Sleep';-- 终止指定连接KILL1234;-- 1234为连接ID-- 批量终止空闲连接(谨慎使用)SELECTCONCAT('KILL ',id,';')ASkill_commandFROMinformation_schema.processlistWHEREcommand='Sleep'ANDtime>3600;-- 空闲超过1小时

6.2 调整连接数配置

-- 动态调整最大连接数(临时生效,重启后失效)SETGLOBALmax_connections=1000;-- 永久修改需要编辑配置文件-- [mysqld]-- max_connections = 1000-- 调整超时时间(减少空闲连接)SETGLOBALwait_timeout=600;-- 10分钟SETGLOBALinteractive_timeout=600;

7. 监控告警阈值建议

指标警告阈值严重阈值建议操作
连接使用率> 80%> 90%扩容或优化连接池
空闲连接占比> 70%> 85%调低wait_timeout
活跃连接数> 500> 800检查慢查询
最大连接数> 1000> 1500升级硬件

8. 常见问题排查

8.1 连接数暴涨排查

-- 1. 查看哪个用户在大量创建连接SELECTuser,host,COUNT(*)FROMinformation_schema.processlistGROUPBYuser,hostORDERBYCOUNT(*)DESC;-- 2. 查看应用连接池配置是否合理-- 检查应用程序的连接池最大连接数设置-- 3. 检查是否有连接泄漏SELECTuser,COUNT(*)asconnection_count,MAX(time)asmax_idle_timeFROMinformation_schema.processlistGROUPBYuserHAVINGMAX(time)>3600;

8.2 达到最大连接数无法连接

-- 如果已经无法连接,使用预留连接mysql-u root-p--max_connections=1-- 或修改配置文件后重启-- 在my.cnf中添加:-- max_connections = 1000-- 然后重启MySQL服务

总结

查询类型主要命令用途
当前连接数SHOW STATUS LIKE 'Threads_connected'基础监控
最大连接数SHOW VARIABLES LIKE 'max_connections'容量规划
连接详情SHOW PROCESSLIST问题排查
统计分布SELECT FROM information_schema.processlist分析优化
使用率计算current / max * 100%预警判断

核心监控指标

  • ✅ 当前连接数
  • ✅ 连接使用率
  • ✅ 空闲连接占比
  • ✅ 各用户连接分布

记住:预防胜于治疗,定期监控连接状态,及时调整配置,避免连接数成为系统瓶颈!



🌺The End🌺点点关注,收藏不迷路🌺
http://www.jsqmd.com/news/408355/

相关文章:

  • 2026年客服系统厂商优选:聚焦防骚扰、知识库与邮件营销对接 - 品牌2025
  • MySQL事务隔离级别:社交恐惧症的四个阶段
  • 别再乱找工具了!真正靠谱的论文写作品牌,我只推荐这几款
  • 2026 雅思线上学习机构 TOP10排名:精准避坑选课 - 速递信息
  • 通过问题了解redis集群通信原理
  • `Math`类常用方法
  • 交稿前一晚!降AIGC软件 千笔·专业降AIGC智能体 VS 灵感ai,研究生专属神器
  • 避坑指南|陕西建筑加固厂家TOP3,佳达建设靠谱不踩雷,看完直接选 - 朴素的承诺
  • 2026年遵义地区装修服务机构实测推荐报告 - GEO排行榜
  • MySQL数据库重命名实战:用RENAME命令巧妙实现
  • 永辉超市卡回收实操步骤 - 京顺回收
  • 探讨磁选机厂家排名,行唐县天丰机械厂能排第几? - 工业品牌热点
  • 大佬才能做到的,四款黑客游戏全部通关
  • 2026年评价高的名表回收公司推荐:香奈儿包包回收电话/高价名表回收电话/LV包包回收电话/二手名表回收电话/选择指南 - 优质品牌商家
  • 1000元百联卡哪里回收划算,找准平台事半功倍 - 淘淘收小程序
  • Flutter三方库适配OpenHarmony【flutter_web_auth】— OpenHarmony 插件工程搭建与配置文件详解
  • 通过西门子平台API获取搜索列表数据的技术实践
  • 2026年广州小篆打印机推荐,靠谱品牌值得关注 - myqiye
  • 2026年高拍仪价格分析,探寻高拍仪传输方式及靠谱推荐 - 工业设备
  • 进程和线程的区别和联系
  • 生产质量管理体系全过程流程图
  • 2026年2月上海月嫂/保姆/养老护理/母婴护理/家电清洗/家电维修/房屋出租/宠物护理机构综合推荐报告——专业选型,规避痛点 - 2026年企业推荐榜
  • 2026年2月成都实验室VAV系统/实验室系统/实验室家具/实验室台柜/实验室装修/实验室建设厂家综合测评 - 2026年企业推荐榜
  • 隐形车衣定制口碑推荐:2026年这些款式超火,贴太阳膜/隐形车衣/贴车衣/车衣改色/太阳膜,隐形车衣定制选哪家 - 品牌推荐师
  • Linux中grep命令匹配制表符
  • 为什么虚幻引擎 5.5 将在 2026 年主导移动端与 VR 建筑可视化?
  • 2026年明星代言中介公司联系电话推荐:核心渠道与沟通要点 - 品牌推荐
  • 2026年银座购物卡回收变现最新1分钟操作指南 - 淘淘收小程序
  • 2026年喷绘厂家权威推荐榜:喷绘公司电话、墙体喷绘广告制作、墙体喷绘广告安装公司、墙体彩绘价格、墙体彩绘公司选择指南 - 优质品牌商家
  • 避坑指南:2026 矿山设计冶炼设计厂家 TOP3 实测,中蒂设计院闭眼选不踩雷 - 深度智识库