mysql内存占用过高的问题

现象:在mysql运行一天之后,发现内存占用量达到总内存的百分之77,且swap被占用百分之50

问题检查如下:

第一步:开启内存使用的监控服务

mysql> UPDATE performance_schema.setup_instruments SET ENABLED = 'YES' WHERE NAME LIKE 'memory/%';
 
 
禁用方法:
mysql> UPDATE performance_schema.setup_instruments SET ENABLED = 'NO' WHERE NAME LIKE 'memory/%';
 
查看方法:
mysql> select * from performance_schema.setup_instruments where NAME like 'memory%' and NAME not like 'memory/performance_schema%';
 
mysql> select * from performance_schema.setup_instruments where NAME like 'memory%';

第二步: 查看正常实例的使用情况

mysql> select USER,HOST,EVENT_NAME,COUNT_ALLOC,COUNT_FREE,CURRENT_COUNT_USED,SUM_NUMBER_OF_BYTES_ALLOC,SUM_NUMBER_OF_BYTES_FREE,CURRENT_NUMBER_OF_BYTES_USED from performance_schema.memory_summary_by_account_by_event_name order by CURRENT_NUMBER_OF_BYTES_USED desc limit 10;
 
COUNT_ALLOC:内存分配次数
COUNT_FREE:内存回收次数
SUM_NUMBER_OF_BYTES_ALLOC:内存分配大小
SUM_NUMBER_OF_BYTES_FREE:内存回收大小
CURRENT_COUNT_USED:当前分配的内存,通过COUNT_ALLOC-COUNT_FREE计算得到
CURRENT_NUMBER_OF_BYTES_USED:当前分配的内存大小,通过SUM_NUMBER_OF_BYTES_ALLOC-SUM_NUMBER_OF_BYTES_FREE计算得到
LOW_COUNT_USED:CURRENT_COUNT_USED的最小值
HIGH_COUNT_USED:CURRENT_COUNT_USED的最大值
LOW_NUMBER_OF_BYTES_USED:CURRENT_NUMBER_OF_BYTES_USED的最小值
HIGH_NUMBER_OF_BYTES_USED:CURRENT_NUMBER_OF_BYTES_USED的最大值

第三步: 查看内存监控表数据

 
mysql> select  substring_index(
    ->     substring_index(event_name, '/', 2),
    ->     '/',
    ->     -1
    ->   )  as event_type,
    ->   round(sum(CURRENT_NUMBER_OF_BYTES_USED)/1024/1024, 2) as MB_CURRENTLY_USED
    -> from performance_schema.memory_summary_global_by_event_name
    -> group by event_type

问题解决:

        当事件的内存占用是performance_schema过高的话,可以考虑关闭或者减少该事件使用内存的量,操作如下

降低performance_schema的内存使用率:
performance_schema_max_table_instances=400
table_definition_cache=400
table_open_cache=256
 
关闭performance_schema:
performance_schema=off

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/9203

(0)
郭靖的头像郭靖
上一篇 2023年7月26日 下午4:13
下一篇 2023年7月27日 下午4:02

相关推荐

  • 无法作为数据库主体执行,因为主体 “dbo“ 不存在、无法模拟这种类型的主体,或您没有所需的权限

    问题描述: 最近正在测试数据库复制,想删除发布服务器的发布数据库时,突然提示这个:无法作为数据库主体执行,因为主体 “dbo” 不存在、无法模拟这种类型的主体,或您没有所需的权限。已将数据库上下文更改为 “AdventureWorks2008R2”。 (Microsoft SQL Server,错误: 15517) 原因分析: 用附件文件和组的方法的还原数据…

    2023年2月18日
    54900
  • MySQL 中 DELETE 语句中可以使用别名么?

    某天,正按照业务的要求删除不需要的数据,在执行 DELETE 语句时,竟然出现了报错! 背景 某天,正按照业务的要求删除不需要的数据,在执行 DELETE 语句时,竟然出现了报错(MySQL 数据库版本 5.7.34): 这就有点奇怪了,因为我在执行删除语句之前,执行过同样条件的 SELECT 语句,只是把其中的 select * 换成了…

    2023年11月22日
    42000
  • Oracle用户密码过期的处理方法

    受影响版本:Oracle11g以上版本。 导致密码消失的原因:Oracle 11g中默认的DEFAULT概要文件中口令有效期PASSWORD_LIFE_TIME默认值为180天。 当以客户端登陆Oracle提示ORA-28002,则基本可以确定登陆帐号已过有效期,使用具有DBA权限的帐号重置该帐号密码即可。 解决方法: 以下步骤以具有DBA权限用户操作 1.…

    2024年5月9日
    30100
  • 手把手教你在Centos7.6环境下安装Redis(含详细图文)

    1.Linux安装redis 下载: wget http://download.redis.io/releases/redis-2.8.17.tar.gz 解压源码包 tar xzf redis-2.8.17.tar.gz 解压完成后的目录 redis-2.8.17 安装 执行完make命令后,在redis-2.8.17 的 src目录下会出现编译后的 re…

    2022年6月14日
    67900
  • Navicat161 数据库文件修复

    错误分析 此错误一般为表损坏,修复即可。可能造成原因为服务器突然断电,而有程序还在往表里写数据或者表的数据很大或者数据搬迁的时候编码格式有误,避免浪费时间去修表,可采用Navicat去快速修复表!!! 登录Navicat数据库,找到报错的数据表,右键维护->修复表->拓展或者快速

    2022年11月17日
    76100

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信