mysql hugepage_mysql启用hugepage-阿里云开发者社区
1 hugepage在linux 2.6以后的內核才支持,mysql中只有innodb引擎才支持,hugepage作用:
1.減少內存置換
2.減少TLB miss次數
3.減少swap
**啟用了hugepage以后,top查看內存被占用很多,但是找不到具體的進程,其實就是hugepage占用了,使用Hugepage內存是共享內存,它會一直pin在內存中的,不會被交換出去,也就是說使用hurgepage的內存不能被其他的進程使用,所以,一定要合理設置這個值,避免造成浪費。對于只使用Oracle的服務器來說,把Hugepage_pool設置成SGA大小即可。
2 配置:
[root@chwb13 mysql]# cat /proc/meminfo |grep -i huge
AnonHugePages: 440320 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
在/etc/security/limits.conf定義mysql用戶的memlock的數量
mysql soft memlock unlimited
mysql hard memlock unlimited
3.查看mysql用戶的組信息
id mysqluid=502(mysql) gid=501(dba) groups=501(dba)
4.配置/etc/sysctl.conf使用大頁內存的用戶組
vm.hugetlb_shm_group=501
vm.nr_hugepages=10000 //定義hugepage的數量,innodb_buffer_pool_size+innodb_additional_mem_size一定要小于nr_hugepages*Hugepagesize(2MB),這個值也一定要比總內存小
修改my.cnf配置文件支持hugepage:
large_pages=1
重啟mysql后查看:
mysql> show global variables like '%large_page%';
5 驗證hugepage是否生效:
[root@localhost ~]# cat /proc/meminfo | grep Huge
HugePages_Total: 1000
HugePages_Free: 971
HugePages_Rsvd: 746
Hugepagesize: 2048 kB
HugePages_Free小于HugePages_Total,一切正常
報錯:啟動mysql。
在啟動mysql的時候,最容易報的錯誤是:
InnoDB: HugeTLB: Warning: Failed to allocate 138412032 bytes. errno 12
InnoDB HugeTLB: Warning: Using conventional memory pool
這是由于上面配置的兩點所致。
1)nr_hugepages 的值*2M應大于(innodb_buffer_pool_size+innodb_additional_mem_pool_size)因為以上談到 innodb可以使用large pages來分配buffer pool跟additional memory pool.
2)memlock 的設置,在啟動mysql時,一定要先查看用ulimit -a 來查看max locked memory 設置是否合理,可以嘗試用以上兩種方法來設置該值。還有一點,/etc/security/limits.conf配置文件的修改,可能無法通過ssh來 查看,故也不能用ssh來啟動mysql。
總結
以上是生活随笔為你收集整理的mysql hugepage_mysql启用hugepage-阿里云开发者社区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洛谷模板汇总
- 下一篇: 随机数生成器Random类