mysql查看已打开文件数_MySQL如何计算打开文件数_MySQL
每打开一个MyISAM表,就需要使用2个文件描述符,咱们来验证一下MySQL如何计算打开文件数。
一、试验
从手册的"6.4.8. How MySQL Opens and Closes Tables"可以了解到,每打开一个MyISAM表,就需要使用2个文件描述符,咱们来验证一下。
1. 重启mysqld
/etc/init.d/mysql restart
2. 看看打开了几个文件
lsof | grep /home/mysql
...
mysqld 24349 mysql 5u unix 0x000001041e8de040 4244009 /home/mysql/mysql.sock
mysqld 24349 mysql 6u REG 8,33 2048 30425188 /home/mysql/mysql/host.MYI
mysqld 24349 mysql 7u REG 8,33 0 30425189 /home/mysql/mysql/host.MYD
mysqld 24349 mysql 8u REG 8,33 2048 30425153 /home/mysql/mysql/user.MYI
mysqld 24349 mysql 9u REG 8,33 892 30425155 /home/mysql/mysql/user.MYD
mysqld 24349 mysql 10u REG 8,33 5120 30425126 /home/mysql/mysql/db.MYI
mysqld 24349 mysql 11u REG 8,33 3080 30425148 /home/mysql/mysql/db.MYD
mysqld 24349 mysql 12u REG 8,33 4096 30425154 /home/mysql/mysql/tables_priv.MYI
mysqld 24349 mysql 13u REG 8,33 0 30425157 /home/mysql/mysql/tables_priv.MYD
mysqld 24349 mysql 14u REG 8,33 4096 30425143 /home/mysql/mysql/columns_priv.MYI
mysqld 24349 mysql 15u REG 8,33 0 30425156 /home/mysql/mysql/columns_priv.MYD
mysqld 24349 mysql 16u REG 8,33 4096 30425127 /home/mysql/mysql/procs_priv.MYI
mysqld 24349 mysql 17u REG 8,33 0 30425136 /home/mysql/mysql/procs_priv.MYD
mysqld 24349 mysql 18u REG 8,33 1024 30425173 /home/mysql/mysql/servers.MYI
mysqld 24349 mysql 19u REG 8,33 0 30425174 /home/mysql/mysql/servers.MYD
mysqld 24349 mysql 20u REG 8,33 2048 30425182 /home/mysql/mysql/event.MYI
mysqld 24349 mysql 21u REG 8,33 0 30425183 /home/mysql/mysql/event.MYD
...
可以看到,总共打开了8个表,每个表分别有2个文件描述符,看来没错。
3. 再来看 status 结果
mysql>show global status like 'open_%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| Open_files | 17 |
| Open_streams | 0 |
| Open_table_definitions | 15 |
| Open_tables | 8 |
| Opened_files | 52 |
| Opened_tables | 15 |
+------------------------+-------+
4. flush tables 后再看看
mysql>flush tables;
mysql> show global status like 'open_%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| Open_files | 1 |
| Open_streams | 0 |
| Open_table_definitions | 0 |
| Open_tables | 0 |
| Opened_files | 52 |
| Opened_tables | 15 |
+------------------------+-------+
lsof | grep /home/mysql
...
mysqld 24349 mysql 5u unix 0x000001041e8de040 4244009 /home/mysql/mysql.sock
mysqld 24349 mysql 22u unix 0x00000102378ff980 4244128 /home/mysql/mysql.sock
...
可以看到,flush 之后,所有的文件描述符都释放了。
通过测试可以得知,另一个打开的文件描述符是 slow query log所用。
如果是有大量的 MyISAM 表,那么就需要特别注意打开文件数是否会超出限制了。
二、原理
接下来仔细了解下这个最大文件数相关的参数:
table_cache (新版本改成了 table_open_cache) The number of cached open tables.
open_files_limit If this is not 0, then mysqld will use this value to reserve file descriptors to use with setrlimit().
If this value is 0 then mysqld will reserve max_connections*5 or max_connections + table_cache*2 (whichever is larger)
number of files.
如果 open_files_limit 不是设置为 0,则以 setrlimit() 函数计算后的结果为准,如果设置为 0,则实际值是 max_connections*5 或 max_connections + table_cache*2 中的最大者。
因此,想要解决打开文件数超限的问题,还需要综合系统内核限制(ulimit -n),mysqld自身限制(open_files_limit),以及表缓存数(table_open_cache)等多方面因素。
不过,实际测试中,发现却不是这样的,open_files_limit采用了内核的最大限制,而非上面的计算结果。
1. 查看内核限制
ulimit -n
65535
2. 修改 my.cnf 限制
vi /etc/my.cnf
...
open_files_limit = 10000
...
3. 重启 mysqld
/etc/init.d/mysql restart
4. 查看结果
mysql>show global variables like '%open%';
| open_files_limit | 65535 |
| table_open_cache | 1000 |
5. 不设置 open_files_limit 看看
vi /etc/my.cnf
...
#open_files_limit = 10000
...
重启
/etc/init.d/mysql restart
查看
mysql>show global variables like '%open%';
| open_files_limit | 65535 |
| table_open_cache | 1000 |
而这个时候,按计算公式结果如下:
| max_connections | 100 |
| table_open_cache | 1000 |
来计算一下:
max_open_files_1 = max_connections + table_cache * 2 = 100 + 1000 * 2 = 2100
max_open_files_2 = max_connections*5 = 100 * 5 = 500
6. 修改 ulimit 试试看:
unlimit -n 5000
vi /etc/my.cnf
...
open_files_limit = 10000
...
/etc/init.d/mysql restart
mysql>show global variables like '%open%';
| open_files_limit | 10000 |
| table_open_cache | 1000 |
open_files_limit 比内核最大限制数还大,因此以 open_files_limit 为准。
vi /etc/my.cnf
...
#open_files_limit = 10000
...
/etc/init.d/mysql restart
mysql>show global variables like '%open%';
| open_files_limit | 5000 |
| table_open_cache | 1000 |
看到了,变成了新的内核最大限制
看到了吧,结果完全跟文档描述的以及mysql源码中写的不一样,看来预编译版本有些地方不太可靠啊 :(
以上测试在mysql 5.1.23-rc(预编译), mysql-5.1.24-rc(自编译) 以及 5.0.45(预编译) 均一样。
uname -a
Linux s1.yejr.com 2.6.9-55.ELsmp #1 SMP Fri Apr 20 16:36:54 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux
mysql> select version();
+---------------+
| version() |
+---------------+
| 5.1.23-rc-log |
+---------------+
本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉
本文系统来源:php中文网
TAG标签:计算试验如何
mysql查看已打开文件数_MySQL如何计算打开文件数_MySQL相关推荐
- mysql怎么查看自己建的表_mysql怎么查看已建的表
mysql查看已建数据表的方法:使用SHOW CREATE TABELE查看数据表,SHOW CREATE TABLE语句不仅可以查看创建表时的定义语句,还可以査看表的字符编,代码为[SHOW CRE ...
- mysql查看现在使用的引擎_mysql查看当前库使用的引擎及简单操作
随手写下一些操作 mysql现在已提供什么存储引擎: mysql> show engines; mysql当前默认的存储引擎: mysql> show variables like '%s ...
- mysql查看备份文件_MySQL的备份与还原以及常用数据库查看命令
MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:\Program Files\MySQL\MySQL Serv ...
- mysql 查看当前数据库编码方式_MySQL查看与修改当前数据库编码的方法
MySQL中,数据库的编码是一个相当重要的问题,有时候我们需要查看一下当前数据库的编码,甚至需要修改一下数据库编码. 查看当前数据库编码的SQL语句为: mysql> use xxx Datab ...
- mysql查看系统可用字符集_MySQL查看所有可用的字符集
MySQL查看所有可用的字符集 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL ...
- mysql 查看所有表的引擎_MySQL查看数据库、表的占用空间大小以及某个库中所有表的引擎类型...
本文章来给大家介绍一些常用的MySQL查看数据库.表的占用空间大小sql命令吧,希望此教程 对各位同学会有所帮助. 查看各库的大小代码如下复制代码 SELECT SUM(DATA_LENGTH)+SU ...
- mysql 查看编码方式_Mysql查看编码方式专题
Mysql查看编码方式专题 一. 查看数据库的字符集 show variables like 'character\_set\_%'; 输出: +--------------------------+ ...
- linux mysql查看数据库编码_MySQL查看和修改字符编码的实现方法
MySQL的默认编码是Latin1,不支持中文,要支持中午需要把数据库的默认编码修改为gbk或者utf8. 1.需要以root用户身份登陆才可以查看数据库编码方式(以root用户身份登陆的命令为:&g ...
- mysql查看数据库表大小语句_MySQL查看数据库表容量大小的命令语句讲解
MySQL查看数据库表容量大小的命令语句讲解 发布时间:2020-04-27 14:17:23 来源:亿速云 阅读:180 作者:三月 本文主要给大家介绍MySQL查看数据库表容量大小的命令语句讲解, ...
最新文章
- 活动报名 | 第三届中国法研杯司法人工智能挑战赛颁奖会日程出炉
- linux线程调度函数,Linux调度策略及线程优先级设置
- http工具类(支持https,连接池和失败重试)
- 12月16号 双链表
- web前端性能意义、关注重点、测试方案、优化技巧
- c语言中switch语句流程图_C语言:C语言保留字(关键字)
- MySQL高级in和not in
- 小汤学编程之jQuery学习day01——简介、入门、选择器
- Windows Server 2008 配置使用动态IP和备用地址
- 后会终无期,且行且珍惜
- 什么样的项目适合自动化测试
- java工程师要懂哪些东西_Java工程师都需要懂哪些知识?学实用知识得高薪
- pdf2htmlex linux,pdf2htmlEX Windows Version
- OpenPose安装(gtx1650+cuda10.1+cudnn7.6.0+anaconda3)
- CSDN会员服务协议
- c语言函数使用的三个步骤,sqrt函数怎么使用 C语言中的sqrt函数使用方法介绍
- Android(root)设备HTTPS请求时间校准
- 额。。万恶之源就是c
- MBR与GPT(GUID)的区别及使用方式(偏实际操作)
- LiDAR点云处理软件