澳门金莎娱乐网站:open_files_limit相关设置

作者: 数据库信息  发布:2019-07-07

官方网站解释参见:

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

其他可供仿效的稿子有:

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个:

澳门金莎娱乐网站 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。

澳门金莎娱乐网站 2

那是个server层的参数,mysql不援救相互查询,mysql的对话也从没PGA的概念,三个thread援引myisam表时须要在server层上创办三个table对象(索引也须要创制叁个只是是分享的,self join会创建2个,分区表种种分区按单表对待),假若还要四个会话征引一个表也会创立三个表对象,固然会加大内部存款和储蓄器使用量,可是却相当的大的缩减了中间表锁的争用。

上面看出,MySQL那时展开的文本汇报符1024,已经高达上限,所以再打开的时候就报错了。修改open_files_limit 参数,设置为2000试试?

以此值的数码提议设置为max_connections*您的表数目,当然你恐怕也急需为部分临时表等目的预留,可是这一个数据已经够用大啦。

澳门金莎娱乐网站 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. 当缓冲数目已经超先生越了table_open_cache设置的值,mysql开端选拔LRU算法释放表对象。
  3. 当你用flush tables;语句时。

澳门金莎娱乐网站 4

  • open_files_limit

上面看出,MySQL必要开荒的公文汇报符1035,小于三千,数据库平常。到此甘休,上边的主题素材获得消除。想更掌握理解的请继续看:
查阅数据库的变量:

其一参数表示mysqld可用的最大文件陈述符数目,借使你相逢“Too many open files”的一无可取,应当考虑加大它。那么些参数的暗中同意值是0表示无界定(大于5.6.7后暗中同意值不再为0,参谋官方网址),但实质上他的值是与操作系统相关的,在Unix系统下那些值的数码不能够大于ulimit -n。

澳门金莎娱乐网站 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

澳门金莎娱乐网站 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所急需的公文陈说符的数量.它的功效正是缓存表文件描述符,裁减打按键闭表的频率, 借使这一个参数设置得过小,那么高效就能够被占满,再有新央求过来的时候,就只可以关闭部分已张开的表以便为新诉求腾出空间,进而出现数10次的开拓关闭MyISAM表文件的气象,而INNODB表的开拓不受那几个参数调控,而是放到其数据字典此中,即在ibd中。

那3个参数的涉嫌得以计算如下,为保障品质,你应有设置为如下值:

翻看打开的逐个文件汇报符是何等:大部分都以MYI,MYD,IBD文件。

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

澳门金莎娱乐网站 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

 

澳门金莎娱乐网站 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总量。

澳门金莎娱乐网站 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)

澳门金莎娱乐网站 10 澳门金莎娱乐网站 11

澳门金莎娱乐网站 12

 

从地点的新闻中得出:

三、相关原理图

open_files_limit = table_open_cache*2   innodb表

参考:的源码分析。

把上边的数字带进去:

如下图,有个表叫xpchild(小屁孩666)库中的pp表:

open_files_limit = 400*2   214 = 1014 

澳门金莎娱乐网站 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文本对应。

澳门金莎娱乐网站 14View Code

本文由金沙澳门官网发布于数据库信息,转载请注明出处:澳门金莎娱乐网站:open_files_limit相关设置

关键词: 金沙澳门官网

上一篇:索引原理,MySQL的InnoDB索引原理详解
下一篇:没有了