首页 > 数据库 > MySQL > mysql进程内存过高排查记录
场景说明:一台物理机上安装了多个实例,服务其中其中一个mysql进程内存占用很高,但是cpu并不是很高
下面是排查步骤,记录一下:
top 查看如下:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
26567 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 available
Mem: 251 191 18 4 41 51
Swap: 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参数。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30162734/viewspace-2794083/ ,如需转载,请注明出处,否则将追究法律责任。