美文网首页
mysql占用内存过高排查

mysql占用内存过高排查

作者: JackSpeed | 来源:发表于2020-07-22 18:16 被阅读0次

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

触发原因: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%了,心态。。。。。

开始

查看博客https://blog.csdn.net/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 '2019-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占用内存过高排查

      本文链接:https://www.haomeiwen.com/subject/evutlktx.html