mysql进程内存过高排查记录

来源:这里教程网 时间:2026-03-01 16:03:43 作者:

场景说明:一台物理机上安装了多个实例,服务其中其中一个mysql进程内存占用很高,但是cpu并不是很高下面是排查步骤,记录一下:top 查看如下: PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND26567 mysql     20   0  136.4g 131.0g      0 S   0.3 52.1  22384:05 mysqld这台物理机配置是user01@loclhost#  free -g              total        used        free      shared  buff/cache   availableMem:            251         191          18           4          41          51Swap:             0           0           0 1、登录到这个实例看当前此实例在做什么操作:,mysql版本是percona mysql5.7.21 没有正在执行的慢操作或者大事务。2、查看当前是否有为提交的事务和锁等待:select * from innodb_trx;select * from innodb_lock......结果并无未提交的事务和锁等待,怀疑是内存泄漏了。3、查看innodb_buffer_pool_size大小,为10G,根据实际情况,将其调整为1G,隔断时间查看,此实例内存使用量没有明显下降,使用量占据服务器内存的50%。4、临时将general log 打开,观察实例的具体操作,发现是部分select 和insert 操作,select 操作条件上有索引。5、登录pmm监控: 发现tokudb_cache_size大小占用 了126G。 登录数据库,查看当前库中tokudb存储引擎的表:| db1         | t1             | TokuDB || db1         | t2            | TokuDB || db1         | t3            | TokuDB |总结:默认情况下,tokudb_cache_size大小为物理内存的50%,如果服务器中有其他使用内存的进程,需要适当调整大小tokudb_cache_size大小,类似于innodb_buffer_pool_size参数。

相关推荐