使用Percona MySQL 5.7版本遇到的坑
监控DB由于使用的TokuDB引擎,因此选择使用Percona MySQL 5.7版本,在使用过程中遇到了比较多的坑,在这里做一下简单的记录,希望对广大DBA有帮助。
load文件飙升导致的DB雪崩
在上层机器(mqproxy)出问题的时候,会导致load文件飙升,导致监控DB大量的load线程堆积,造成监控DB雪崩,比如2月15号的一次异常:

DB雪崩的时候有大量的load线程堆积,并且机器的写入性能之前下降,直到超过最大连接数,业务无法访问。
这种场景的解决办法有两个:
1、业务上层进行控制,对DB进行保护,控制load的线程数或者文件数
2、DB启用线程池,控制DB并发load的线程数
目前DB已经完成2的改造,1的改造也正在进行中。
使用线程池内存问题
出于对DB做保护,我们准备在监控DB启用线程池功能。为了安全起见,先在从机启用,并进行持续观察,在观察的过程中发现在启用了线程池以后,内存飙升了8G左右,如下图:

不但启用线程池后内存飙升了8G左右,而且内存还在持续增长,很明显启用线程池后存在内存泄漏了。
这个问题在网上也有不少的人遇到,确认是percona的bug导致(https://jira.percona.com/browse/PS-3734),只有开启Performance_Schema和ThreadPool的时候才会出现,解决办法是关闭Performance_Schema即可,具体操作方法是在配置文件添
加performance_schema=off
然后重启MySQL就OK。下面是关闭PS后的内存使用情况对比:

线程池启用后的高可用探测问题
在描述问题之前,先来描述一下线程池是如何分配连接和控制的:
线程池会根据参数thread_pool_size的大小分成若干的group,每个group各自维护客户端发起的连接,当客户端发起连接到MySQL的时候,MySQL会跟进连接的线程id(thread_id)对thread_pool_size进行去模,从而落到对应的group。thread_pool_oversubscribe参数控制每个group的最大并发线程数,每个group的最大并发线程数为thread_pool_oversubscribe+1个,若对应的group达到了最大的并发线程数,则对应的连接就需要等待。
在线上配置了几组机器使用线程池后,发现有1组机器发生自动切换,排查了机器的负载、MySQL错误日志、操作系统日志、高可用日志以后,确定是由于启用线程池问题导致,具体的原因描述如下:
启用线程池以后,相当于限制了MySQL的并发线程数,当达到最大线程数的时候,其他的线程需要等待,新连接也会卡在连接验证那一步,这时候会造成拨测程序连接MySQL超时,拨测程序连接实例超时后,就会认为master已经出现问题,从而启动自动切换的操作,将业务切换到从机。
这种情况有两种解决办法:
1、启用MySQL的旁路管理端口,监控和高可用相关直接使用MySQL的旁路管理端口
具体做法为是在my.cnf中添加如下配置后重启,就可以通过旁路端口登录MySQL了,不受线程池最大线程数的影响:
extra_max_connections = 8
extra_port = 33333
备注:建议启用线程池后,这个也添加上,方便紧急情况下进行故障处理。
2、修改高可用探测脚本,将达到线程池最大活动线程数返回的错误做异常处理,类似于当作超过最大连接数的场景(备注:超过最大连接数只告警,不进行自动切换)
监控这边选择了解决方法2,因为这种方式改动量最小。
简单总结
以上就是最近使用Percona MySQL时候遇到的几个问题,通过这几个问题概括出几个需要广大DBA们注意的事情:
1、上层应该对DB进行保护,防止DB出现雪崩
2、在上新功能的时候,一定记得灰度、灰度、灰度
3、灰度的时候,注意密切观察线上DB的性能指标(内存、性能、IO以及其他和变更相关的指标)
4、综合考虑各种解决方案,选择最适合的方案
作者:飞鸿无痕
链接:https://www.jianshu.com/p/33a0997ced0e
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
使用Percona MySQL 5.7版本遇到的坑的更多相关文章
- PHP 5.6连接MySQL 8.0版本遇到的坑
一.数据库失败Warning: mysqli_connect(): The server requested authentication method unknown to t... <?ph ...
- 三种方法查看MySQL数据库的版本
1.使用-V参数 首先我们想到的肯定就是查看版本号的参数命令,参数为-V(大写字母)或者--version 使用方法: D:\xampp\mysql\bin>mysql -V 或者 D:\xam ...
- MySQL 8.0版本连接报错:Could not create connection to database server.
准备搭建一个Spring Boot 组合mybatis的项目,数据库采用的是MySQL 8.0.11按照以往的配置,使用插件mybatis-generator-maven-plugin生成代码时,一直 ...
- MySQL Server8.0版本时出现Client does not support authentication protocol requested by server
MySQL Server8.0版本时出现Client does not support authentication protocol requested by server 解决方法: 1.roo ...
- MySQL JDBC驱动版本与MySQL数据库版本对应关系
前言:前段时间发现在家使用和公司一样的mysql jdbc驱动版本发生了异常,原因:家里mysql数据库版本与公司不一致导致.查询了相关资料,发现mysql jdbc驱动版本与mysql数据库版本有一 ...
- 《转》MySQL 5.7版本新特性连载
MySQL 5.7版本新特性连载(一) 本文将和大家一起分享下5.7的新特性,不过我们要先从即将被删除的特性以及建议不再使用的特性说起.根据这些情况,我们在新版本及以后的版本中,应该不再使用,避免未来 ...
- InnoSQL HA Suite的实现原理与配置说明 InnoSQL的VSR功能Virtual Sync Replication MySQL 5.5版本引入了半同步复制(semi-sync replicaiton)的功能 MySQL 5.6支持了crash safe功能
InnoSQL HA Suite的实现原理与配置说明 InnoSQL的VSR功能Virtual Sync Replication MySQL 5.5版本引入了半同步复制(semi-sync repl ...
- Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本)
Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本) Hive 安装依赖 Hadoop 的集群,它是运行在 Hadoop 的基础上. 所以在安装 Hive 之 ...
- 查看Linux 、Nginx、 MySQL 、 PHP 版本的方法
参考:查看Linux .Apache . MySQL . PHP 版本的方法 1.查看Linux版本: uname -a: more /etc/issue; cat /proc/version; 2. ...
随机推荐
- 全连接层(FC)与全局平均池化层(GAP)
在卷积神经网络的最后,往往会出现一两层全连接层,全连接一般会把卷积输出的二维特征图转化成一维的一个向量,全连接层的每一个节点都与上一层每个节点连接,是把前一层的输出特征都综合起来,所以该层的权值参数是 ...
- 02-python基本数据类型
python的变量不需要声明, 但变量使用前必须复制, 因为python中所有的内容全部是对象 变量是没有类型的, 有类型的是指向内存对象的类型 a = ' a = 是合法的 此外, python还可 ...
- DC综合及仿真验证和DFT测试
综合技术是提高设计产能的一个很重要的技术,没有综合技术的发展就不可能用HDL实现电路的设计,因为HDL开始是用来供电路仿真建模使用的,到了后来才把其中一部分子集作为可综合的语言,也就是R ...
- json 只能用 for-in 遍历
[JS] var json1 = { 'name' : 'yy' , 'age' : 11 , 'fun' : '前端开发' }; for( var attr in json1 ) { alert( ...
- MyEclipse2014破解方法
之前一直使用的MyEclipse2014过期了,无奈之下只能在网上搜怎么破解,结果很管用,在这里记录并和大家分享 https://jingyan.baidu.com/article/fdbd42771 ...
- Fiddler——PC上实现手机的抓包(转载 http://www.jianshu.com/p/13f8a81d7c7c)
Fiddler是15年初,在千牛中做超级促销插件时,发现没有root的Android机和没有越狱的iPhone无法修改host,因此没办法测试.为了让我这个磨人的PD也能看到,开发推荐了Fiddler ...
- Hadoop提交作业流程
一 .需要知道的内容 1.ResourceManager ------>yarn的老大 2.NodeManager ------>yarn的小弟 3.ResourceMana ...
- [CQOI 2018]解锁屏幕
Description 题库链接 给出平面上 \(n\) 个点,一开始你可以选任何一个点作为起点,接着对于每一个你在的位置,你可以选取一个未走过的点.将路径(线段)上所有的点均选上(包括起点终点),并 ...
- Linux下的MongoDB安装&启动&关闭
一.下载安装包 下载地址 二.解压安装包 $ tar -zxvf mongodb-linux-x86_64-3.0.6.tgz 三.复制到指定的目录下 $ mv mongodb-linux-x86_6 ...
- 使用ms owin 搭建oauth2 server
http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server 有示例代码 关于token的 ...