http://blog.csdn.net/dba_waterbin/article/details/9669929
http://www.cnblogs.com/LMySQL/p/4689868.html
https://dev.mysql.com/doc/refman/5.7/en/large-page-support.html
http://www.cnblogs.com/ylqmf/archive/2012/11/23/2783717.html
http://www.cnblogs.com/cenalulu/p/4394695.html
http://www.linuxidc.com/Linux/2013-08/88227.htm
http://blog.chinaunix.net/uid-20785090-id-4065887.html
http://mogu.io/linux-hugepage-for-mysql-15 Hugepagesize 的话默认是每页 2MB。
[root@localhost ]# cat /proc/meminfo | grep -i huge
  HugePages_Total: 11
  HugePages_Free: 11
  HugePages_Rsvd: 0
  HugePages_Surp: 0
  Hugepagesize: 2048 kB //2MB

系统页一般大小:每页4K,

[root@localhost]# getconf PAGESIZE
  4096
系统参数:

  kernel.shmmax:表示单个共享内存段的最大值,以字节为单位,此值一般大于物理内存的一半.SHMMAX 的设置直接与SGA相关

  kernel.shmmin:表示单个共享内存段的最小值,默认为1字节,通常不用设置

  kernel.shmall:整个系统范围内可用共享页的总数,单位是页,在32位系统上1页等于4KB,也就是4096字节,
计算公式:shmmax/PAGE_SIZE   kernel.shmmin:整个系统范围内存段的最大数量,一般为4096个段

作用:

如果设置MySQL使用 huge page 至少有两个好处,

一个是可以减少 Translation Lookaside Buffer (TLB) 失误以提高性能

另一个是利用 huge page不会swap的特性保证MySQL的内存不会被交换到swap中
MySQL 5.0.3之后在linux上支持huge page,可以使用 large-page 选项启动MySQL。

mysql> select @@innodb_additional_mem_pool_size/1024/1024;
+---------------------------------------------+
| @@innodb_additional_mem_pool_size/1024/1024 |
+---------------------------------------------+
| 8.00000000 |
+---------------------------------------------+
1 row in set (0.00 sec) mysql> select @@innodb_buffer_pool_size/1024/1024;
+-------------------------------------+
| @@innodb_buffer_pool_size/1024/1024 |
+-------------------------------------+
| 200.00000000 |
+-------------------------------------+
1 row in set (0.00 sec) mysql> select @@tmp_table_size/1024/1024;
+----------------------------+
| @@tmp_table_size/1024/1024 |
+----------------------------+
| 16.00000000 |
+----------------------------+
1 row in set (0.18 sec) mysql> select @@innodb_log_buffer_size/1024/1024;
+------------------------------------+
| @@innodb_log_buffer_size/1024/1024 |
+------------------------------------+
| 8.00000000 |
+------------------------------------+
1 row in set (0.00 sec) mysql> select @@max_heap_table_size/1024/1024;
+---------------------------------+
| @@max_heap_table_size/1024/1024 |
+---------------------------------+
| 16.00000000 |
+---------------------------------+
1 row in set (0.00 sec)

内存和:sum (MB)

select 
@@innodb_additional_mem_pool_size/1024/1024+@@innodb_buffer_pool_size/1024/1024+@@tmp_table_size/1024/1024+@@innodb_log_buffer_size/1024/1024+@@max_heap_table_size/1024/1024

计算多少个大页

sum/2=124.0000

 

增加几个页: 130页

[root@localhost ~]# echo 130 >  /proc/sys/vm/nr_hugepages

8个buffer poll

mysql> select @@innodb_buffer_pool_instances;
+--------------------------------+
| @@innodb_buffer_pool_instances |
+--------------------------------+
| 8 |
+--------------------------------+
1 row in set (0.00 sec)
kernel.shmmax=130/8=17m   换成字节:17*1024=17408
kernal.shmall:整个系统范围可用的共享内存页的总数=130个页

[root@localhost ~]# id mysql
uid=502(mysql) gid=503(mysql) 组=503(mysql)


vi /etc/sysctl.conf

kernel.shmmni = 4096
vm.nr_hugepages=130
vm.hugetlb_shm_group=503 sysctl -w
vi /etc/security/limits.conf

@mysql soft memlock unlimited
@mysql hard memlock unlimited
my.cnf

[mysqld]
large-pages


这个指定总共huge page的页数,可以放到/etc/rc.local中。由于分配时需要有连续的内存空间,所以如果在运行了一段时间的系统上执行,可能无法分配到指定的数量,即使还有足够的内存。

之后还需要设置内核参数kernel.shmmax和kernel.shmall,否则MySQL启动时会报22的错误

InnoDB: HugeTLB: Warning: Failed to allocate 536887296 bytes. errno 22

shmall是共享内存的总大小,单位是页,默认2097152(8G)。可以使用sysctl -w或者在/etc/sysctl.conf中设置

除此还需要设max locked memory,使用ulimit -l或设置/etc/security/limits.conf,否则会报12的错误:

Warning: Failed to allocate 31457280 bytes from HugeTLB memory. errno 12
[root@localhost ~]# cat /proc/meminfo | grep -i huge
HugePages_Total: 130
HugePages_Free: 130
HugePages_Rsvd: 4
HugePages_Surp: 0
Hugepagesize: 2048 kB

eg:

# Set the number of pages to be used.
# Each page is normally 2MB, so a value of 20 = 40MB.
# This command actually allocates memory, so this much
# memory must be available.
echo 20 > /proc/sys/vm/nr_hugepages # Set the group number that is permitted to access this
# memory (102 in this case). The mysql user must be a
# member of this group.
echo 102 > /proc/sys/vm/hugetlb_shm_group # Increase the amount of shmem permitted per segment
# (12G in this case).
echo 1560281088 > /proc/sys/kernel/shmmax # Increase total amount of shared memory. The value
# is the number of pages. At 4KB/page, 4194304 = 16GB.
echo 4194304 > /proc/sys/kernel/shmall
 ipcs -m -l

------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 17
max total shared memory (kbytes) = 520
min seg size (bytes) = 1

MySQL使用hugepage的更多相关文章

  1. 【转】mysql对large page的支持

    昨天同事问我关于大页内存的事,我也只是有个模糊的概念,从别的博客转过来的,先记录下 在 Linux 操作系统上运行内存需求量较大的应用程序时,由于其采用的默认页面大小为 4KB,因而将会产生较多 TL ...

  2. MySQL 优化之 Linux系统层面调优

    MySQL 一般运行于Linux系统中.对于MySQL的调优一般分为Linux操作系统层面的调优和MySQL层面的调优(当然还有架构层面.业务层面.应用程序层面的调优).操作系统主要是管理和分配硬件资 ...

  3. MySQL 调优基础(二) Linux内存管理

    进程的运行,必须使用内存.下图是Linux中进程中的内存的分布图: 其中最重要的 heap segment 和 stack segment.其它内存段基本是大小固定的.注意stack是向低地址增长的, ...

  4. 配置MySQL使用HugePages

    前言:对于有Oracle运维经验的童鞋来说,如果服务器内存很大,一般都会设置HugePages,是因为如下原因:对于 Linux 操作系统,通过 Linux kswapd 进程和页表内存结构(针对系统 ...

  5. Linux的Transparent Hugepage与关闭方法

    Transparent HugePages是在运行时动态分配内存的,而标准的HugePages是在系统启动时预先分配内存,并在系统运行时不再改变. 因为Transparent HugePages是在运 ...

  6. 转 用好HugePage,告别Linux性能故障

    超过32G 的数据库,可以是使用如下方法配置. ######### Slow Performance with High CPU Usage on 64-bit Linux with Large SG ...

  7. huge page 能给MySQL 带来性能提升吗?

    最近一直在做性能压测相关的事情,有公众号的读者朋友咨询有赞的数据库服务器有没有开启huge page,我听说过huge page会对性能有所提升,本文就一探究竟.对过程没有兴趣的可以直接看结论. 二 ...

  8. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  9. mysql每秒最多能插入多少条数据 ? 死磕性能压测

    前段时间搞优化,最后瓶颈发现都在数据库单点上. 问DBA,给我的写入答案是在1W(机械硬盘)左右. 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高(SSD硬盘) 但这东西感 ...

随机推荐

  1. 转换Json格式帮助类

    using System; using System.Collections.Generic; using System.Text; using System.Reflection; using Sy ...

  2. POJ 2243 Knight Moves

    Knight Moves Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13222   Accepted: 7418 Des ...

  3. alibaba笔试2

    11. 12.C 13.C 14.C 关联:http://www.codingnow.com/2000/download/lua_manual.html 15.A

  4. 《Python基础教程(第二版)》学习笔记 -> 第一章 基础知识

    写笔记的原因:书也看了一遍,视频也看了,但总是感觉效果不好,一段时间忘记了,再看又觉得有心无力,都是PDF的书籍,打开了就没有心情了,上班一天了,回家看这些东西,真的没多大精力了,所以,我觉得还是把p ...

  5. js模拟键盘按键事件

    var WshShell = new ActiveXObject('WScript.Shell') WshShell.SendKeys('{ }'); 说明:大括号内的是键盘上的按键如: 空格:{ } ...

  6. Mongodb操作总结

    1.Mongovue里面可以直接group by ,这个时候一定要注意,group by的任何条件的是 json, 注意当值是Int,非string型的时候,值不要加上双引号 2.注意group by ...

  7. 问题:关于贴友一个用js传递value默认值的简单实现

    需求和代码如下: “这是我的代码:” 1: <input type="text" id="price2" value="333"/&g ...

  8. zoj 1670 Jewels from Heaven

    题意:三个人,在给定正方形内,求第一个人拿到珠宝的概率.珠宝随机出现在正方形内. 思路:中垂线+半平面相交. #include<cstdio> #include<cstring> ...

  9. ffmpeg常见命令

    一.安装       下载ffmpeg,解压之后配置环境变量即为安装 打开dos界面,进入目标文件夹例如:E:/ cd E:\BaiduYunDownload\ffmpeg\ffmpeg_simple ...

  10. 【Hadoop代码笔记】目录

    整理09年时候做的Hadoop的代码笔记. 开始. [Hadoop代码笔记]Hadoop作业提交之客户端作业提交 [Hadoop代码笔记]通过JobClient对Jobtracker的调用看详细了解H ...