在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 ...
随机推荐
- 调用openoffice Com组件转换成PDF
//例子 OpenOfficeExportToPDF('file:///C:/SourceFile.odt', 'file:///C:/TargetFile.pdf'); 必须为URL格式的路径 ...
- geeksforgeeks@ Equal to product (Binary Search)
http://www.practice.geeksforgeeks.org/problem-page.php?pid=667 Equal to product Given an array of in ...
- 在linnux下,配置自动备份oacle
以oracle身份登录到linux,在oracle home目录下创建目录 shell $ mkdir shell 创建自动备份脚本 $ cd shell $ touch expdp.sh $ chm ...
- Java并发编程:Java ConcurrentModificationException异常原因和解决方法
Java ConcurrentModificationException异常原因和解决方法 在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同时对其进行修改就会抛出java.u ...
- Connecting Physics Bodies
[Connecting Physics Bodies] The kinds of joints you can create in Sprite Kit. You add or remove join ...
- VISA资源名称控件
NI-VISA能自动检测端口.通过前面板上的VISA资源名称控件或VISA查找资源函数可查看端口列表.在任何平台上,NI-VISA支持的最大串口数量为256,串口的默认数量取决于操作系统. VISA资 ...
- Ubuntu安装Burg
友情提示:本文只介绍了如何安装Burg,没有关于卸载Burg的相关说明.事实上,我后来直接新装了12.04,我没有卸载Burg的经验.考虑到Burg事关系统引导的大事,安装的话按本文来做应该没有问题, ...
- HDU1003前导和
简单维护前导和 #include<stdio.h> int main() { ],cas,key=; scanf("%d",&cas); while(cas-- ...
- Java安装程序制作
对于Java桌面应用来说,比较烦琐的就是安装部署问题,如:客户端是否安装有jre.jre版本.jre在哪里下载.如何用jre启动 Java应用等等.不要说刚接触电脑的人,就算是比较熟悉电脑,如果没有接 ...
- 关于 ServiceStack.Redis 4.0 License
今天更新了框架中的Redis驱动ServiceStack.Redis,最新版本4.0.5.0. 在做简单压力测试时出现异常,提示每小时允许6000个请求. The free-quota limit o ...