mysql hugepage_huge page 能给MySQL 带来性能提升吗?
最近一直在做性能壓測相關的事情,有公眾號的讀者朋友咨詢有贊的數據庫服務器有沒有開啟huge page,我聽說過huge page會對性能有所提升,本文就一探究竟。對過程沒有興趣的可以直接看結論。
二 Huge Page 來龍去脈
2.1 為什么需要Huge Page
在 Linux 操作系統上運行內存需求量較大的應用程序時,由于其采用的默認頁面大小為 4KB,因而將會產生較多 TLB Miss 和缺頁中斷,從而大大影響應用程序的性能。當操作系統以 2MB 甚至更大作為分頁的單位時,將會大大減少 TLB Miss 和缺頁中斷的數量,顯著提高應用程序的性能。這也正是 Linux 內核引入大頁面支持的直接原因。好處是很明顯的,假設應用程序需要 2MB 的內存,如果操作系統以 4KB 作為分頁的單位,則需要 512 個頁面,進而在 TLB 中需要 512 個表項,同時也需要 512 個頁表項,操作系統需要經歷至少 512 次 TLB Miss 和 512 次缺頁中斷才能將 2MB 應用程序空間全部映射到物理內存;然而,當操作系統采用 2MB 作為分頁的基本單位時,只需要一次 TLB Miss 和一次缺頁中斷,就可以為 2MB 的應用程序空間建立虛實映射,并在運行過程中無需再經歷 TLB Miss 和缺頁中斷(假設未發生 TLB 項替換和 Swap)。
為了能以最小的代價實現大頁面支持,Linux 操作系統采用了基于 hugetlbfs 特殊文件系統 2M 字節大頁面支持。這種采用特殊文件系統形式支持大頁面的方式,使得應用程序可以根據需要靈活地選擇虛存頁面大小,而不會被強制使用 2MB 大頁面。via(InnoDB啟用大內存頁)
2.2 HugePage的優勢:
1.增加TLB的命中率
2.Page是被鎖定在內存中,降低內存交換;
3.鎖定內存,降低內存釋放與占用產生的性能降低;
4.提高內存的性能,降低CPU負載。
三 mysql 如何用huge page
不同系統的huge pages大小可能不一樣,我們使用centos7 huge page 大小默認為2M 。
3.1 計算需要多少 huge pages
啟用 huge page之前 首先我們要計算分配多少huge page給mysql 使用。一般的建議是mysql使用的總內存大小加上10%。計算公式如下
S = (query_cache_size + table_open_cache + innodb_buffer_pool_size + innodb_log_file_size + performance_schema.memory) + 10 %
那么 huge pages的個數大小是
vm.nr_hugepages=S/2M
3.2 設置mysql用戶組使用huge pages
通過 id mysql 獲取mysql所在的group id
# id mysqluid=27(mysql) gid=27(mysql) groups=27(mysql)
echo 27 > /proc/sys/vm/hugetlb_shm_group
3.3 為 mysql 用戶提供memlock限制的“無限”值
編輯/etc/security/limits.conf 增加
#
#
#Where:
# can be:
# - a user name
# - @mysql 表示mysql用戶組的不受限
##設置mysql 使用 HugePages
@mysql
soft memlock unlimited
@mysql
hard memlock unlimited
編輯 my.cnf 在[mysqld]里面增加
large_pages=1
3.4驗證hugepage是否生效
# cat /proc/meminfo | grep HugeAnonHugePages: 1294336 kBHugePages_Total: 5834HugePages_Free: 1394HugePages_Rsvd: 921HugePages_Surp: 0Hugepagesize: 2048 kB
出現不為0的值,HugePagesFree小于HugePagesTotal.
3.5 啟動MySQL 可能遇到的問題
在啟動mysql的時候,最容易報的錯誤是:
[Warning] InnoDB: Failed to allocate 140509184 bytes. errno 12[Warning] InnoDB: Using conventional memory pool
出現上面的提示大概率是因為
1.nr_hugepages的值*2M小于innodb使用的內存大小,需要調整nr_hugepages 的值。
2.針對mysql用戶組的 memlock 是否設置。在啟動mysql時,一定要先查看用ulimit -a 來查看max locked memory 設置是否合理。
3.6 壓測結果
OS centos 7.10 內核 3.10
DB 相關壓測參數
兩個實例 一個開啟和未開啟 大頁性能無差異。和網上的資料說性能會有所提升不一致。
四 總結
我根據 官方文檔 和網上的相關資料,檢查了開啟內存大頁的步驟沒有異常,而且壓測兩次。如果讀者朋友中有壓測huge page且有性能提升的,歡迎留言相互交流學習。
參考文章
官方文檔
https://dev.mysql.com/doc/refman/5.7/en/large-page-support.html
InnoDB啟用大內存頁
https://www.cnblogs.com/gomysql/p/3627915.html
Huge Page 是否是拯救性能的萬能良藥?
http://cenalulu.github.io/linux/huge-page-on-numa/
總結
以上是生活随笔為你收集整理的mysql hugepage_huge page 能给MySQL 带来性能提升吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人口发展方程python代码_中国大学m
- 下一篇: FastQC 质控软件的下载及使用方法(