在Linux最大打开文件数限制下 MySQL 对参数的调整

http://www.actionsky.com/docs/archives/78

2016年4月7日  周文雅

目录

起因

非root用户运行MySQL,当MySQL配置比较高时,MySQL运行中生效的参数值与配置的值不一样。
这篇文章的目的是为了说明在系统资源不够的情况下,MySQL 是怎么调整以下三个参数的: open_files_limitmax_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调整参数的方式

  1. 根据配置(三个参数的配置值或默认值)计算request_open_files(需要的文件描述符)
  2. 获取有效的系统的限制值effective_open_files
  3. 根据effective_open_files调整request_open_files
  4. 根据调整后的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
时间: 2024-10-13 06:31:06

在Linux最大打开文件数限制下 MySQL 对参数的调整的相关文章

Linux最大打开文件数

Linux下每个用户.用户的每个进程能够同时打开的文件句柄数量是有限制的.不用的文件句柄要关上. 一.查看最大打开文件数 1.查看系统及最大打开文件数 cat /proc/sys/fs/file-max //该文件指定了可以分配的文件句柄的最大数目 2.查看当前用户最大打开文件数 # ulimit -Hn //查看硬限制 # ulimit -Sn //查看软限制 3.查看所有进程的文件打开数 lsof |wc -l 查看某个进程打开的文件数  lsof -p pid |wc -l 二.设置最大打

修改Linux系统打开文件数限制

步骤 1     修改/etc/security/limits.conf文件,在文件中添加两行 # vi /etc/security/limits.conf 添加内容: speng soft nofile 10240 speng hard nofile 10240 步骤 2     修改/etc/pam.d/login文件,在文件中添加一行 # vi /etc/pam.d/login 添加内容: session required /lib/security/pam_limits.so

linux系统打开文件数过多的解决办法

一.永久生效.1. /etc/pam.d/login 添加       session required /lib/security/pam_limits.so2. /etc/security/limits.conf 添加       * soft nofile 65536       * hard nofile 655363.vi /etc/sysctl.conf 添加       fs.file-max = 6553600二.临时生效.   ulimit -n 65536   或将该命令写入

Linux(CentOS或RadHat)下MySQL源码安装

安装环境: CentOS6.3 64位 软件: Mysql-5.6 所需包: gcc/g++ :MySQL 5.6开始,需要使用g++进行编译.cmake  :MySQL 5.5开始,使用cmake进行工程管理,cmake需要2.8以上版本.bison  :MySQL语法解析器需要使用bison进行编译.ncurses-devel :用于终端操作的开发包.zlib    :MySQL使用zlib进行压缩 有关库包下载: 可以自己去官网下载,也可以去网盘下载 http://pan.baidu.co

Linux 打开文件数1024限制的原理以及解决办法

/proc/sys/fs/file-max  该文件指定了可以分配的文件句柄的最大数目. 查看最大值: [[email protected] home]# cat /proc/sys/fs/file-max  100977 [[email protected] home]# 这表明这台Linux系统最多允许同时打开(即包含所有用户打开文件数总和)100977个文件,是Linux系统级硬限制,所有用户级的打开文件数限制都不应超过这个数值.通常这个系统级硬限制是Linux系统在启动时根据系统硬件资源

Cent OS下修改用户打开文件数限制

如果有用户test,现在需要修改此用户打开文件数限制,步骤如下:1 修改Linux下资源使用的配置文件,添加以下参数:sudo vim /etc/security/limits.conftest soft nproc 65534test hard nproc 65534test soft nofile 65534test hard nofile 65534 参数说明:nproc:用户可用的最大进程数量nofile:用户可打开的最大文件总数soft即是软限制,hard是硬限制.用户可以超过soft

linux 打开文件数 too many open files 解决方法

linux 打开文件数 too many open files 解决方法 too many open files 出现这句提示的原因是程序打开的文件/socket连接数量超过系统设定值. 查看每一个用户最大同意打开文件数量 ulimit -a [email protected]:~$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 20 fi

Linux 打开文件数

linux设置最大打开文件数 - daiyudong2020的博客 - CSDN博客 https://blog.csdn.net/daiyudong2020/article/details/77828959 linux如何查看文件打开数?设置最大打开文件数_百度经验https://jingyan.baidu.com/article/1974b289a397d1f4b1f77495.html 原文地址:https://www.cnblogs.com/rgqancy/p/10917819.html

修改用户进程可打开文件数限制(转)

1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量 的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄).可使用ulimit命令查看系统允许 当前用户进程打开的文件数限制: [[email protected] ~]$ ulimit -n 1024 这表示当前用户的每个进程最多允许同时打开1024个文件,这1024个