『现象』
平时mysqld占用75%左右,数据割接迁移,通过load file导入,free -g显示free已经为0
#free -g
total used free shared buffers cached
Mem: 93 93 0 5 0 27
-/+ buffers/cache: 65 28
Swap: 15 0 15
『分析』
当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为cached。
total 内存总数
used 已经使用的内存数
free 空闲的内存数
shared 多个进程共享的内存总额
buffers Buffer Cache和cached Page Cache 磁盘缓存的大小
-buffers/cache 的内存数:used - buffers - cached
+buffers/cache 的内存数:free + buffers + cached
可用的memory=free memory+buffers+cached。
free小并不是说内存不够用了,应该看的是free的第二行最后一个值:"-/+ buffers/cache: 65 28" 这才是系统可用的内存大小。
『解决』
1.手动释放cache内存
echo 3 >/proc/sys/vm/drop_caches
free -g
total used free shared buffers cached
Mem: 93 76 17 5 0 5
-/+ buffers/cache: 70 23
Swap: 15 0 15
说明:
To free pagecache, use
echo 1 > /proc/sys/vm/drop_caches
to free dentries and inodes, use
echo 2 > /proc/sys/vm/drop_caches
to free pagecache, dentries and inodes, use
echo 3 >/proc/sys/vm/drop_caches
2.减少innodb_buffer_pool_size值
减少innodb_buffer_pool_size的值,降低mysqld占用内存大小
set global innodb_buffer_pool_size=32×1024×1024×1024;
3.加快导入速度,事后修改回来
修改前查参数值
show GLOBAL variables like ‘foreign_key_checks’;
show GLOBAL variables like ‘unique_checks’;
show GLOBAL variables like ‘innodb_flush_log_at_trx_commit’;
show GLOBAL variables like ‘sync_binlog’;
执行如下加速操作
SET GLOBAL foreign_key_checks=0;
SET GLOBAL unique_checks=0;
SET GLOBAL innodb_flush_log_at_trx_commit=0;
SET GLOBAL sync_binlog=0;




