失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > mysql内存占用过高_mysql占用内存过高排查

mysql内存占用过高_mysql占用内存过高排查

时间:2023-10-13 14:18:51

相关推荐

mysql内存占用过高_mysql占用内存过高排查

排查点:数据库配置,数据分区、定时事件、存储过程

触发原因:java服务莫名的挂掉了

机器信息:centos 7 ,腾讯云服务器1核2G,只安装了mysql和运行一个java服务。

经过排查过程:

查进程id

ps -ef |grep mysql

查询占用内存,cpu情况

top -p [进程id]

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

12799 mysql 20 0 1793884 279132 12600 S 0.3 44.8 0:05.59 mysqld

发现mysql进程刚刚启动的时候占用内存挺低了25%左右,基本能接受,但是过了十分钟左右就到45%了,心态。。。。。

开始

查看博客/kouryoushine/article/details/89354949

说可能是因为innodb_buffer_pool_size配置太高了,结果看了自己的配置才134MB,觉得配置合理。觉得问题原因不匹配,放弃。

第二

查看数据的大小,突然发现有个test库,有4G这么大,然后一看发现之前做了定时分区的测试,有定时写入、存储过程等。

比如:

#每分钟写入一条数据定时任务

create definer = root@`%` event event_every_minute_call_insert on schedule

every '1' MINUTE

starts '-09-17 16:09:38'

on completion preserve

enable

do

call procedure_auto_insert_minute();

create

definer = root@`%` procedure procedure_auto_insert_minute()

BEGIN

declare i int default 0;

while (i < 5)

do

insert into t_auto_insert_minute

values (0, concat('procene', i), now(), concat(date_format(now(), '%Y%m%d%H'), minute(now())));

set i = i + 1;

end while;

END;

把这些关掉,然后top -p,内存占用就降低到14%了。

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

12799 mysql 20 0 1793884 279132 12600 S 0.3 14.8 0:05.59 mysqld

如果觉得《mysql内存占用过高_mysql占用内存过高排查》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。