mysql数据库内存使用率持续增长不释放解决方案
一 问题
mysql数据库内存持续增长至90%以上,且不释放。最终导致mysqld进程oom。
二 解决方案
优化参数innodb_buffer_pool_size
限定mysql参数innodb_buffer_pool_size不超过mysql数据库服务器物理内存的40%
优化session级buffer参数值
read_buffer_size = 4M
read_rnd_buffer_size = 4M
sort_buffer_size = 4M
join_buffer_size = 4M
tmp_table_size = 32M
max_heap_table_size = 32M
优化参数key_buffer_size
检查mysql数据库MyISAM引擎,key_buffer_size只对MyISAM表起作用。
show engines;
优化参数key_buffer_size的值
key_buffer_size = 16M
内存碎片回收
调用glibc申请的内存使用完毕后,归还给OS时没有被正常回收变成了碎片。随着碎片的不断增长,就能看到mysqld进程占用的内存不断上升。这时候可以调用函数主动回收释放这些碎片。
[root@mysql#] top
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
49117 mysql 20 0 28.4g 25g 8400 S 48.5 81.4 64:46.82 mysqld
[root@mysql#] gdb --batch --pid `pidof mysqld` --ex 'call malloc_trim(0)'
[root@mysql#] top
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
49117 mysql 20 0 28.4g 5.2g 8288 S 2.7 17.0 64:56.82 mysqld
内存碎片整理类似在InnoDB表中产生太多碎片后,主动执行 OPTIMIZE TABLE 重建表的做法。
monitor慢日志里的慢sql优化
建议mysql数据库更换成企业版
mysql企业版数据库,在数据库内存回收机制这方面做了较大的改进。可以有效改善数据库的内存溢出问题。
mysql数据库内存使用率持续增长不释放解决方案
本文2024-09-23 01:13:20发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-144557.html