• MySQL开启大页支持


    InnoDB可以使用大页。最大可以支持4MB。

    有些系统,比如rhel默认是开启大页的。检查操作系统是否开启了大页:

    $> cat /proc/meminfo | grep -i huge
    HugePages_Total:       0
    HugePages_Free:       0
    HugePages_Rsvd:       0
    HugePages_Surp:       0
    Hugepagesize:       4096 kB

    该命令输出非空结果,表示支持大页。但是0表示没有配置使用大页。

    如果你的linux内核支持大页,可以使用以下命令为MySQL配置大页。通常,你可以将配置命令写入一个rc文件或者相似的启动文件,在系统启动的时候执行,这样每次启动就会配置好大页。配置命令应该在启动序列(boot sequence)的早期,在MySQL启动之前。

    要根据系统的具体配置进行配置:

    # 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

    对于MySQL,你通常会将shmmax配置大小接近shmall。

    # kernel.shmmax Controls the maximum shared segment size, in bytes
    # kernel.shmall Controls the maximum number of shared memory segments, in pages

     

     

    检查大页的配置:通过上面的配置,会显示如下结果

    $> cat /proc/meminfo | grep -i huge
    HugePages_Total:     20
    HugePages_Free:       20
    HugePages_Rsvd:       0
    HugePages_Surp:       0
    Hugepagesize:       4096 kB

     

    最后一步是给mysql用户设置unlimited值,可以通过/etc/security/limits.conf文件或者在mysqld_safe脚本中配置:

    ulimit -l unlimited

     

    默认情况下,MySQL是禁用大页的。开启支持,需要在启动的时候--large-pages选项。比如,你可以在my.cnf中设置:

    [mysqld]
    large-pages

    如果MySQL不能使用大页,会切换成传统的方式,并在error日志中提示:

    Warning: Using conventional memory pool

    检查大页的使用情况,可以检查/proc/meminfo:

    $> cat /proc/meminfo | grep -i huge
    HugePages_Total:     20
    HugePages_Free:       20
    HugePages_Rsvd:       2
    HugePages_Surp:       0
    Hugepagesize:       4096 kB

     

    以上只是示例,如何具体设置大页的数量呢?不同系统的huge pages大小可能不一样,Centos7 huge page 大小默认为2M。

    一般的建议是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

     

  • 相关阅读:
    MSSQL2005和Access在SQL的某一种写法上的区别。update的一种写法不一致。
    博客园 记录 了解多一点
    马克斯4.0 采集规则的编写
    谷歌代码托管 GoogleCode中 关于 版本的一个写法
    晒晒名企大公司的工资收入
    Asp.net中DataBinder.Eval用法的总结
    Mastering Debugging in Visual Studio 2010 A Beginner's Guide
    Solution Configuration but not Platform in VS2010 Toolbar
    window.showdialog完全手册,解决模态窗口,传值和返回值问题
    从此不再惧怕URI编码:JavaScript及C# URI编码详解
  • 原文地址:https://www.cnblogs.com/abclife/p/15998339.html
Copyright © 2020-2023  润新知