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

MySQL 默认连接数

一、MySQL 默认连接数概述

MySQL 的 max_connections 是数据库服务器允许的最大并发连接数,直接影响系统性能和资源利用率。

二、MySQL 默认连接数的版本差异

版本默认最大连接数上限值
MySQL 5.010016384
MySQL 5.1200(小版本不同)100000
MySQL 5.5/5.6/5.7151100000
MySQL 8.0151100000

验证方法

SHOW VARIABLES LIKE 'max_connections';

三、核心概念与命令详解

1. 查看当前连接数与配置

  • 最大连接数
    SHOW VARIABLES LIKE 'max_connections';
    
  • 当前活跃连接数
    SHOW STATUS LIKE 'Threads_connected';
    
  • 连接使用率
    SELECT (SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Threads_connected') AS current_connections,(SELECT VARIABLE_VALUE FROM performance_schema.global_variables WHERE VARIABLE_NAME = 'max_connections') AS max_connections,ROUND((SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Threads_connected') / (SELECT VARIABLE_VALUE FROM performance_schema.global_variables WHERE VARIABLE_NAME = 'max_connections') * 100, 2) AS connection_usage_rate;
    

2. 详细连接信息

  • 查看所有连接状态
    SHOW PROCESSLIST;
    
  • 按用户分组统计连接数
    SELECT user, COUNT(*) AS connections FROM information_schema.processlist GROUP BY user;
    
  • 空闲连接数
    SELECT COUNT(*) FROM information_schema.processlist WHERE command = 'Sleep';
    

四、连接数调整的实战方法

1. 通过配置文件永久修改

  • Linux/Unix/macOS
    修改 /etc/my.cnf/etc/mysql/my.cnf

    [mysqld]
    max_connections = 1000
    wait_timeout = 300
    interactive_timeout = 300
    
  • Windows
    修改安装目录下的 my.ini

    [mysqld]
    max_connections = 1000
    wait_timeout = 300
    
  • 重启服务

    # Linux/Unix/macOS
    sudo systemctl restart mysql# Windows
    net stop MySQL80 && net start MySQL80
    

2. 动态调整(临时生效)

SET GLOBAL max_connections = 1000;

五、连接池优化:HikariCP 的 YML 配置详解

在 Spring Boot 项目中,HikariCP 是默认的连接池实现。以下是一个完整的 application.yml 配置示例:

spring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: passwordhikari:# 最大连接数maximum-pool-size: 20# 最小空闲连接minimum-idle: 5# 连接超时时间(毫秒)connection-timeout: 30000# 空闲连接超时时间(毫秒)idle-timeout: 600000# 连接最大存活时间(毫秒)max-lifetime: 1800000# 连接健康检查connection-test-query: SELECT 1# 预热连接数initialization-fail-timeout: 1# 自动提交auto-commit: true# 池大小调整的等待时间(毫秒)pool-name: MyHikariPool

3. 关键参数说明

参数名说明推荐值
maximum-pool-size最大连接数20~100(业务决定)
minimum-idle最小空闲连接数5~10
connection-timeout连接超时时间(毫秒)30000
idle-timeout空闲连接超时时间(毫秒)600000
max-lifetime连接最大存活时间(毫秒)1800000
connection-test-query健康检查 SQLSELECT 1

六、连接池监控与 Prometheus 集成

1. 通过 JMX Exporter 监控 HikariCP

配置步骤:
  1. 下载 JMX Exporter
    从 JMX Exporter GitHub 下载 jmx_prometheus_javaagent-*.jar

  2. 创建配置文件 jmx_config.yaml

    rules:
    - pattern: "com.zaxxer.hikari<type=Pool>(?<poolName>[^:]+):(?<attributeName>.+)"name: "hikaricp_${poolName}_${attributeName}"type: GAUGEhelp: "Metrics from HikariCP connection pool"
    
  3. 启动应用时加载 JMX Exporter

    java -javaagent:/path/to/jmx_prometheus_javaagent.jar=12345:/path/to/jmx_config.yaml -jar your-app.jar
    
  4. Prometheus 配置抓取目标

    scrape_configs:
    - job_name: 'hikaricp'static_configs:- targets: ['localhost:12345']
    

2. Grafana 面板指标

  • 活跃连接数hikaricp_HikariPool_activeConnections
  • 空闲连接数hikaricp_HikariPool_idleConnections
  • 等待线程数hikaricp_HikariPool_threadsAwaitingConnection
  • 总连接数hikaricp_HikariPool_totalConnections

七、高并发场景下的连接管理策略

1. Web 应用场景

  • 问题:高并发下连接数耗尽。
  • 解决方案
    • 连接池 + 缓存:减少直接数据库访问(如 Redis 缓存高频数据)。
    • 读写分离:通过主从复制分担写压力。
    • 异步任务:复杂操作通过队列(如 Kafka)异步处理。

2. 数据分析场景

  • 需求:短时间大量复杂查询。
  • 优化策略
    • 限制单次查询连接数:设置 max_connections_per_hour
    • 批处理:合并多个查询为批量操作。

八、常见问题与解决方案

1. 错误:Too many connections

  • 原因:达到 max_connections 限制。
  • 解决方法
    1. 增加 max_connections
    2. 优化连接池配置(减少空闲连接)。
    3. 使用连接池 + 异步处理。

2. 连接泄漏

  • 现象:连接未释放导致资源浪费。
  • 解决方案
    • 代码规范:使用 try-with-resources 自动关闭资源。
    • 设置超时:合理配置 wait_timeoutidle-timeout

九、扩展知识:MySQL 连接数调优

1. 资源限制检查

  • 内存消耗:每个连接需分配线程和缓存,增加 max_connections 会显著增加内存占用。
  • 操作系统限制:检查 ulimit 配置:
    ulimit -n  # 查看当前限制
    ulimit -n 65535  # 临时修改限制
    

2. 连接池性能调优

  • 预热连接:启动时预先创建部分连接,减少首次请求延迟。
  • 动态扩容:根据负载动态调整连接池大小(需结合监控系统)。

十、总结

1. 总结

  • 默认值:MySQL 5.5+ 默认为 151,需根据业务需求调整。
  • 调整方法:优先通过配置文件修改,结合 HikariCP 优化。
  • 监控:定期检查 Threads_connectedSHOW PROCESSLIST

2. Java 开发最佳实践

  • 连接池配置:使用 YML 格式统一管理,避免硬编码。
  • 资源管理:使用 try-with-resources 自动关闭连接。
  • 监控集成:通过 Prometheus + Grafana 实时监控连接池状态。

十一、附录:常用命令速查表

命令功能
SHOW VARIABLES LIKE 'max_connections';查看最大连接数配置
SHOW STATUS LIKE 'Threads_connected';查看当前活跃连接数
SHOW PROCESSLIST;查看所有连接的详细信息
SET GLOBAL max_connections = 1000;临时调整最大连接数
SELECT * FROM information_schema.processlist WHERE command = 'Sleep';查看空闲连接

相关文章:

  • 在 HTTP 请求返回的状态码不为 200 时,重新发送请求
  • 数据库系统概论(十九)详细讲解关系查询处理与查询优化
  • 设计模式-依赖倒置原则(Dependency Inversion Principle, DIP)
  • Spring Boot(九十一):Spring Boot实现防盗链功能
  • WPS 和 office (word/excel/ppt) 找到模板所在位置以及更改模板的方式(公文写作格式要求、字体安装、模板下载)
  • Maven高级学习笔记
  • 常见哈希格式类型及其在CTF与渗透测试中的爆破与伪造策略(PBKDF2、bcrypt...)
  • Spring Boot分布式锁深度优化:彻底解决达梦数据库高并发死锁问题
  • 【C++11】智能指针——unique_ptr, shared_ptr和weak_ptr
  • DBeaver数据库管理工具的简介、下载安装与优化配置
  • 【Dify精讲】第10章:会话管理与上下文保持【知识卡片】
  • Nginx入门篇
  • 【计算机网络】:get与post
  • 基于协同过滤的新高考志愿个性化智能推荐系统前后端讲解
  • 座舱监控系统(In-Cabin Monitoring System,IMS)相关知识
  • Gartner发布终端安全项目路线图:保护终端免受复杂网络攻击
  • 前端项目如何部署为https
  • 每天一个前端小知识 Day 3 - JavaScript 的作用域与闭包
  • C++指针的使用
  • 计算机网络 期末实训 eNSP 校园网
  • 招聘网站做鸭子的/网站建设的意义和目的
  • 微应用和微网站的区别/希爱力双效片副作用
  • 网站建设门店牌子/网站域名查询网
  • 网站滑动效果怎么做/企业网站制作模板
  • 付运费送东西的网站怎么做/3a汽车集团公司网络营销方案
  • 网站本地被劫要怎么做/深圳市企业网站seo营销工具