MySQL ERROR 1040: Too many connections
如题,本章主要讲下当服务器出现 ERROR 1040: Too many connections错误时的一些处理心得。
max_connections查看
## 查看最大连接数
SHOW VARIABLES LIKE "max_connections";
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 512 |
+-----------------+-------+ ## 查看已使用最大连接数
SHOW VARIABLES LIKE 'Max_used_connections';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| Max_used_connections | 499 |
+----------------------+-------+
处理方案
这个问题一般有两种处理方案,解决方案非常容易,我们只需要增加max_connections连接数即可。
增加当前会话的mysql最大连接数
SET GLOBAL max_connections = 1000;
上面mysql连接值临时增加到1000,但仅适用于当前会话。一旦我们重新启动mysql服务或重新启动系统,该值将重置为默认值。
永久增加mysql最大连接数
为了永久增加mysql连接数,我们需要编辑mysql配置文件,即/etc/my.cnf。
sudo vim /etc/my.cnf
## 修改
max_connections = 1000
保存文件重启MySQL即可生效。
扩多少合适?
Max_connextions并不是越大越好的,那么如何配置?
方式一
对于提高MySQL的并发,很大程度取决于内存,官方提供了一个关于innodb的内存计算方式:
innodb_buffer_pool_size
+ key_buffer_size
+ max_connections * (sort_buffer_size + read_buffer_size + binlog_cache_size)
+ max_connections * 2MB
方式二
安装比例扩容:
max_used_connections / max_connections * 100% = [85, 90]%
最大使用连接数/最大连接数达到了80%~90%区间,就建议进行优化或者扩容了。
扩展
以下也涉及几种常见的影响MySQL性能的情况:
线程
SHOW STATUS LIKE 'Threads%';
+-------------------+--------+
| Variable_name | Value |
+-------------------+--------+
| Threads_cached | 1 |
| Threads_connected | 217 |
| Threads_created | 29 |
| Threads_running | 88 |
+-------------------+--------+ SHOW VARIABLES LIKE 'thread_cache_size';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| thread_cache_size | 10 |
+-------------------+-------+
- Threads_cached 线程在缓存中的数量
- Threads_connected 当前打开的连接数
- Threads_created 创建用于处理连接的线程数。
- Threads_running 未休眠的线程数
如果Threads_created大,则可能要增加thread_cache_size值。缓存未命中率可以计算为Threads_created / Connections
查看表锁情况
SHOW GLOBAL STATUS LIKE 'table_locks%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Table_locks_immediate | 90 |
| Table_locks_waited | 0 |
+-----------------------+-------+
- Table_locks_immediate 立即获得表锁请求的次数
- Table_locks_waited 无法立即获得对表锁的请求的次数,需要等待。这个值过高说明性能可能出现了问题,并影响连接的释放
慢查询
show variables like '%slow%'; +---------------------------+----------------------------------------------+
| Variable_name | Value |
+---------------------------+----------------------------------------------+
| slow_launch_time | 2 |
| slow_query_log | On |
+---------------------------+----------------------------------------------+
线程详情
## 查看每个线程的详细信息
SHOW PROCESSLIST;
+--------+----------+------------------+--------------+---------+-------+-------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+--------+----------+------------------+--------------+---------+-------+-------------+------------------+
| 3 | xxxadmin | localhost | NULL | Sleep | 1 | cleaning up | NULL |
| 4 | xxxadmin | localhost | NULL | Sleep | 0 | cleaning up | NULL |
| 5 | xxxadmin | localhost | NULL | Sleep | 6 | cleaning up | NULL |
+--------+----------+------------------+--------------+---------+-------+-------------+------------------+
总结
当然,以上只是一个大概的解决思路,无论使用哪一种方式,都需要结合实际业务场景去扩容。
另外,对于生产环境,设置恰当的告警阈值,也是很有必要的。
最后,在编程时,由于用MySQL语句调用数据库执行SQL,会分配一个线程操作MySQL,所以在结束调用后,需要回收连接,避免泄漏。
参考文章
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_max_connections
https://dev.mysql.com/doc/refman/5.7/en/server-status-variables.html
https://dev.mysql.com/doc/refman/8.0/en/memory-use.html
MySQL ERROR 1040: Too many connections的更多相关文章
- Go连接MySql数据库Error 1040: Too many connections错误解决
原文:https://my.oschina.net/waknow/blog/205654 摘要: 使用Go链接数据库时,由于连接释放不当会在一段时间以后产生too many connections的错 ...
- mysql 1040 连接数太多 mysql Error 1040 too many connection解决办法
近在用SpringMVC开发的时候,突然出现1040 too many connection的错误,看错误的意思是连接的人数太多了.百度经验:jingyan.baidu.com 方法/步骤 1 当 ...
- max_connections 与 max_used_connections --ERROR 1040: Too many connections
mysql> show variables like 'max_connections'; +-----------------+-------+ | Variable_name | Value ...
- Mysql连接数太多ERROR 1040 (HY000): Too many connections
数据库连接报错:ERROR 1040 (HY000): Too many connections 1.查看连接数 /usr/local/mysql/bin/mysqladmin -h host - ...
- 【已解决】mysql连接出错:ERROR 1040 (HY000): Too many connections
连接mysql,结果出错: ? 1 ERROR 1040 (HY000): Too many connections 去修改mysql的配置文件,然后添加: ? 1 2 3 4 5 6 7 8 9 1 ...
- mysql 链接数满了的错误 ERROR 1040 (HY000): Too many connections
mysql 链接数满了的错误 ERROR 1040 (HY000): Too many connections 第一种处理方式: ./mysql -u root -p 登录成功后执行以下语句查询当前的 ...
- ERROR 1040 (08004): Too many connections
ERROR 1040 (08004): Too many connections 长期一来,mysql低版本中,当面对连接数陡增而出现too many connections时,往往比较棘手.今天特意 ...
- ERROR 1040 (HY000) Too many connections
C:\Users\Jilil>mysql -u root -pEnter password: *************ERROR 1040 (HY000): Too many connecti ...
- [翻译]:MySQL Error: Too many connections
翻译:MySQL Error: Too many connections 前言: 本文是对Muhammad Irfan的这篇博客MySQL Error: Too many connections的 ...
随机推荐
- Java_三大特征相关
重写 子类通过重写父类的方法, 可以用自身的行为替换父类的行为 重写的三个要点: "==" :方法名, 形参列表, 返回值类型相同 "<=" : 返回值类 ...
- Mybatis 批量更新遇到的小问题
小问题 记一个开发过程中因为小细节的遗漏而引发的 "莫名其妙",公司中有个2B(to B)供应链项目,持久层用的是 JPA,这里我就不吐槽 JPA 了,这种 SQL 嵌入在代码里的 ...
- UGC
文章目录 4 UGC推荐 4.1 基于用户UGC标签进行推荐 4.1.1 最简单的算法(SimpleTagBased) 4.1.2 利用 ...
- python数据分析01准备工作
第1章 准备工作 1.1 本书的内容 本书讲的是利用Python进行数据控制.处理.整理.分析等方面的具体细节和基本要点.我的目标是介绍Python编程和用于数据处理的库和工具环境,掌握这些,可以让你 ...
- 【笔记】nrf52832广播使用--厂商自定义数据应用
需求: 1)使用蓝牙不停发送ble广播,发送自定义的数据,并每一秒更新自定义数据. 2)设置不同的发射功率.广播间隔.广播名称 1.初始化 使用nordic官方sdk17版本,打开一个ble串口用例. ...
- 什么是麒麟(kylin)?查数据贼快的哟
前言 微信搜[Java3y]关注这个有梦想的男人,点赞关注是对我最大的支持! 文本已收录至我的GitHub:https://github.com/ZhongFuCheng3y/3y,有300多篇原创文 ...
- 聊一聊无锁队列rte_ring
之前用基于dpdk 实现小包快速转发的时候有用到无锁队列!今天就来看看吧!(后续完成了去dpdk化,直接在内核完成快速转发功能) dpdk的无锁队列ring是借鉴了linux内核kfifo无锁队列.r ...
- 1. 线性DP 120. 三角形最小路径和
经典问题: 120. 三角形最小路径和 https://leetcode-cn.com/problems/triangle/ func minimumTotal(triangle [][]int) ...
- ip rule 策略路由
1. 工具安装 yum install iproute 查看工具是否安装 ip -V 2. ip rule 和 ip route ip命令中和策略路由相关的OBJECT有 rule 和 route. ...
- 四:Redis五大数据类型
Redis的五大数据类型 1.string(字符串) string是Redis最基本的类型,你可以理解成与menmcached一模一样的类型,一个key对应一个value string类型是二进制安全 ...