目录

背景

mysql相关参数查看与设置命令说明

理论大小

线程缓存参数说明

优化配置信息

查看系统最大连接数


背景

项目中可能会遇到MySQL: ERROR 1040: Too many connections”的异常情况,造成这种情况的一种原因是访问量过高,MySQL服务器抗不住,这个时候就要考虑增加从服务器分散读压力;另一种原因就是MySQL配置文件中max_connections值过小。

mysql相关参数查看与设置命令说明

    -- 查询数据库当前设置的最大连接数  mysql> show variables like '%max_connections%';  +-----------------+-------+  | Variable_name   | Value |  +-----------------+-------+  | max_connections | 100  |  +-----------------+-------+  -- 查看最大连接数    mysql> show global status like 'Max_used_connections%';+---------------------------+---------------------+| Variable_name             | Value               |+---------------------------+---------------------+| Max_used_connections      | 817                 || Max_used_connections_time | 2022-06-13 16:28:40 |+---------------------------+---------------------+这两个状态说的是MYSQL SERVER自上次启动起来 最大连接数量和发生的时间。-- 配置mysql最大连接数mysql> set global max_connections=700; -- 查询服务器 thread_cache_size 配置mysql> show variables like 'thread_cache_size';-- 设置线程缓存数量mysql> set global thread_cache_size=100;     -- 查看线程信息mysql> show status like 'Threads%';  +-------------------+-------+  | Variable_name     | Value |  +-------------------+-------+  | Threads_cached    | 58    |   ###表示是缓冲池中的线程个数| Threads_connected | 57    |   ###这个数值指的是打开的连接数  | Threads_created   | 3676  |   ###表示创建过的线程数,如果发现Threads_created值过大的话,表明MySQL服务器一直在创建线程,这是比较耗资源,可以适当增加配置文件中thread_cache_size值。| Threads_running   | 4     |   ###这个数值指的是激活的连接数,这个数值一般远低于connected数值  +-------------------+-------+  -- Threads_connected 跟show processlist结果相同,表示当前连接数。准确的来说,Threads_running是代表当前并发数  -- 查看全局每个用户最大连接数mysql> show variables like 'max_user_connections';+----------------------+-------+| Variable_name        | Value |+----------------------+-------+| max_user_connections | 0     |+----------------------+-------+默认情况值为 0。代表:不限制用户资源的。-- 设置全局每个用户最大连接数mysql> set global max_user_connections=1;

理论大小

对于mysql服务器最大连接数值的设置范围比较理想的是:服务器响应的最大连接数值占服务器上限连接数值的比例值在10%以上,如果在10%以下,说明mysql服务器最大连接上限值设置过高.

Max_used_connections / max_connections * 100% = 3/512 *100% ≈ 0.0058%

我们可以看到占比远低于10%(因为这是本地监控测试服务器,结果值没有太大的参考意义,大家可以根据实际情况设置连接数的上限值)。

max_used_connections / max_connections * 100% (理想值≈ 85%) 

如果max_used_connections跟max_connections相同 那么就是max_connections设置过低或者超过服务器负载上限了,低于10%则设置过大。

MySQL的max_connections参数用来设置最大连接(用户)数。每个连接MySQL的用户均算作一个连接。

MySQL无论如何都会保留一个用于管理员(SUPER)登录的连接,用于管理员连接数据库进行维护操作,即使当前连接数已经达到了max_connections。因此MySQL的实际最大可连接数为max_connections+1;
这个参数实际起作用的最大值(实际最大可连接数)为16384,即该参数最大值不能超过16384,即使超过也以16384为准;
增加max_connections参数的值,不会占用太多系统资源。系统资源(CPU、内存)的占用主要取决于查询的密度、效率等;
该参数设置过小的最明显特征是出现”Too many connections”错误;

线程缓存参数说明

thread_cache_size:当客户端断开之后,服务器处理此客户的线程将会缓存起来以响应下一个客户,而不是销毁(前提是缓存数未达上限)。

即可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能。

如果是短连接,适当设置大一点,因为短连接往往需要不停创建,不停销毁,如果大一点,连接线程都处于取用状态,不需要重新创建和销毁,所以对性能肯定是比较大的提升。

对于长连接,不能保证连接的稳定性,所以设置这参数还是有一定必要,可能连接池的问题,会导致连接数据库的不稳定性,也会出现频繁的创建和销毁,但这个情况比较少,如果是长连接,可以设置成小一点,一般在50-100左右。

物理内存设置规则:通过比较Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。

优化配置信息

#修改mysql配置文件my.cnf,在[mysqld]段中添加或修改max_connections值:
#最大连接数
max_connections=512
#超时等待时间
wait_timeout=300
#最大线程缓存数
thread_concurrency=100

重启mysql服务即可。

总体来说,该参数在服务器资源够用的情况下应该尽量设置大,以满足多个客户端同时连接的需求。否则将会出现类似”Too many connections”的错误。

查看系统最大连接数

临时修改

ulimit -n 1024

永久修改

vi /etc/security/limits.conf

优化步骤:

1.查看max_connection和thread_concurrency是否和你的数据库连接池配置对应

2.适当调大参数测试,直到充分利用系统资源

mysql最大连接1000-2000

hread_concurrency在短连接多时,大于200;长连接多时100以内。

最佳参数还需要自己压力测试。

一般mysql错误,可以查看log.err文件,需要在my.cof指定错误日志保存路径

本文来自:Mysql 连接数,最大并发数设置 - 周伯通之草堂 - 博客园

mysql 之 设置最大连接数问题相关推荐

  1. golang mysql大量连接_golang mysql 如何设置最大连接数和最大空闲连接数

    本文介绍golang 中连接MySQL时,如何设置最大连接数和最大空闲连接数. 关于最大连接数和最大空闲连接数,是定义在golang标准库中database/sql的. 文中例子连接MySQL用的SQ ...

  2. golang mysql 如何设置最大连接数和最大空闲连接数

    本文介绍golang 中连接MySQL时,如何设置最大连接数和最大空闲连接数. 关于最大连接数和最大空闲连接数,是定义在golang标准库中database/sql的. 文中例子连接MySQL用的SQ ...

  3. mysql设置最大连接数

    1.mysql初始默认支持的最大连接数为151(目前我本地安装的mysql默认大小,可能不准确) 2.一般情况下,我们可能需要mysql支持更多的连接数,比如说200,那么我们按照以下步骤进行设置 第 ...

  4. mysql 设置最大连接数

    1.查看当前最大连接数 show variables like "%max_connection%" 2.设置临时最大连接数9999(临时设置最大连接数,重启后失效) set gl ...

  5. mysql 配置文件设置最大链接数 max_connections不生效

    mysql 配置文件设置最大链接数 max_connections不生效 文章目录 mysql 配置文件设置最大链接数 max_connections不生效 参考链接 1.临时设置最大链接数为1000 ...

  6. MySql中设置时区为东八区

    在mysqld下新增配置  default-time-zone = '+8:00' 然后重启mysql服务:windows下管理员身份启动cmd ,net stop mysql :  net star ...

  7. windows下修改mysql时区设置

    root身份登录MySQL mysql -u root -p 查看time_zone变量 show variables like '%time_zone%'; 显示'%time_zone%'变量; 设 ...

  8. mysql关于时间的面试题,mysql时间设置默认值MySQL常见面试题

    1.limit(选出10 到20 条) select * from students order by id limit 9,10; 2.MySQL 会使用索引的操作符号 =,>,=,betwe ...

  9. Mysql中设置默认时间为当前值

    1.直接在创建表时添加该列并声明默认值,如下: CREATE TABLE `table1` (`id` int(11) NOT NULL,`createtime` timestamp NULL def ...

最新文章

  1. 是谁卖了我的信息资料?
  2. 另辟蹊径,中科院自动化所等首次用图卷积网络解决语义分割难题
  3. python自动化测试判断方法_python接口自动化测试之根据excel中的期望结果是否存在于请求返回的响应值中来判断用例是否执行成功...
  4. Windows7 网上邻居设置
  5. c++ 基本排序算法学习
  6. @GetMapping和@PostMapping详解
  7. oppo刷机工具_黔隆科技刷机教程OPPOR9TM忘记密码免刷机保资料解屏幕锁教程
  8. 无法从服务器获得响应,什么是java.io.EOFException的,消息:无法从服务器读取响应。 预期读4个字节,...
  9. 初中节点法分析电路_有关初中物理电路分析题的一些小技巧
  10. 安卓ashmem(匿名共享内存映射)学习native篇
  11. Java字符串首字母大写
  12. 平稳时间序列以及MATLAB相关工具箱学习笔记
  13. 机器人建图算法1、基础的地图结构和建图类型
  14. mysql查询数据教程_mysql数据库的查询
  15. Java图像识别技术:Test4J
  16. 玉米社:百度竞价关键词“否定”与“精确否定”的区别
  17. 2021-06-05 高效的wms仓储管理系统是关键
  18. 开题报告写作攻略--概述及国内外研究现状
  19. 小学计算机室行事周历,关于小学信息技术教案八篇
  20. 提升页面转化率100招

热门文章

  1. 将数据库数据导入Excel表格
  2. 【Python】第四章(文件操作)综合练习
  3. leetcode 编译错误member access within null pointer of type ‘TreeNode‘
  4. 取代数仓!就在刚刚,公司宣布1年内完成向数据中台的迁移…
  5. pc连不上iphone热点_如何使用iPhone的个人热点来绑定PC或Mac
  6. 组装电脑基础知识之固态硬盘
  7. 运维日记014 - RHEL6启动及初始化相关总结
  8. 物流管理需求概要图和脑图
  9. MuseScore 的编译
  10. .net开发 C盘空间不足问题