MySQL数据库配置大页

0    652    8

Tags:

👉 本文共约1515个字,系统预计阅读时间或需6分钟。

简介

一般情况下使用的内存为每页4K,使用 huge page 的话默认是每页 2M。如果设置MySQL使用 huge page 至少有两个好处,一个是可以减少 Translation Lookaside Buffer (TLB) 失误以提高性能,另一个是利用 huge page不会swap的特性保证MySQL的内存不会被交换到swap中。

MySQL 5.0.3之后在linux上支持huge page,可以使用 large-page 选项启动MySQL。当然还有一些相关的系统设置。

配置MySQL数据库使用大页

1、设置max locked memory

@mysql 表示mysql用户组的不受限。

ulimit -l unlimited加入mysqld_safe 命令中:

保证max locked memory为unlimited。

2、将mysql用户所属组添加到系统内核文件/etc/sysctl.conf中

3、在 /etc/sysctl.conf 文件中添加 vm.nr_hugepages 参数,使用sysctl -p立即生效:

使用命令grep -i HugePage /proc/meminfo查看,如果HugePages_Free未到设定的值,那么可以多执行几次sysctl -p,或者重启OS。

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

vm.nr_hugepages为页的个数(每页为2Mb),需要比参数innodb_buffer_pool_size大。

4、设置内核参数kernel.shmmax和kernel.shmall

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

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

配置/etc/sysconfig.conf:

  • shmmax是最大的共享内存段的大小,单位是字节,这个应该比innodb_buffer_pool要大,可以取比物理内存-1byte。

  • shmall是共享内存的总页个数,单位是页,每页4KB。若一个共享内存段的最大大小是 16G ,那么需要共享内存页数是 16GB/4KB=4194304 (页)。

    对于MySQL使用,一般希望的值是 shmmax接近的值 shmall。

5、配置my.cnf参数文件

6、最后重启OS和MySQL实例。

注意,如果mysql告警日志中有如下信息说明大页内存不足:

7、查看大页的使用情况:

HugePages_Total为所分配的页面数目,和Hugepagesize相乘后得到所分配的内存大小。

HugePages_Free为从来没有被使用过的Hugepages数目。即使 MYSQL INNDOB 缓冲池已经分配了这部分内存,但是如果没有实际写入,
那么看到的还是Free的。这是很容易误解的地方。

HugePages_Rsvd为已经被分配预留但是还没有使用的page数目。在 MYSQL 刚刚启动时,大部分内存应该都是Reserved并且Free的,随着
INNDOB 缓冲池的使用,Reserved和Free都会不断的降低。

HugePages_Free – HugePages_Rsvd 这部分是没有被使用到的内存,如果没有其他的 MYSQL实例,这部分内存也许永远都不会被使用到,也就是被浪费了。

MySQL中查询:

If large page support is enabled, large_page_size shows the size of memory pages. Large memory pages are supported only on Linux; on other platforms, the value of this variable is always 0.

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部