排查点:数据库配置,数据分区、定时事件、存储过程
触发原因: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占用内存过高排查》对你有帮助,请点赞、收藏,并留下你的观点哦!