万答#3,MGR最佳配置参考,PFS里的监测指标要全开吗,mysqld进程占用内存过高怎么排查
- GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
问题1,有推荐的MGR运行最佳配置参考吗
在「3306π」社区广州站5月22日的分享会上,万里数据库CTO娄帅给出了他建议的配置参考,我们一起来看下:
group_replication_single_primary_mode=ON
log_error_verbosity=3
group_replication_bootstrap_group=OFF
group_replication_transaction_size_limit=<默认值150MB,但建议调低在20MB以内,不要使用大事务>
group_replication_communication_max_message_size=10M
group_replication_flow_control_mode=OFF #官方版本的流控机制不太合理,其实可以考虑关闭
group_replication_exit_state_action=READ_ONLY
group_replication_member_expel_timeout=5 #如果网络环境不好,可以适当调高
另外,使用MGR的其他建议有:
只是用InnoDB表。
每个表都必须要有主键。
节点数采用奇数。
保证网络可靠性,低延迟环境,不要跨城部署(一般建议网络延迟低于1ms)。
使用单主模式。
BINLOG_FORMAT=ROW。
更多关于MGR的最佳使用实践,可以关注「3306π」社区公众号(pai3306),获取娄帅老师本次分享内容。
问题2,MySQL Performance Schema都建议开启哪些监控采集指标(除了默认自动开启的指标)
先说我的看法:一般建议只开启锁(Lock)监控相关的监测指标。
# 开启MDL监测指标
mysql> CALL sys.ps_setup_enable_instrument('wait/lock/metadata/sql/mdl');
# 开启全部Lock相关监测指标
mysql> CALL sys.ps_setup_enable_instrument('%lock%');
其余的监测指标,例如Memory、Statement、Transaction等,有必要再临时开启。因为从MySQL 5.7开始,PFS支持在线动态开启和关闭,因此非必要的话,不建议一口气全开。
一般而言,PFS里的监测指标全开的话,对性能影响一般5%左右,内存消耗1G左右,整体还是可控的。
已知的问题是在Percona分支版本中,如果同时开启PFS和线程池后,很容易发生OOM。
小结:
需要的话,可以全开。
对性能影响有限。
但还是建议只开锁监控相关的。
问题3,mysqld进程占用内存过高怎么排查
遇到一个比较极端的案例,innodb_buffer_pool_size 值仅设置为2GB,但是mysqld进程却占用了25GB的内存。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
45305 mysql 20 0 28.4g 25g 8400 S 48.5 81.4 64:46.82 mysqld
后面会有专门的文章介绍详细分析排查过程,这里先直接说可能的原因以及解决方案。
可能的原因
1、session(会话)级内存buffer参数设置过高,并且连接数也设置过高,例如
read_buffer_size = 64M
read_rnd_buffer_size = 32M
sort_buffer_size = 64M
join_buffer_size = 64M
tmp_table_size = 1G
max_heap_table_size = 1G
max_connections=2000
当连接数较少时,需要消耗的内存并不多。
但是当遇到突发流量时,可能并发连接数会接近打满,再加上可能有产生临时表、额外排序的低效率的SQL频繁出现,这就很容易导致内存占用快速增长。
因此建议调低session级buffer参数值,并有效控制并发连接数,下面是一个比较通用的设置值参考:
read_buffer_size = 4M
read_rnd_buffer_size = 4M
sort_buffer_size = 4M
join_buffer_size = 4M
tmp_table_size = 32M
max_heap_table_size = 32M
max_connections = 512
2、PFS中开启过多检测指标,造成内存消耗过大。
在上面也提到过,全部开启PFS后,可能需要大约1GB内存。不过在高并发并伴随频繁低效SQL的情况下,可能需要消耗更多内存。
3、可能还用到MyISAM引擎,并且 key_buffer_size 设置过大。
不过现在MyISAM引擎大家一般用得也比较少了。
4、程序内存泄漏风险。
可以用valgrind工具检验是否存在这个问题,如果确定的话,可以考虑升级MySQL版本,或者定期在维护时间重启mysqld实例,或者通过高可用切换方式将有风险的实例重启。
5、glibc的内存管理器自身缺陷导致。
简言之,就是调用glibc申请的内存使用完毕后,归还给OS时没有被正常回收,而变成了碎片,随着碎片的不断增长,就能看到mysqld进程占用的内存不断上升。这时候,我们可以调用函数主动回收释放这些碎片。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
45305 mysql 20 0 28.4g 25g 8400 S 48.5 81.4 64:46.82 mysqld
[root@mysql#] gdb --batch --pid `pidof mysqld` --ex 'call malloc_trim(0)'
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
45305 mysql 20 0 28.4g 5.2g 8288 S 2.7 17.0 64:56.82 mysqld
这就像是在InnoDB表中产生太多碎片后,我们主动执行 OPTIMIZE TABLE 重建表的做法。
Enjoy MySQL
本文由博客一文多发平台 OpenWrite 发布!
万答#3,MGR最佳配置参考,PFS里的监测指标要全开吗,mysqld进程占用内存过高怎么排查的更多相关文章
- 实战| 配置DataDog监控Apache Hudi应用指标
1. 可用性 在Hudi最新master分支,由Hudi活跃贡献者Raymond Xu贡献了DataDog监控Hudi应用指标,该功能将在0.6.0 版本发布,也感谢Raymond的投稿. 2. 简介 ...
- 万答#12,MGR整个集群挂掉后,如何才能自动选主,不用手动干预
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 本文转载自微信公众号"老叶茶馆" MGR整个集群挂掉后,如能 ...
- 万答#15,都有哪些情况可能导致MGR服务无法启动
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 本文转载自微信公众号 "老叶茶馆" 欢迎大家关注! 1.都有 ...
- 万答#11,MySQL中char与varchar有什么区别
万答#11,MySQL中char与varchar有什么区别 1.实验场景 GreatSQL 8.0.25 InnoDB 2.实验测试 2.1 区别 参数 char varchar 长度是否可变 定长 ...
- #万答10:mysqldump 是如何实现一致性备份的
万答10:mysqldump 是如何实现一致性备份的 实验场景 MySQL 8.0.25 InnoDB 实验步骤: 先开启 general_log 观察导出执行过程的变化 set global gen ...
- 万答#21,如何查看 MySQL 数据库一段时间内的连接情况
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 查看方式 已知至少有两种方式可以实现 1.开启 general_log 就可以观察到 开启命令 mysql> set ...
- 万答#1,MySQL中如何查询某个表上的IS(意向共享)锁
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 问题 问题原文是这样的: 假如在MySQL事务里,给某个表的一行加了 共享锁,理 ...
- Filebeat配置参考手册
Filebeat的配置参考 指定要运行的模块 前提: 在运行Filebeat模块之前,需要安装并配置Elastic堆栈: 安装Ingest Node GeoIP和User Agent插件.这些插件需要 ...
- RHEL/CentOS通用性能优化、安全配置参考
RHEL/CentOS通用性能优化.安全配置参考 本文的配置参数是笔者在实际生产环境中反复实践总结的结果,完全适用绝大多数通用的高负载.安全性要求的网络服务器环境.故可以放心使用. 若有异议,欢迎联系 ...
随机推荐
- 144_Power Pivot贷款之等额本息与等额本金
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 买房贷款的时候会遇到等额本息与等额本金的问题,今天做了一个两者对比,看看如何选择,来一张对比图. 等额本息的前期 ...
- CXP 协议中upconnection 与downconnection的说明及其区别
概述 CXP定义了一个DEVICE和HOST之间点对点的连接协议.CXP的一个连接包含了一个MASTER物理连接和若干可选的SLAVE连接,每一个连接都定义了一组逻辑通道用于传输图像数据.实时触发.设 ...
- JS:&&运算符
&&逻辑运算符 当&&连接语句时,两边的语句会转化为布尔类型 1.两边条件都为true时,结果才为true: 2.如果有一个为false,结果就为false: 3.当第 ...
- SQL注入漏洞篇
一篇SQL注入漏洞汇总,更新中-- 如有缺陷 望大佬指正 SQL注入产生的原因? 当程序执行逻辑时没有对用户输入的参数做过滤处理,使参数直接与后台数据库产生逻辑交互,即SQL注入黑客就可以利用各种SQ ...
- 【python基础】第07回 运算符和流程控制 2
本章内容概要 1.逻辑运算符补充 2.循环结构 本章内容详解 1.逻辑运算符补充 两边都不为0的情况 or 直接取前面的值 and 直接取后面的值如果存在0的情况 and 直接取0 or 直接取非0 ...
- java常见的面试题(一)
1.Collection 和 Collections 有什么区别? Collection 是一个集合接口(集合类的一个顶级接口).它提供了对集合对象进行基本操作的通用接口方法.Collection接口 ...
- [BJDCTF2020]The mystery of ip|[CISCN2019 华东南赛区]Web11|SSTI注入
记录一下BUUCTF中两个类似的SSTI注入关卡 [BJDCTF2020]The mystery of ip-1: 1.打开之后显示如下: 2.在hint.php中进行了相关提示,如下: 3.既然获取 ...
- Java ArrayList和LinkedList
目录 集合的概念 集合体系结构 常用list集合 list集合的特点 ArrayList LinkedList 创建对象 常用方法 遍历 ArrayList和LinkedList的区别 集合的概念 ...
- XML方式配置切面
1. 概述 一个切面中需要包含什么,才能够作用到连接点?切面中是包含通知的,通知作用到连接点需要有切入点表达式. 除了使用AspectJ注解声明切面,Spring也支持在bean配置文件中声明切面. ...
- 159_模型_Power BI 地理分析之形状地图
159_模型_Power BI 地理分析之形状地图 声明以下地图元素仅供学习交流所用,如需地图公开使用请提前做好报审工作. 一.背景 当企业的体量达到一定体量的时候,保持稳定的增长是非常重要的事情.本 ...