1. 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
  2.  
  3. Hugepagesize 的话默认是每页 2MB
  1. [root@localhost ]# cat /proc/meminfo | grep -i huge
  2.   HugePages_Total: 11
  3.   HugePages_Free: 11
  4.   HugePages_Rsvd: 0
  5.   HugePages_Surp: 0
  6.   Hugepagesize: 2048 kB //2MB

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

  1. [root@localhost]# getconf PAGESIZE
  2.   4096
  1. 系统参数:
  2.  
  3.   kernel.shmmax:表示单个共享内存段的最大值,以字节为单位,此值一般大于物理内存的一半.SHMMAX 的设置直接与SGA相关
  4.  
  5.   kernel.shmmin:表示单个共享内存段的最小值,默认为1字节,通常不用设置
  6.  
  7.   kernel.shmall:整个系统范围内可用共享页的总数,单位是页,在32位系统上1页等于4KB,也就是4096字节,
    计算公式:shmmax/PAGE_SIZE
  8.  
  9.   kernel.shmmin:整个系统范围内存段的最大数量,一般为4096个段

作用:

  1. 如果设置MySQL使用 huge page 至少有两个好处,
  2.  
  3. 一个是可以减少 Translation Lookaside Buffer (TLB) 失误以提高性能
  4.  
  5. 另一个是利用 huge page不会swap的特性保证MySQL的内存不会被交换到swap
  6. MySQL 5.0.3之后在linux上支持huge page,可以使用 large-page 选项启动MySQL
  1.  
  2. mysql> select @@innodb_additional_mem_pool_size/1024/1024;
  3. +---------------------------------------------+
  4. | @@innodb_additional_mem_pool_size/1024/1024 |
  5. +---------------------------------------------+
  6. | 8.00000000 |
  7. +---------------------------------------------+
  8. 1 row in set (0.00 sec)
  9.  
  10. mysql> select @@innodb_buffer_pool_size/1024/1024;
  11. +-------------------------------------+
  12. | @@innodb_buffer_pool_size/1024/1024 |
  13. +-------------------------------------+
  14. | 200.00000000 |
  15. +-------------------------------------+
  16. 1 row in set (0.00 sec)
  17.  
  18. mysql> select @@tmp_table_size/1024/1024;
  19. +----------------------------+
  20. | @@tmp_table_size/1024/1024 |
  21. +----------------------------+
  22. | 16.00000000 |
  23. +----------------------------+
  24. 1 row in set (0.18 sec)
  25.  
  26. mysql> select @@innodb_log_buffer_size/1024/1024;
  27. +------------------------------------+
  28. | @@innodb_log_buffer_size/1024/1024 |
  29. +------------------------------------+
  30. | 8.00000000 |
  31. +------------------------------------+
  32. 1 row in set (0.00 sec)
  33.  
  34. mysql> select @@max_heap_table_size/1024/1024;
  35. +---------------------------------+
  36. | @@max_heap_table_size/1024/1024 |
  37. +---------------------------------+
  38. | 16.00000000 |
  39. +---------------------------------+
  40. 1 row in set (0.00 sec)

内存和:sum (MB)

  1. 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

计算多少个大页

  1. sum/2=124.0000

 

增加几个页: 130页

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

8个buffer poll

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

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

  1.  
  2. vi /etc/sysctl.conf
  3.  
  4. kernel.shmmni = 4096
    vm.nr_hugepages=130
  5. vm.hugetlb_shm_group=503
  6.  
  7. sysctl -w
  1. vi /etc/security/limits.conf
  2.  
  3. @mysql soft memlock unlimited
  4. @mysql hard memlock unlimited
  1. my.cnf

[mysqld]
large-pages

  1.  
  1. 这个指定总共huge page的页数,可以放到/etc/rc.local中。由于分配时需要有连续的内存空间,所以如果在运行了一段时间的系统上执行,可能无法分配到指定的数量,即使还有足够的内存。
  2.  
  3. 之后还需要设置内核参数kernel.shmmaxkernel.shmall,否则MySQL启动时会报22的错误
  4.  
  5. InnoDB: HugeTLB: Warning: Failed to allocate 536887296 bytes. errno 22
  6.  
  7. shmall是共享内存的总大小,单位是页,默认20971528G)。可以使用sysctl -w或者在/etc/sysctl.conf中设置
  8.  
  9. 除此还需要设max locked memory,使用ulimit -l或设置/etc/security/limits.conf,否则会报12的错误:
  10.  
  11. Warning: Failed to allocate 31457280 bytes from HugeTLB memory. errno 12
  1. [root@localhost ~]# cat /proc/meminfo | grep -i huge
  2. HugePages_Total: 130
  3. HugePages_Free: 130
  4. HugePages_Rsvd: 4
  5. HugePages_Surp: 0
  6. Hugepagesize: 2048 kB

eg:

  1. # Set the number of pages to be used.
  2. # Each page is normally 2MB, so a value of 20 = 40MB.
  3. # This command actually allocates memory, so this much
  4. # memory must be available.
  5. echo 20 > /proc/sys/vm/nr_hugepages
  6.  
  7. # Set the group number that is permitted to access this
  8. # memory (102 in this case). The mysql user must be a
  9. # member of this group.
  10. echo 102 > /proc/sys/vm/hugetlb_shm_group
  11.  
  12. # Increase the amount of shmem permitted per segment
  13. # (12G in this case).
  14. echo 1560281088 > /proc/sys/kernel/shmmax
  15.  
  16. # Increase total amount of shared memory. The value
  17. # is the number of pages. At 4KB/page, 4194304 = 16GB.
  18. 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. ajax post提交数据, input type=submit 返回prompt aborted by user

    添加 return false;否则就报prompt aborted by user异常

  2. 我的电脑在用Microsoft Script Editor 调试,关不了?

    是不是上网后经常出现错误提示框,那在浏览器的工具选“internet选项”进入“高级”在“禁用脚本调试(internet explor)”和“禁用脚本调试”前勾上.Microsoft Script E ...

  3. UDP编程(八)

    此为网络编程系列的目录,后续会把内容补上.......

  4. POJ 1815 Friendship ★(字典序最小点割集)

    [题意]给出一个无向图,和图中的两个点s,t.求至少去掉几个点后才能使得s和t不连通,输出这样的点集并使其字典序最大. 不错的题,有助于更好的理解最小割和求解最小割的方法~ [思路] 问题模型很简单, ...

  5. Java多线程 -- 深入理解JMM(Java内存模型) --(五)锁

    锁的释放-获取建立的happens before 关系 锁是Java并发编程中最重要的同步机制.锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息. 下面是锁释放-获取的示例代 ...

  6. 黑盒测试用例设计方法&理论结合实际 -> 判定表驱动法

    一. 概念 判定表是分析和表达多逻辑条件下执行不同操作的情况的工具. 二. 判定表驱动法的应用 判定表的优点: a. 能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏.因此,利用判定表能 ...

  7. [selenium webdriver Java]隐式的等待同步

    Selenium WebDriver提供了隐式等待来同步测试.当使用了隐式等待执行测试的时候,如果WebDriver没有在DOM中找到元素,将继续等待,超出设定时间后,抛出找不到元素异常 即,当元素没 ...

  8. SQL Server优化相关的工具脚本

    SQL Server性能优化的一些常用脚本,适用于SQL Server 2008,更高的版本某些系统表的字段有所不同,建议参考MSDN. 死锁相关 /************************* ...

  9. OpenCV在Debug和Release两种模式下布恩那个同时运行的问题

    首先,可以肯定的说,两者是可以随时切换进行运行的,若不能运行,必定是配置出了问题 以Debugx64和Releasex64为例: 在Releasex64模式下,我配置好了各种路径: 于是乎,我切换到D ...

  10. Codeforces Round #225 (Div. 2)

    比赛时候只做出AB,E题一眼看过去似乎线段树能搞,但是写完过不了样例,才发现看错题了,然后比赛就没啥时间了~~整体状况还是很糟糕,A,B题实在出得太慢,然后持续到现在还没出过C题...不能更弱%> ...