在Linux最大打开文件数限制下 MySQL 对参数的调整
http://www.actionsky.com/docs/archives/78
目录
起因
非root用户运行MySQL,当MySQL配置比较高时,MySQL运行中生效的参数值与配置的值不一样。
这篇文章的目的是为了说明在系统资源不够的情况下,MySQL 是怎么调整以下三个参数的: open_files_limit、max_connections、 table_open_cache。
说明
此文涉及到三个参数open_files_limit、 max_connections、 table_open_cache。与这三个参数相关的系统资源是打开文件数限制,即文件描述符(fd)限制。
系统参数与文件描述符的关系
– max_connection & fd : 每一个MySQL connection都需要一个文件描述符
– table_open_cache & fd: 打开一张表至少需要一个文件描述符,如打开MyISAM需要两个fd
– 系统的打开文件数限制可以通过 ulimit -n查看
MySQL调整参数的方式
- 根据配置(三个参数的配置值或默认值)计算
request_open_files(需要的文件描述符) - 获取有效的系统的限制值
effective_open_files - 根据
effective_open_files调整request_open_files - 根据调整后的
request_open_files,计算实际生效的参数值(show variables可查看参数值)
计算 request_open_files
根据配置值计算request_open_files
request_open_files有三个计算条件
// 最大连接数+同时打开的表的最大数量+其他(各种日志等等)
limit_1= max_connections + table_cache_size * 2 + 10;
//假设平均每个连接打开的表的数量(2-4)
//源码中是这么写的:
//We are trying to allocate no less than
// max_connections*5 file handles
limit_2= max_connections * 5;
//mysql 默认的默认是5000
limit_3= open_files_limit ? open_files_limit : 5000;
所以open_files_limit期待的最低
request_open_files= max(limit_1, limit_2,limit_3);
计算effective_open_files
MySQL 的思路:
在有限值的的范围内MySQL 尽量将effective_open_files的值设大

修正 request_open_files
requested_open_files= min(effective_open_files, request_open_files);
计算出生效的参数值
修正 open_files_limit
open_files_limit = effective_open_files
修正 max_connections
max_connections 根据 request_open_files 来做修正。
limit = requested_open_files - 10 - TABLE_OPEN_CACHE_MIN * 2;
- 如果配置的
max_connections值大于limit,则将max_connections的值修正为limit - 其他情况下
max_connections保留配置值
修正table_cache_size
table_cache_size 会根据 request_open_files 来做修正
// mysql table_cache_size 最小值,400
limit1 = TABLE_OPEN_CACHE_MIN
// 根据 requested_open_files 计算
limit2 = (requested_open_files - 10 - max_connections) / 2
limit = max(limit1,limt2);
- 如果配置的
table_cache_size值大于limit,则将table_cache_size的值修正为limit - 其他情况下
table_cache_size保留配置值
举例
以下用例在非 root 用户下运行
参数设置:
//mysql
max_connections = 500
table_open_cache = 999
//ulimit -n
1500
生效的值:
open_files_limit = 1500
max_connections = min[(1500 - 10 - 800),500] = 500
table_open_cache = ( 1500 - 10 - 500) / 2 = 495
在Linux最大打开文件数限制下 MySQL 对参数的调整的更多相关文章
- 调整Linux最大打开文件数
#!/bin/bash ## 文件数限制 ulimit -n ulimit -Sn ulimit -Hn ## fs.nr_open,进程级别 ## fs.file-max,系统级别 ## 最大文件描 ...
- 第一次项目上Linux服务器(四:CentOS6下Mysql数据库的安装与配置(转))
一.mysql简介 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库,咱 ...
- Java虚拟机05.1(各种环境下jvm的参数如何调整?)
cmd下 eclipse下 tomcat下 cmd下指定jvm参数 在cmd下执行Java程序可以通过如下方式之地需要配置的Java 虚拟机参数: 这里只是指定了对初始为2M,新生代为1M,堆最大值为 ...
- Linux(CentOS或RadHat)下MySQL源码安装
安装环境: CentOS6.3 64位 软件: Mysql-5.6 所需包: gcc/g++ :MySQL 5.6开始,需要使用g++进行编译.cmake :MySQL 5.5开始,使用cmake进 ...
- 第一次项目上Linux服务器(五:CentOS7下Mysql数据库的安装与配置(转))
好像在CentOS 7系统中,默认安装的mysql是它的分支mariadb.所以不能像CentOS-6.3那样安装,如下: [root@izwz ~]# yum -y install mysql my ...
- windows下mysql表名区分大小写
windows下mysql默认是不区分大小写的,但是linux会区分大小写 如何让windows下mysql区分大小写呢? 修改 my.ini 里面的mysqld部分 #区分大小写 lower_cas ...
- linux 打开文件数 too many open files 解决方法
linux 打开文件数 too many open files 解决方法 too many open files 出现这句提示的原因是程序打开的文件/socket连接数量超过系统设定值. 查看每个用户 ...
- 放开Linux内核对用户进程可打开文件数和TCP连接的限制
一. 检查linux内核uname -alsb_release -a 二. 用户进程可打开文件数限制1) vim /etc/security/limits.conf* - nof ...
- linux打开文件数测试
/proc/sys/kernel/threads-max 系统最大线程数量 /proc/sys/vm/max_map_count 限制一个进程可以拥有的VMA(虚拟内存区域)的数量 /proc/sys ...
随机推荐
- iOS App中数据加载的6种方式
我们看到的APP,往往有着华丽的启动界面,然后就是漫长的数据加载等待,甚至在无网络的时候,整个处于不可用状态.那么我们怎么处理好界面交互中的加载设计,保证体验无缝衔接,保证用户没有漫长的等待感,而可以 ...
- 桶排序-Node.js-对象排序
const b = [{index:5,name:"s5"}, {index:2,name:"s2"}, {index:3,name:"s3" ...
- css斜线
斜线 .demo{ display: inline-block; width: 400px; height: 100px; resize: both; overflow: auto; margin-t ...
- C++11多态函数对象包装器
[C++11多态函数对象包装器] 针对函数对象的多态包装器(又称多态函数对象包装器)在语义和语法上和函数指针相似,但不像函数指针那么狭隘.只要能被调用,且其参数能与包装器兼容的都能以多态函数对象包装器 ...
- c#读properties文件
@(编程) properties文件 MONGO_URL = mongodb://172.16.20.3/srtc_dc CURRENT_VERSION = 2.0 IS_AUTO_UPDATE = ...
- TcxDBVerticalGrid优秀的编辑控件
- windows服务安装及卸载
1)安装脚本Install.bat%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe JobSchedule.exeNet ...
- KVM 虚拟机命令行安装配置
KVM作为linux内核的一部分,有着无法比拟的优势,相信KVM的大范围企业应用指日可待. 一.KVM宿主服务器环境配置 1. 查看CPU是否支持VT技术 cat /proc/cpuinfo | eg ...
- hdoj 5417 Victor and Machine
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5417 水题,一开始题目读错了做了好久,每次停工以后都是重新计时. 需要注意的是,先除后乘注意加括号 # ...
- ADT下开发环境的配置--个人配置啦 Eclipse Color Themes
一. Eclipse Color Themes的安装 首先 这个ADT没有Marketplace Client 需要装一个, 节选自: http://blog.csdn.net/liu37226700 ...