网上大页的资料抄来抄去, 没一个是正确的
. 本人经过查Linux说明和实践, 现将线上的配置总结一下.
效果对比
未配置HugePage:
配置HugePage后 (并加多客户端个数向MySQL施压):
总结: 从对比数据看出来,开启HugePage后,QPS 2~3倍,提升下, UserCPU状态只是多消耗0.2~0.5而已. Load低成3~5倍. 长短时间的运行,表情都很稳定. 大幅度减少重启后MySQL预热时间(Hit列提高几个百分点).
原理资料
大家知道,OS HugePage开启后,内存置换大幅度减少.这没什么高深的技术难度,但是很考验原理的理解和配置项的细心程度.
根据: linux kernel描述
https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt
- HugePages_Total is the size of the pool of huge pages.
- HugePages_Free is the number of huge pages in the pool that are not yet
allocated.
- HugePages_Rsvd is short for "reserved," and is the number of huge pages for
which a commitment to allocate from the pool has been made,
but no allocation has yet been made. Reserved huge pages
guarantee that an application will be able to allocate a
huge page from the pool of huge pages at fault time.
- HugePages_Surp is short for "surplus," and is the number of huge pages in
the pool above the value in /proc/sys/vm/nr_hugepages. The
maximum number of surplus huge pages is controlled by
/proc/sys/vm/nr_overcommit_hugepages.
HugePages_Total , HugePages_Free , HugePages_Rsvd , HugePages_Surp 都是页的个数. 其中每页的大小和Linux Kernel密切相关. 例如: centos 6 x64上是2MB 一个HugePage.
HugePages_Rsvd 上面说明是保留的页数.
内存页置换原理:
http://www.ibm.com/developerworks/cn/linux/l-cn-hugetlb
Kernel的内存页:
https://www.kernel.org/doc/Documentation/sysctl/kernel.txt
MySQL使用HugePage:
http://dev.mysql.com/doc/refman/5.5/en/large-page-support.html http://dev.mysql.com/doc/refman/5.6/en/large-page-support.html
我们在Linux上,使用命令查看相关的Huge Page在OS上的参数.
cat /proc/meminfo | fgrep -i Huge
AnonHugePages: 5775360 kB
HugePages_Total: 47872
HugePages_Free: 4304
HugePages_Rsvd: 361
HugePages_Surp: 0
Hugepagesize: 2048 kB
环境
前面属述的效果图相关环境如下:
CentOS release 6.5 (Final)
Linux 2.6 x86_64
MySQL 5.5 (5.6也有一样有2~3倍提升)
配置
Linux OS
- vm.nr_hugepages = 47872 #开启47872个大页. 相当于
- vm.hugetlb_shm_group = 499 #可以使用的HugePage,Linux进程相关的用户组ID
- kernel.shmmax = 94489280512 # Controls the maximum shared segment size, in bytes #单个进程下最大能使用的HugePage个数
- kernel.shmall = 230686720 # Controls the maximum number of shared memory segments, in pages. default page size : 4KB #Linux System整个所能使用的个数
我喜欢一次性把几个参数在文件中配置完. 记住用命令 sysctl -p生效之.
MySQL --defaults-file 中开启
[mysqld]
large-pages
参数大小计算说明和示例
*numastat 可以看到当前系统下numa状态.
*注意MySQL manual提示 : For MySQL usage, you normally want the value of shmmax to be close to the value of shmall. 我们尽量的把shmmax -> 接近 shmall的值.
- 1st step确定机器的CPU processors(指我们在Linux命令看到的个数. cat /proc/cpuinfo | fgrep -i 'processor' | wc -l )
- 2nd step确定MySQL每个connection所消耗的内存, 我们可以使用mysqltuner.pl 查看到 http://mysqltuner.com/
网上很多的资料说BufferPool 配置到80%的物理内存, 是有道理的, 同时这是有前提的max_connections是很少的.
总的使用内存不能超过物理内存的90%. (这个原理需要单独写篇BLOG)
我的配置示例是:
CPU 32 processors .
选择 mysql my.cnf
max_connections = 3000 # 约47GB
innodb_buffer_pool_size = 84480M
innodb_buffer_pool_instances = 30 #每个instance是2.75GB. 因为每个在2.5GB~3GB是很高效的, 体现在MySQL RT上. 而30(CPU 32)这个数量容易计算.留一两个processors给系统. 而
每个实例会多占用近100MB的HugePage
加上其他的conns消耗:
Total buffers: 83.0G global + 16.2M per thread (3000 max threads)
[OK] Maximum possible memory usage: 130.7G (82% of installed RAM)
这样30+4(留足一定的Huge Pages给MySQL和系统其他用).
vm.nr_hugepages = 47872 ( HugePages_Total : 47872 34*2.75GB / 2MB ) <<< 物理内存的80%.
kernel.shmmax = 94489280512 ( 32*2.75GB = 94489280512 bytes )
kernel.shmall = 230686720 ( 32*2.75 GB / 4KB = 230686720 ) 其中: 4KB 是LinuxKernelPage基本大小.
--
如果不留足vm.nr_hugepages , MySQL启动会报错误,启动不了!
看看MySQL 占用效果:
ipcs | fgrep mysql
使用top (请忽略RES).
关注 VIRT一项.
----
- MySQL 最好根据实际需要配置上大的内存的.(反正现在内存很便宜的.)
- 如果是一机器上的单实例, 直接关闭 numa. 或是设置kernerl启动项 在/etc/grub.conf , numa=off
- 关闭swap. swapoff -a 执行. 或是在 /etc/rc.local 追加swapoff -a.
--------
最后我们可以按照MySQL defaults-file和机器的物理内存大小配置线上的HugePage参数.
我们只是配置正确,不是在"调优". <高性能MySQL>提示.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
有应聘"MySQL/MariaDB,运维/开发", 请发邮件至: linzuxiong1988@gmail.com, 并取得联系.
工程师招聘:
http://job.youzan.com 请联系我: linzuxiong1988@gmail.com .
- 大小: 99.1 KB
- 大小: 106.2 KB
- 大小: 17.7 KB
- 大小: 174.5 KB
- 大小: 62.8 KB
分享到:
相关推荐
在Linux系统中,可以通过创建一个初始化脚本(如`mysql.server`)并将其放置在`/etc/init.d/`目录下来实现MySQL服务的自动启动。之后,使用`chmod`命令改变脚本的权限: ```bash chmod 755 /etc/rc.d/init.d/mysql ...
2.将 MySQL 解压到待安装目录,使用%MYSQL_HOME%表示 3.打开文件my-huge.ini另存为my.ini,在my.ini文件中加入如下配置,再放到C:/windows下(也可以放在安装目录下,进行手工指定(配置) my.ini 的路径) [mysqld]...
### Linux系统下源码版MySQL安装详解 #### 安装背景与目的 在Linux环境下,通过源码方式安装MySQL能够使我们更好地定制安装环境,并且能够深入理解MySQL的安装过程及依赖关系。本文将详细介绍如何在Linux系统下不...
### Linux下安装MySQL 5.0 #### 测试环境: - 操作系统:CentOS 5.2 - MySQL版本:5.0.67 #### 第一步:下载mysql-5.0.67.tar.gz 在进行安装之前,首先需要获取MySQL 5.0.67的源代码包。可以通过MySQL官方网站或...
### Linux系统下源码版MySQL安装...需要注意的是,这里使用的MySQL版本为5.5.27,如果使用更高版本的MySQL,则可能需要调整部分配置选项。此外,在实际部署环境中还可能需要根据具体需求进一步调整MySQL的配置参数。
- 使用Hugepages后,由于每个页面的大小增加到了2MB或更大,因此所需Page Table条目的数量大幅减少,从而显著降低了Page Table的内存占用。 - 例如,对于一个没有配置Hugepages、拥有128GB内存的系统,其Page ...
在Linux系统中,HugePage是一种优化内存管理的技术,它允许操作系统分配比标准页(通常是4KB)更大尺寸的内存页,例如2MB或1GB。这样做的主要目的是减少内存管理开销,提高大规模数据处理的性能。本文将深入探讨Huge...
- **MySQL**:一款广泛使用的开源关系型数据库管理系统。 - **PHP**:一种服务器端脚本语言,用于开发动态网站。 #### 二、环境准备 本指南适用于基于Red Hat系的Linux发行版,如CentOS或RHEL等。 ##### 1. 系统...
在Linux系统中,HugePages是一种优化内存管理的技术,它允许操作系统分配连续的大块物理内存,从而减少或消除页面映射表(页表)的开销,提高内存访问效率,尤其是对于那些需要大量连续内存的高性能应用,如数据库...
- 进入`/usr/local`目录,使用`# chmod 755 mysql-5.1.60-linux-i686-glibc23.tar.gz`授予用户操作此压缩包的权限。 - 使用`# tar -xzvf mysql-5.1.60-linux-i686-glibc23.tar.gz`解压文件。 - 解压后,将文件夹...
### Linux 下 MySQL 5.0.67 的安装与配置详解 #### 一、环境准备与软件包解压 在开始安装之前,请确保您的 Linux 系统已经安装了必要的依赖库,例如 `gcc`(GNU Compiler Collection)、`make` 等。这些工具通常...
- `my-innodb-heavy-4G.cnf`:针对使用InnoDB引擎且内存大于2GB的系统。 选择合适的配置文件,并根据实际需求进行调整,例如设置更大的缓存、调整连接数等。 ### 六、启动与测试 安装完成后,可以启动Nginx、...
在Linux环境下安装与配置MySQL是一项常见且重要的任务,尤其对于那些需要在服务器上运行数据库应用的用户来说。根据提供的文件信息,我们可以详细解析并总结出以下关键知识点: ### Linux下安装MySQL步骤 #### 1. ...
### Linux CentOS MySQL 配置文件详解 #### 一、概览 在Linux CentOS环境中安装MySQL时,通过RPM包安装的方式会自带多个预设的配置文件。这些配置文件基于不同的内存大小进行了分类优化,旨在适应不同场景下的需求...
以下是对安装 MySQL 5.1.55 在 Linux 系统上的详细步骤的解析: 1. **下载 MySQL**: - 首先,你需要从官方或可靠的源下载 MySQL 5.1.55 的归档文件,例如 `mysql-5.1.55.tar.gz`,并将其放置在用户目录下,如 `/...
dbforge Data Studio for SQL Server is a comprehensive solution for data analysts and application developers. It allows users to efficiently Explore, Analyza and Report on huge amounts of data in SQL ...
### MySQL之Linux安装与索引优化笔记 #### 一、MySQL简介及Linux版安装 **1. MySQL概述** MySQL是一种关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,目前属于Oracle公司。它是一种开源软件,因其性能...
在Linux环境中将MySQL 5升级到5.5的版本是一个重要的任务,因为它涉及到数据库服务的稳定性和性能提升。以下是一个详细的步骤指南: 1. **安装依赖包**:首先,确保系统中有所有必要的依赖项,包括`autoconf`, `...