非一致存儲訪問結構 (NUMA : Non-Uniform Memory Access) 也是最新的內存管理技術。它和對稱多處理器結構 (SMP : Symmetric Multi-Processor) 是對應的。
MySQL在NUMA架構上會出現(xiàn)的問題:
1).CPU規(guī)模因摩爾定律指數(shù)級發(fā)展,而總線發(fā)展緩慢,導致多核CPU通過一條總線共享內存成為瓶頸
2).于是NUMA出現(xiàn)了,CPU平均劃分為若干個Chip(不多于4個),每個Chip有自己的內存控制器及內存插槽
3).CPU訪問自己Chip上所插的內存時速度快,而訪問其他CPU所關聯(lián)的內存(下文稱Remote Access)的速度相較慢三倍左右
4).于是Linux內核默認使用CPU親和的內存分配策略,使內存頁盡可能的和調用線程處在同一個Core/Chip中
5).由于內存頁沒有動態(tài)調整策略,使得大部分內存頁都集中在CPU 0上
6).又因為Reclaim默認策略優(yōu)先淘汰/Swap本Chip上的內存,使得大量有用內存被換出
7).當被換出頁被訪問時問題就以數(shù)據(jù)庫響應時間飆高甚至阻塞的形式出現(xiàn)了
因此MySQL單機單實例,建議關閉NUMA,關閉的方法有三種:
1.硬件層,在BIOS中設置關閉;
2.OS內核,啟動時設置numa=off;
3.可以用numactl命令將內存分配策略修改為interleave(交叉)
登錄Linux系統(tǒng),修改/etc/init.d/mysqld文件,加上numactl --interleave all
vi /etc/init.d/mysqld
找到如下行
# Give extra arguments to mysqld with the my.cnf file. This script
# may be overwritten at next upgrade.
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
將$bindir/mysqld_safe --datadir="$datadir"這一行修改為:
/usr/bin/numactl --interleave all $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
然后重啟MySQL服務.
#service mysqld restart
分享文章:MySQL5.7關閉NUMA方法
文章來源:
http://weahome.cn/article/ppcecp.html