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

相关推荐

  • 索引–加快MySQL查询

    1.索引的描述 索引在MySQL中也叫做”键”,保存着数据位置的信息; 其作用是为了加快数据库的查询速度; 实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。 2.索引的使用 添加索引 #案例 主键会自动创建索引,外键约束也会自动创建索引 删除索引 #案例 添加联合索引 语法 联合索引又叫复合索引,是MySQL的I…

    2022年8月17日
    1.5K00
  • 数据库慢查询及其优化

    我们经常会谈到数据库慢查询。那么什么是数据库慢查询以及导致数据库慢查询的常见原因,以及对应的解决方法。 1、什么是数据库慢查询 数据库慢查询,就是查询时间超过了我们设定的时间的语句。可以通过语句查看设定的时间: 默认的设定时间是10秒,也可以通过下面这个语句修改默认的设定时间: 2、MySQL 慢查询的相关参数解释 3、慢查询日志配置 默认情况下slow_q…

    2022年6月11日
    1.5K00
  • MYSQL分区

    一:概念 MySQL从5.1版本开始支持分区的功能。分区是指根据一定的规则,数据库把一个表分解成多个更小的、更容易管理的部分。就访问数据库的应用而言,逻辑上只有一个表或一个索引,但是实际上这个表可能由数10个物理分区对象组成,每个分区都是一个独立的对象,可以独自处理,可以作为表的一部分进行处理。分区对应用来说是完全透明的,不影响应用的业务逻辑。 二:分区优点…

    2024年6月3日
    1.4K00
  • 如何快速实现 Redis 持久化

    RDB快照(Redis DataBase) RDB是一种快照存储持久化方式,具体就是将Redis某一时刻的内存数据保存到硬盘的文件当中,默认保存的文件名为dump.rdb,而在Redis服务器启动时,会重新加载dump.rdb文件的数据到内存当中恢复数据。 开启RDB持久化方式 开启RDB持久化方式很简单,客户端可以通过向Redis服务器发送save或bgs…

    2023年6月29日
    1.2K00
  • MySQL的备份与还原

    关于删库跑路的事故现在已经屡见不鲜了,数据备份的必要性是企业数据管理极其重要的一项工作。关于数据备份、恢复也有很多场景及方法,本系列也会将主要的方法进行演示。 方式一:通过cmd命令备份 备份 数据表结构+数据 db1为要备份的数据库名,db2.sql为输出备份文件名称备份后输出一个sql文件,存在指定的/root/mysql_bak/目录下 备份数据库的表…

    2022年6月10日
    1.7K00

发表回复

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

在线咨询: QQ交谈

邮件:712342017@qq.com

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

关注微信