vnsc5858威尼斯城官网 > 编程技术 > vnsc5858威尼斯城官网:open_files_limit相关设置

原标题:vnsc5858威尼斯城官网:open_files_limit相关设置

浏览次数:199 时间:2019-10-03

官方网站解释参见:

背景:      
数据库链接不上,报错:

其他可供参照他事他说加以考察的篇章有:

root@localhost:/var/log/mysql# mysql -uzjy -p -h192.168.1.111 --default-character-set=utf8 -P3306
Enter password: 
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

关于表限制参数的使用:

解析方法:
在那几个地方笔者看不出什么,直接看错误日志:

有关SHOW OPEN TABLES命令的采用:

[ERROR] /usr/sbin/mysqld: Can't open file: './java/tt_fte.frm' (errno: 24)

root@localhost:/var/log/mysql# perror 24
OS error code  24:  Too many open files

 

一看看这里,就以为需要调动 open_files_limit 参数了(暗中认可最小1024),至此难点消除。尽管难题一蹴而就了,但是还未有搞清楚MySQL张开了不怎么个公文描述符,展开了哪写文件陈诉符号,以及如何幸免。怎么通晓MySQL张开了略微个文本陈述符呢?
知识点:用lsof去查看,驾驭myisam和innodb的文件描述符、OS 的ulimit相关认知。
听他们说上面的主题材料,今后来解析(此时数据库就连不上了,一贯报十分的小概展开的错误音讯)查看MySQL展开的文书:

一、本文涉及到的体系参数有3个:

vnsc5858威尼斯城官网 1

  • table_open_cache
root@localhost:~# lsof -p 26288 | wc -l
1042

#因为数据库链接不了,所以只能通过系统查看他的文件描述符
root@localhost:~# cat /proc/26288/limits 
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             79877                79877                processes 
Max open files            1024                 4096                 files     
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       79877                79877                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us   

也可以通过下面的方法查看,下面的方法最为精确
root@localhost:~# ls -lh /proc/26288/fd | wc -l
1024

那几个参数表示针对全体threads的table cache总和,5.6.7此前私下认可是400,5.6.8从此是3000。

vnsc5858威尼斯城官网 2

那是个server层的参数,mysql不援救互相查询,mysql的对话也从不PGA的概念,八个thread引用myisam表时必要在server层上创立贰个table对象(索引也急需创设一个可是是分享的,self join会创造2个,分区表每一种分区按单表对待),假如还要几个会话引用一个表也会成立多少个表对象,固然会加大内部存款和储蓄器使用量,不过却一点都不小的削减了在那之中表锁的争用。

地点看出,MySQL那时打开的文书呈报符1024,已经达到规定的标准上限,所以再张开的时候就报错了。修改open_files_limit 参数,设置为2000试试?

其一值的数目建议安装为max_connections*您的表数目,当然你可能也必要为部分临时表等目的预留,不过那么些数据已经足足大呀。

vnsc5858威尼斯城官网 3

那么mysql哪一天释放那些表对象啊?

root@localhost:~# lsof -p 27732 | wc -l
1053
root@localhost:~# cat /proc/27732/limits 
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             79877                79877                processes 
Max open files            2000                 2000                 files     
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       79877                79877                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us        
root@localhost:~# ls -lh /proc/27732/fd | wc -l
1035
  1. 当缓冲已满,而连日想要展开叁个不在缓冲中的表时。
  2. 当缓冲数目已经超(Jing Chao)越了table_open_cache设置的值,mysql开头应用LRU算法释放表对象。
  3. 当你用flush tables;语句时。

vnsc5858威尼斯城官网 4

  • open_files_limit

地点看出,MySQL供给展开的文件陈说符1035,小于两千,数据库正常。到此甘休,下边包车型客车题目获得缓慢解决。想更清楚领悟的请继续看:
查看数据库的变量:

以此参数表示mysqld可用的最大文件汇报符数目,假诺您相逢“Too many open files”的错误,应当思索加大它。这一个参数的默许值是0表示无界定(大于5.6.7后暗中认可值不再为0,参照他事他说加以考察官方网站),但实际他的值是与操作系统相关的,在Unix系统下那几个值的多寡不能够大于ulimit -n。

vnsc5858威尼斯城官网 5

其一参数应当大于等于table_open_cache。

zjy@localhost : (none) 10:27:19>show global status like 'open%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| Open_files               | 804   |
| Open_streams             | 0     |
| Open_table_definitions   | 400   |
| Open_tables              | 400   |
| Opened_files             | 6803  |
| Opened_table_definitions | 3861  |
| Opened_tables            | 4315  |
+--------------------------+-------+
7 rows in set (0.00 sec)

zjy@localhost : (none) 10:31:11>show global variables like 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 2000  |
+------------------+-------+
1 row in set (0.00 sec)

zjy@localhost : (none) 10:39:03>show global variables like 'table_open_cache';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| table_open_cache | 400   |
+------------------+-------+
1 row in set (0.00 sec)
  • innodb_open_files

vnsc5858威尼斯城官网 6

这一个参数只对InnoDB存款和储蓄引擎有效,它钦定了mysql能够并且开发的最大.ibd文件的数量。那一个参数即不影响table_open_cache也不受open_files_limit影响,是独立的只对InnoDB有效的。所以在默认为InnoDB存款和储蓄引擎时能够不思索open_files_limit只去设innodb_open_files。

在MySQL 5.1.3自此,还增加了2个情景值:Open_table_definitions和Opened_table_definitions。那2个值代表的野趣如下:
Open_table_definitions  :代表当前缓存了多少.frm文件。 
Opened_table_definitions:代表自从MySQL运转后,缓存了.frm文件的数据。 供给小心的是.frm文件是MySQL用于存放表结构的公文,对应myisam和innodb存储引擎都必需有的,能够经过show open tables 查看 那2个变量的值。

 

谈起这里重要关怀的参数依旧:table_open_cache 其职能是:从MySQL5.1.3 最早改为table_open_cache,全部线程所张开表的数目, 扩充此值就增添了mysqld所急需的文件汇报符的数量.它的职能就是缓存表文件描述符,裁减打开关闭表的频率, 若是这几个参数设置得过小,那么高效就能够被占满,再有新央求过来的时候,就不得不关闭部分已张开的表以便为新供给腾出空间,进而出现多次的开垦关闭MyISAM表文件的景况,而INNODB表的张开不受这几个参数调整,而是放到其数量字典当中,即在ibd中。

那3个参数的关联足以总结如下,为确认保证品质,你应当设置为如下值:

翻开张开的各样文件陈述符是如何:当先十分之五都以MYI,MYD,IBD文件。

max_connections*您的表数目 = table_open_cache <=open_files_limit< ulimit -n

vnsc5858威尼斯城官网 7

innodb_open_files<ulimit -n

root@localhost:/proc/27732/fd# ls -lh | grep MYI | wc -l
400
root@localhost:/proc/27732/fd# ls -lh | grep MYD | wc -l
400
root@localhost:/proc/27732/fd# ls -lh | grep ibd | wc -l
215
root@localhost:/proc/27732/fd# lsof | grep /var/lib/mysql | grep MYI | wc -l
400
root@localhost:/proc/27732/fd# lsof | grep /var/lib/mysql | grep MYD | wc -l
400
root@localhost:/proc/27732/fd# lsof | grep /var/lib/mysql | grep '.ibd' | wc -l
214

 

vnsc5858威尼斯城官网 8

二、本文涉及到的status参数有2个:open_tables和opened_tables

上边看见400,是否和table_open_cache有关?经过测验得出:MySQL变量 Open_tables 打开了 table_open_cache的数据,和lsof中的MYI和MYD数目对应(MYISAM)。
即  Open_tables  <=  table_open_cache,要是Open_tables 和 table_open_cache 一样,表示MySQL已经用完了表缓存,能够适用的调大。
214是何等意思?是还是不是INNODB表?经验证确认:

其中open_tables代表方今展开的table总和,即具有connection打开的table总量。

vnsc5858威尼斯城官网 9

opened_tables代表打开过的表的数量总和,唯有show global status技艺见到它的值。那是个计数器,Opened_tables/Uptime的值过大表达table_open_cache过小,导致有些table对象(即下文说的table对象)常常会刷出server层,须求的时候再创设,最后变成此计数过大。

zjy@localhost : (none) 10:43:54>select count(*) from information_schema.tables where ENGINE='innodb';
+----------+
| count(*) |
+----------+
|      214 |
+----------+
1 row in set (0.05 sec)

vnsc5858威尼斯城官网 10 vnsc5858威尼斯城官网 11

vnsc5858威尼斯城官网 12

 

从地点的音讯中吸收:

三、相关原理图

open_files_limit = table_open_cache*2 + innodb表

参考:的源码分析。

把地点的数字带进去:

通常来讲图,有个表叫xpchild(小屁孩666)库中的pp表:

open_files_limit = 400*2 + 214 = 1014 

vnsc5858威尼斯城官网 13

结果为1014 要自愧不及暗许的1024,为何暗许时候1024报错呢,那除那一个外还包涵如何?

table: MySQL会为八个join查询中提到的各个表建一个TABLE对象,援用innodb表时还有或然会创立innodb层的handler,server层的table指向此handler,此handler指向innodb层的分享表字典Dict_table_t。

root@localhost:/proc/27732/fd# ls -lh | grep -v  MYI | grep -v MYD | grep -v ".ibd" | wc -l 
23
#注意这个出现的数目不是固定的,有随机性。包含了各种日志、共享表空间、socket文件等信息。

table_share: MySQL为每一张表建构二个table_share对象,与frm文本对应。

vnsc5858威尼斯城官网 14View Code

本文由vnsc5858威尼斯城官网发布于编程技术,转载请注明出处:vnsc5858威尼斯城官网:open_files_limit相关设置

关键词:

上一篇:没有了

下一篇:没有了