ITPub博客

首页 > 数据库 > MySQL > MySQL大量使用swap文件

MySQL大量使用swap文件

原创 MySQL 作者:壹頁書 时间:2016-09-02 16:00:52 0 删除 编辑
现象:
    一台高配的MySQL数据库服务器,双CPU48线程.
    CentOS 7
    本机磁盘是一万五千转的Raid 0.系统文件,Swap都分配在了本机磁盘.
    服务器挂载了一个SSD的磁盘阵列.数据库文件都存放在磁盘阵列中.
    
    系统运行之后,发现系统Swap大量使用,并且本机磁盘的IO使用率持续100%.

权宜之计:
    我把Swap挪到了盘阵中

原因:
    swap insanity
    NUMA架构

引用:
    对于单CPU,多核心的情况,每个核心访问内存的速度是一样的,这种架构称为SMP(Symmetric multiprocessing, 对称多处理器),又叫UMA(Uniform Memory Architecture,与NUMA相对,一致性内存访问架构)。
可以看到,每个CPU都有一组配套的内存槽。每个CPU访问自身的内存插槽,速度都很快,但对于主板上的其他内存插槽,访问速度就会下降。这种架构被称为NUMA。

    对于Linux来说,加载的时候就会检测内存,计算CPU到内存的访问开销,将CPU和内存分成一组组的。每个进程和线程,都会继承父进程的NUMA策略,这种策略包括这个进程/线程会在哪个CPU上运行,分配的内存应该用哪组插槽的。

    面对内存分配,只要一经分配到指定的CPU—内存槽,就不会再挪动了。对于数据库这类应用,理想情况下是一个单一的多线程进程,吃掉了几乎所有的系统内存,并尽可能多的消耗其余的系统资源例如IO。

    对于两个CPU的NUMA架构来说,如果一个核心分配的内存超过系统内存的一半,就会出现问题。而Linux的分配策略是,首先使用CPU 0,然后再使用CPU 1。这时候就会出现一种情况,CPU 0的内存组已经率先使用完了,但系统还有很多空闲内存,都在CPU 1上。这时候,Linux会选择将CPU 0的内存刷到磁盘上,以换取可用内存。但是,swap过程远比跨CPU访问内存要慢啊。这就会造成内存还没用光,但数据库疯狂刷盘的现象了。



参考:
http://www.cnblogs.com/Lifehacker/p/database_swap_insanity_on_Linux.html
https://blog.jcole.us/2010/09/28/mysql-swap-insanity-and-the-numa-architecture/
https://yq.aliyun.com/articles/50933

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

请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    620
  • 访问量
    6339972