• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

如果你将innodb_open_files设置为高于open_files_limit会发生什么?

MySQL 彭东稳 6年前 (2019-02-22) 28648次浏览 已收录 0个评论

MySQL配置变量的设置对数据库系统的性能有重要影响,有时候预测一个变量如何影响其他变量的这个问题可能有点棘手,特别是在处理我将在本文中描述的案例时,结果不是很直观。所以在这里,我们将看看当你将innodb_open_files设置为高于open_files_limit时会发生什么?

我们可以使用以下命令设置MySQL中的最大打开文件数:

如果打开表的文件个数超过了这个上限则会报错。

如果未设置,则应使用默认值 – 在MySQL 5.7中为5000。

有关如何更改打开文件限制的说明,请参阅Sveta的优秀博客文章,如果设置了这个值,它将采用SystemD LIMIT_NOFILES,除非它被设置为无穷大(并且在CentOS 7上它将使用65536,但如果手动指定则可以使用更高的值):

正如你在上面所看到的,MySQL无法将open_files_limit的值设置为高于系统配置为允许的值,并且如果设置得太高,open_files_limit将默认返回到最大值。

这看起来非常简单,但不太明显的是它会如何影响innodb_open_files。 innodb_open_files值的配置保证MySQL可以在任何时间保持打开的.ibd文件数,当打开文件超过innodb_open_files的时候,InnoDB就会关掉一些之前打开的文件。

因为这显然需要打开文件,所以它应该不高于open_files_limit(并且应该更低)。如果我们尝试按照此示例将其设置得更高,MySQL将在日志文件中打印警告:

警告没有说明价值正在降低。尽管不是允许的最大值:

2000?为什么是2000呢?

这是因为如果我们将innodb_open_files设置得太高,它会恢复为默认值,根据文档是:

如果未启用innodb_file_per_table,则为300,否则为300和table_open_cache中的较高者。在5.6.6之前,默认值为300。

和table_open_cache?那么对于高达5.6.7的MySQL版本默认为400,对于5.6.8以上版本为2000。

请注意,table_open_cache完全是另一个设置,用来控制服务器可以一次打开的表定义(.frm)文件的数量。在InnoDB引擎打开文件超过innodb_open_files这个值的时候,就会关掉一些之前打开的文件。比如说,InnoDB分区表使用了本地分区策略以后,即使分区个数大于open_files_limit(MySQL Server层访问表时需要一次性打开所有文件,每个分区表在InnoDB层都是一个独立.ibd文件),打开InnoDB分区表也不会报“打开文件过多”这个错误,就是innodb_open_files这个参数发挥的作用。

<转载>

https://dbaplus.cn/news-11-2100-1.html

https://www.percona.com/blog/2018/11/28/what-happens-if-you-set-innodb_open_files-higher-than-open_files_limit/


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (0)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!