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

如何有效利用MYSQL的连接数

连接数配置2500~3000 依然发现连接不够用?

-- 查看当前最大连接数
SHOW VARIABLES LIKE 'MAX_CONNECTIONS';
-- 查看当前总链接数
SHOW STATUS LIKE 'Threads_connected';
-- 查看当前进程明细
SHOW PROCESSLIST;

合理设置以下参数:

1. MySQL 的参数设置

MySQL 有两个关键参数控制连接的空闲超时时间:

wait_timeout
  • 作用:控制非交互式连接(如通过 JDBC、ODBC 等程序连接的客户端)的空闲超时时间。

  • 默认值:28800 秒(8 小时)。

  • 建议值:根据业务需求设置,通常可以设置为 600 秒(10 分钟)。

interactive_timeout
  • 作用:控制交互式连接(如通过 MySQL 命令行客户端或 PHPMyAdmin 等工具连接的客户端)的空闲超时时间。

  • 默认值:28800 秒(8 小时)。

  • 建议值:与 wait_timeout 保持一致,通常设置为 600 秒(10 分钟)。

设置方法
  • 临时设置(重启后失效):

    sql

    复制

    SET GLOBAL wait_timeout = 600;
    SET GLOBAL interactive_timeout = 600;
  • 永久设置(修改配置文件):
    在 MySQL 配置文件(my.cnf 或 my.ini)中添加或修改以下内容:

    ini

    复制

    [mysqld]
    wait_timeout = 600
    interactive_timeout = 600

    然后重启 MySQL 服务。


2. HikariCP 连接池的参数设置

HikariCP 是一个高性能的连接池,以下是关键参数及其与 MySQL 超时设置的关联:

max-lifetime
  • 作用:控制连接在连接池中的最大存活时间。超过该时间的连接会被销毁并重新创建。

  • 建议值:设置为小于 MySQL 的 wait_timeout 和 interactive_timeout 的值。例如,如果 MySQL 的超时时间是 600 秒,可以将 max-lifetime 设置为 540000 毫秒(9 分钟)。

  • 单位:毫秒。

idle-timeout
  • 作用:控制连接在连接池中的最大空闲时间。超过该时间的空闲连接会被销毁。

  • 建议值:根据业务需求设置,通常可以设置为 60000 毫秒(1 分钟)。

  • 单位:毫秒。

connection-timeout
  • 作用:控制从连接池获取连接的最大等待时间。如果超时,会抛出异常。

  • 建议值:通常设置为 30000 毫秒(30 秒)。

  • 单位:毫秒。

minimum-idle
  • 作用:控制连接池中保持的最小空闲连接数。

  • 建议值:根据业务需求设置,通常可以设置为 10~50。

  • 注意:设置过高会导致资源浪费,设置过低可能影响性能。

maximum-pool-size
  • 作用:控制连接池的最大连接数。

  • 建议值:根据业务需求和数据库性能设置,通常可以设置为 100~200。


3. 配置示例

以下是一个完整的 HikariCP 配置示例(以 Spring Boot 的 application.yml 为例):

yaml

复制

spring:
  datasource:
    hikari:
      connection-test-query: SELECT 1  # 连接测试查询
      connection-timeout: 30000       # 连接获取超时时间(30 秒)
      maximum-pool-size: 150          # 最大连接数
      max-lifetime: 540000           # 连接最大存活时间(9 分钟)
      minimum-idle: 10               # 最小空闲连接数
      idle-timeout: 60000            # 空闲连接超时时间(1 分钟)

4. 参数之间的关系

  • MySQL 的 wait_timeout 和 interactive_timeout:控制 MySQL 服务器关闭空闲连接的时间。

  • HikariCP 的 max-lifetime:控制连接在连接池中的最大存活时间。

  • HikariCP 的 idle-timeout:控制连接在连接池中的最大空闲时间。

关键点

  • max-lifetime 必须小于 MySQL 的 wait_timeout 和 interactive_timeout,否则连接池中的连接可能会被 MySQL 关闭,导致应用使用无效连接。

  • idle-timeout 可以适当设置,以定期清理空闲连接,避免资源浪费。


5. 验证配置

  • 使用 SHOW VARIABLES LIKE 'wait_timeout'; 和 SHOW VARIABLES LIKE 'interactive_timeout'; 确认 MySQL 的超时设置。

  • 使用 SHOW PROCESSLIST; 查看 MySQL 的连接状态,确认是否有大量 Sleep 状态的连接。

  • 监控 HikariCP 的连接池状态,确保连接池中的连接数在合理范围内。


6. 总结

  • MySQL 设置

    ini

    复制

    wait_timeout = 600
    interactive_timeout = 600
  • HikariCP 设置

    yaml

    复制

    hikari:
      max-lifetime: 540000
      idle-timeout: 60000
      connection-timeout: 30000
      minimum-idle: 10
      maximum-pool-size: 150

通过以上配置,可以确保 MySQL 和 HikariCP 的参数设置是合理的,避免连接被关闭或连接池使用无效连接的问题。

wait_timeout 和 interactive_timeout 通常需要同时设置,因为它们分别控制不同类型的连接空闲超时时间。以下是具体原因和建议:


1. wait_timeout 和 interactive_timeout 的区别

  • wait_timeout:

    • 适用于非交互式连接(如通过 JDBC、ODBC 等程序连接的客户端)。

    • 控制连接在空闲状态下的最大存活时间。

  • interactive_timeout:

    • 适用于交互式连接(如通过 MySQL 命令行客户端或 PHPMyAdmin 等工具连接的客户端)。

    • 控制连接在空闲状态下的最大存活时间。


2. 为什么要同时设置?

  • 如果只设置 wait_timeout,交互式连接的空闲超时时间仍然会使用默认的 interactive_timeout 值。

  • 如果只设置 interactive_timeout,非交互式连接的空闲超时时间仍然会使用默认的 wait_timeout 值。

  • 为了确保所有类型的连接都遵循相同的空闲超时规则,建议同时设置这两个参数。


http://www.kler.cn/a/556737.html

相关文章:

  • 如何在WPS打开的word、excel文件中,使用AI?
  • 如何利用 Vue 的生命周期钩子进行初始化和清理操作?
  • DeepSeek接入Siri(已升级支持苹果手表)完整版硅基流动DeepSeek-R1部署
  • AGI觉醒假说的科学反驳:从数学根基到现实约束的深度解析
  • 计算机网络基础杂谈(局域网、ip、子网掩码、网关、DNS)
  • DeepSeek与Grok:AI语言模型的全面对决
  • llama-factory部署微调方法(wsl-Ubuntu Windows)
  • 计算机毕业设计Python考研院校推荐系统 考研分数线预测 考研推荐系统 考研可视化(代码+LW文档+PPT+讲解视频)
  • Linux-CentOS Firewall操作
  • 改进收敛因子和比例权重的灰狼优化算法【期刊论文完美复现】(Matlab代码实现)
  • matlab 海浪模型和舰艇动力学模型
  • 在windows下安装windows+Ubuntu16.04双系统(下)
  • 解决 Ubuntu 中 Docker 安装时“无法找到软件包”错误
  • 人工智能任务23-天文领域的超亮超新星能源机制结合深度神经网络的研究方向
  • 什么是超越编程(逾编程)(元编程?)
  • C++初阶——简单实现vector
  • 数据结构之【顺序表简介】
  • 出行项目案例
  • Ubuntu24.04LTS的下载安装超细图文教程(VMware虚拟机及正常安装)
  • 【Python爬虫(34)】Python多进程编程:开启高效并行世界的钥匙