设为首页 收藏本站
查看: 515|回复: 0

[经验分享] NUMA对MySQL InnoDB的性能影响

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-12-5 09:42:33 | 显示全部楼层 |阅读模式
NUMA架构的CPU下,一个CPU有多个核心,那么每个CPU成为一个NODE
关闭这个特性时
一个NODE 使用自己的本地内存,而尽量不去访问其他NODE的内存,除非本地内存满了

Linux 如何处理NUMA架构
1 把处理器分到节点(NODE),现代处理器一般是每个节点一个处理器,一个处理器上多个核

2 为每个节点连接每个处理器的本地内存模块

3 计算节点间的沟通成本(节点距离)

通过numactl --hardware 命令可以看到Linux如何识别NUMA架构层
available: 4 nodes (0-3)
node 0 cpus: 0 1 2 3 4 5 6 7 32 33 34 35 36 37 38 39
node 0 size: 65512 MB
node 0 free: 2146 MB
node 1 cpus: 8 9 10 11 12 13 14 15 40 41 42 43 44 45 46 47
node 1 size: 65536 MB
node 1 free: 96 MB
node 2 cpus: 16 17 18 19 20 21 22 23 48 49 50 51 52 53 54 55
node 2 size: 65536 MB
node 2 free: 32362 MB
node 3 cpus: 24 25 26 27 28 29 30 31 56 57 58 59 60 61 62 63
node 3 size: 65536 MB
node 3 free: 21805 MB
node distances:
node   0   1   2   3
  0:  10  11  11  11
  1:  11  10  11  11
  2:  11  11  10  11
  3:  11  11  11  10

内存是平均分配到每个节点的

# Linux 如何处理资源分配
每个进程和线程继承父亲的NUMA策略.这个策略可以基于每个线程修改.
策略定义了一个进程允许被哪个节点甚至那个核心调度.

每个线程最初配分派给最"适合"的节点运行.线程也可以在其他地方运行,但是调度器试图确保现场运行在最优节点

默认情况下,内存的分配被指派到特定的节点上,即这个线程"当前"运行的节点.
在UMA/SMP 架构下,内存是平等对待的,而在NUMA下,分配其他节点的内存意味着cache的延迟和性能的下降

内存一旦分配到一个节点上,就不会移动到另一个节点,不管系统的需求,它会永远呆在那个节点上.

任何进程的NUMA策略可以被修改,通过numactl作为程序的封装,也可以使用 libnuma 编写代码管理NUMA策略.

例如使用numactl作为程序的封装:
1 使用指定策略分配内存:
     使用"当前"节点,--localalloc参数指定,这是默认的模式
     优先使用一个节点,但也可以使用其他节点,--preferred=node参数
     永远使用一个节点或一组节点, --membind=nodes
     交叉,轮询所有节点 --interleaved=all 或者 --interleaved=nodes
2 程序运行节点的选择
    指定节点(--cpunodebind=nodes) 或者 一个核心或一组核心 (--physcpubind=cpus)

NUMA 对 MySQL 和 InnoDB 的意义

对于InnoDB和大多数数据库服务器(如Oracle),他们在Linux上的工作方式是,巨大的单一进程,带有多线程.
在NUMA架构下,内存被分派到不同的节点上,当你分配了系统50%以上的内存给一个进程,这就不是一个节点内能完成的事情了.

当不同的查询同时运行时,每个处理器都无法优先地去访问一个特定查询需要内存

事实证明这是一个很重要的问题.通过/proc/pid/numa_maps可以看到mysqld分配的所有内存,你会发现一个有趣的现象

如果你查找anon=size的值,

这是其中一行的值
7ecf14000000 default anon=3584 dirty=3584 active=1024 N1=3584

7ecf14000000  虚拟内存地址
default    NUMA 策略
anon=number  匿名页面的数量
dirty  脏页,被修改的页
通常分配给进程的页总是使用的,因此都是脏的,但是由于fork,进程会有很多copy-on-write的页面的映射,他们不是脏的
swapcache=number
active  这个列出现,表示多少页面出现在活动列表,同时意味着还有一些不活跃的页面,它们将要被swapper换页出去
N0 and N1 每个节点的页面

通过一个脚本,可以统计出所有内存的情况

perl /data0/script/numa-maps-summary.pl < /proc/4417/numa_maps
N0        :       392133 (  1.50 GB)
N1        :       792466 (  3.02 GB)
N2        :       531028 (  2.03 GB)
N3        :      3743392 ( 14.28 GB)
active    :      4314131 ( 16.46 GB)
anon      :      5457149 ( 20.82 GB)
dirty     :      5456665 ( 20.82 GB)
mapmax    :          268 (  0.00 GB)
mapped    :         1930 (  0.01 GB)
swapcache :          484 (  0.00 GB)

读取/proc/pid/numa_maps的信息会阻塞进程
http://blog.wl0.org/2012/09/chec ... client-connections/


不但是mysql 还有mangodb
根据官方文档的解释,Linux, NUMA, MongoDB 这三者不是很和谐,如果当前硬件是 NUMA 的,可以把它给关了:
# numactl --interleave=all sudo -u mongodb mongod --port xxx  --logappend --logpath yyy --dbpath zzz
(vm.overcommit_ratio = 100, vm.overcommit_memory = 2)

vm.zone_reclaim_mode 设置为 0。
系统给 NUMA node 分配内存,如果 NUMA node 已经满了,这时候,系统会为本地的 NUMA node 回收内存而不是将多出来的内存给 remote NUMA node,这样整体的性能会更好,但是在某些情况下,给 remote NUMA node 分配内存会比回收本地的 NUMA node 更好,这时候就需要将 zone_reclaim_mode 给关闭了


numactl --interleave all



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-36286-1-1.html 上篇帖子: Mysql 查找字符串函数 下篇帖子: percona主从配置 影响
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表