MySQL 5.7 InnoDB緩衝池NUMA功能支持——可是別高興的太早

當前CPU都已經是NUMA架構,相信除了歷史遺留系統,不多會有數據庫跑在SMP的CPU上了。NUMA架構帶來的優點無言而語,CPU更快的內存訪問速度,可是帶來的問題也不言而喻,特別是對於數據庫的影響。MySQL以前「臭名昭著」的swap問題就是由於NUMA架構致使。大部分同窗已經知道應對技巧,即在啓動文件中加入:node

 

numactl --interleave=all mysqld ...mysql

orlinux

numactl –cpunodebind=node –localalloc mysqld ...sql

 

MongoDB官方的啓動文件大體也是這麼寫的。可是這樣的處理方式在Inside君看來並非最優的。由於NUMA的優點在於本地內存的申請速度。所以,對於數據庫來講,一個好的策略應該是諸如緩衝池這樣的全局內存能夠向全部節點申請內存,而線程級別的內存仍是堅持本地分配策略。數據庫

 

MySQL 5.7 InnoDB提供了新的參數innodb_numa_interleave,即緩衝池內存的分配策略採用interleave的方式。官方文檔中的說明以下:網絡

 

Enables the NUMA interleave memory policy for allocation of the InnoDB buffer pool. Wheninnodb_numa_interleave is enabled, the NUMA memory policy is set to MPOL_INTERLEAVE for the mysqld process. After the InnoDB buffer pool is allocated, the NUMA memory policy is set back to MPOL_DEFAULT. For theinnodb_numa_interleave option to be available, MySQL must be compiled on a NUMA-enabled system.架構

 

實現代碼也比較優雅,有興趣的同窗能夠看下。不過當你高興InnoDB終於支持NUMA特性時,MySQL又給咱們潑了冷水:ide

 

root@test-1# bin/mysqld -V學習

bin/mysqld  Ver 5.7.12 for linux-glibc2.5 on x86_64 (MySQL Community Server (GPL))spa

root@test-1# bin/mysqld --help -v | grep numa

 

最新的5.7.12版本居然找不到此參數。可是沒有關係,開源的魅力在於折騰,因而乎修改了2行代碼,編譯安裝後參數innodb_numa_interleave就又出現了:

 

 

root@test-1:/mdata/mysql/mysql-5.7.12/bld# sql/mysqld -v --help | grep numa

  --innodb-numa-interleave 

innodb-numa-interleave                                       FALSE


小夥伴可嘗試本身去解決看看,第一個回覆並答對的小夥伴,將得到姜老師提供的價值1000元的某雲服務提供商代金券一張哦~~~

 

不過,相比Microsoft SQL Server,MySQL的NUMA支持依然不夠完善,由於Microsoft SQL Server在2005版本就已經支持NUMA特性,而且提供了相應的命令來進行控制,如:

 

ALTER SERVER CONFIGURATION SET PROCESS AFFINITY CPU=0 TO 3;

 

這樣作的好處是,好比在多實例環境下,用戶能夠更爲靈活的控制內存的分配。可是要實現此功能,貌似也不是一件難事哦,有誰願意實現給InnoSQL貢獻本身的一份力量呢?

 

PS:Inside君的2016年MySQL網絡培訓班又將開始啦~~~,具體點擊:2016年最好的MySQL數據庫網絡培訓又來了 零基礎、Oracle DBA、MySQL DBA的同窗們都來吧,跟着姜老師的思考方式來系統的學習MySQL。

相關文章
相關標籤/搜索