来自 美高梅4858mgm 2019-12-11 23:03 的文章
当前位置: 美高梅4858官方网站 > 美高梅4858mgm > 正文

MySQL张开文件节制

table_cache钦定表高速缓存的朗朗上口。每当MySQL访谈二个表时,假诺在表缓冲区中还应该有空间,该表就被打开并归入当中,那样能够更加快地拜候表内容。通过检查峰值时间的动静值Open_tables和Opened_tables,能够操纵是还是不是供给扩大table_cache的值。即便你发觉open_tables等于table_cache,并且opened_tables在相连增进,那么您就供给增添table_cache的值了(上述情景值能够使用SHOW STATUS LIKE ‘Open%tables’得到)。注意,无法盲目地把table_cache设置成十分大的值。假如设置得太高,恐怕会促成文件叙述符不足,从而以致质量不平稳大概三回九转失利。
www.itcankao.cn
首先是MyISAM: 
从官网下面看,每种线程会独谦虚有叁个数据文件的文书描述符,而索引文件的文书陈诉符是公用的。当table cache非常不足用的时候,MySQL会使用LRU算法踢掉最长日子还没应用的表。借使table_cache设置过小,MySQL就能再三张开、关闭 frm文件,产生一定的属性损失。那么,table_cache设置是否越大越好吧?从table_cache negative scalability 那篇随笔的测量试验能够观察,假使table_cache设置过大,MySQL将会损耗比非常多CPU去做 table cache的算法运算(具体是哪位算法近些日子不知情,有望是LRU)。由此table_cache的值一定要设置合理,没事多看风流倜傥看 opened_tables参数,假若直白增进的话,就需求适当扩张table_cache的值了。 
  
接着是InnoDB: 
InnoDB的元数据管理是坐落于分享表空间里面做的,所以博得表的布局无需去一再剖析frm文件,那是比MyISAM强之处。尽管table_cache设置过小,对于InnoDB的震慑也是非常小的,因为它根本不必要频仍展开、关闭frm文件去获得元数据。  遵照How innodb_open_files affects performance那篇作品的测量检验能够看见,table_cache和  innodb_open_files的分寸对InnoDB作用的震慑超小。可是在InnoDB crash的动静下, innodb_open_files设置过小会影响recovery的频率。所以用InnoDB的时候照旧把 innodb_open_files放大学一年级些相比妥贴。

文本展开广阔难点

数据库报错:
[ERROR] /opt/mysql/bin/mysqld: Can't open file: './tpcc/sbtest98.frm' (errno: 24 - Too many open files)

查看os最大允许打开数
shell> ulimit -n
65535

查看数据库打开设定最大打开文件数
mysql> show global variables like 'open_files_limit';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 500   |
+------------------+-------+
1 row in set (0.00 sec)

查看当前数据库已经打开的文件描述符
shell>ll /proc/24012/fd  | wc
    501    5507   41673

调整open_files_limit设定并重启生效。

...

MySQL文件展开状态

mysql> show global status like '%open%';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Com_ha_open                | 0     |
| Com_show_open_tables       | 1     |
| Innodb_num_open_files      | 19    |
| Open_files                 | 3     |
| Open_streams               | 0     |
| Open_table_definitions     | 8     |
| Open_tables                | 8     |
| Opened_files               | 509   |
| Opened_table_definitions   | 116   |
| Opened_tables              | 90    |
| Slave_open_temp_tables     | 0     |
| Table_open_cache_hits      | 3254  |
| Table_open_cache_misses    | 90    |
| Table_open_cache_overflows | 0     |
+----------------------------+-------+
14 rows in set (0.00 sec)
  • Open_table_definitions:代表当前缓存了多少.frm文件。
  • Opened_table_definitions:代表自MySQL运转后,缓存了.frm文件的数据。 须要在乎的是.frm文件是MySQL用于贮存表布局的公文,
    对应myisam和innodb存款和储蓄引擎都一定要有的,能够透过show open tables 查看 那2个变量的值。
  • Open_tables:代表当前开垦的表个数
  • Opened_tables:代表自MySQL运转后,张开过的表个数,如该值过大,大概是table_open_cache设置太小。
  • 美高梅4858mgm,Open_files:张开文件的个数。服务器层张开的相仿文件,不含有sockets 或 pipes类型文件,也不分包个中等高校函授数打开的文件。
  • Opened_files:通过应用my_open(卡塔尔国系统函数张开的文本数。
  • Table_open_cache_hits:张开表缓存查找的命中数。
  • Table_open_cache_misses:张开表缓存查找的未命中数。
  • Table_open_cache_overflows:展开表缓存溢出数。

Linux系统财富限定

Linux会对客商所占领的系统财富进行约束,MySQL运行在Linux系统下也会受此约束。

查看当前系统的所有限制值
shell> ulimit -a

设置可以同时打开的最大文件数,默认为1024,如不修改打开文件数过多会出现too many open files错误。
shell> ulimit -n

设置最大可用进程数
shell> ulimit -u

一般可通过修改/etc/security/limits.conf文件进行配置。
shell> more /etc/security/limits.conf
*  soft  nproc           20480
*  hard  nproc           20480
*  soft  nofile          65535
*  hard  nofile          65535

本文由美高梅4858官方网站发布于美高梅4858mgm,转载请注明出处:MySQL张开文件节制

关键词: