mysql memory


原文链接: mysql memory

MySQL Memory Calculator

记一次Mysql占用内存过高的优化过程 - 克隆大菠萝的后庭 - CSDN博客

1. 内存清理

free -m

          total        used        free      shared  buff/cache   available

Mem: 15886 5687 155 832 10043 9094
Swap: 0 0 0

  • total 系统可支配使用的内存总数。
  • free 系统尚未使用的内存。(free 和是 swap,在 / proc/meminfo)
  • used used= total- free - buffers - cache。
  • shared 被 tmpfs 使用的内存。(/proc/meminfo)
  • buff/cache buffers 写缓存 和 cache 读缓存的总和。
  • available available ≈ free+buffers+cached
    available与 free 的关键区别点在于: free 是说的系统层面,available 是说的应用程序层面。

手动释放内存

  • 1. 主机执行 sync 命令
    目的:sync 命令将所有未写的系统缓冲区写到磁盘中
    1. 数据库执行刷新日志缓存、表缓存
      mysql> flush logs; -- 关闭当前的二进制日志文件并创建一个新文件
      mysql> flush tables; -- 关闭所有打开的表,同时该操作将会清空查询缓存中的内容

    1. 缓存释放
      echo 3 > /proc/sys/vm/drop_caches

说明:/proc 是一个虚拟文件系统,我们可以通过对它的读写操作做为与 kernel 实体间进行通信的一种手段。也就是说可以通过修改 / proc 中的文件,来对当前 kernel 的行为做出调整。那么我们可以通过调整 /proc/sys/vm/drop_caches 来释放内存
drop_caches 的值可以是 0-3 之间的数字,代表不同的含义:
0:不释放(系统默认值)
1:释放页缓存
2:释放 dentries 和 inodes
3:释放所有缓存

  • 4. 参数优化调整

innodb_flush_method 这个参数控制着 innodb 数据文件及 redo log 的打开、刷写模式。
innodb_flush_method=O_DIRECT
O_DIRECT 模式:数据文件的写入操作是直接从 mysql innodb buffer 到磁盘的,并不用通过操作系统的缓冲,而真正的完成也是在 flush 这步, 日志还是要经过 OS 缓冲;

`