我读过这两个相关的问题,但仍然坚持着:
MySQL table_open_cache在/etc/mysql/mysql.conf.d/mysqld.cnf中被设置为8000,并且在任何其他加载的cnf文件中都没有定义此值:
table_open_cache = 8000另外,在/lib/systemd/system/mysql.service中,我有默认条目:
LimitNOFILE=10000当我从cli查询变量时,仍然可以得到以下内容:
mysql> show variables like 'table_open_cache';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| table_open_cache | 4745 |
+------------------+-------+还有这样一个:
$ ulimit -n
1024这是令人困惑的,因为如果开放的文件限制是由系统限制的,难道不应该把我限制在1024而不是4745吗?我不明白4745到底是从哪里来的。
有人能解释一下这是怎么回事吗?这是MySQL配置问题还是操作系统强加的限制?我刚从Ubuntu16.04迁移到几乎相同的配置,这以前不是问题。
操作系统是Ubuntu20.04。MySQL版本为8.0.20。
发布于 2022-10-25 09:56:46
这个问题已经过时了,很可能大多数读者都会回答这个问题。但是,我想补充两件事:@eaten想知道为什么打开的文件LimitNOFILE的限制要比table_open_cache高得多。
答案相当简单,取决于存储引擎,一个表由多个文件组成。例如,table.frm和table.ibd用于MyISAM。
此外,我发现这是一个很好的指南,如何增加table_open_cache:https://www.basezap.com/guide-to-raise-ulimit-open-files-and-mysql-open-files-limit/
与其更改/lib/systemd/system/mysql.service,不如添加一个文件/etc/systemd/system/mysql.service.d/override.conf并将更新的配置放在那里,就像堆栈溢出上描述的那样。否则,您的配置更改可能会被更新覆盖。
我希望这能帮到你。
发布于 2020-05-22 13:50:50
open_files_limit与table_open_cache和max_connections之间存在某种约束。
对于每个连接,您需要一个文件描述符,而对于缓存中的每个表,您需要一个或两个文件描述符。
如果您不低于或高于某些边界,则公式将是
所有这些参数都是在这三个函数中计算的。
函数adjust_table_cache_size
函数adjust_max_connections
函数adjust_open_files_limit
在这种情况下,需要将最大open_files提高到更大的值。
1)运行命令systemctl edit mysql和
[Service]
LimitNOFILE=200002) systemctl停止mysql
3) systemctl启动mysql
检查max打开文件的新值。
在Ubntu 20.4上安装mysql-server-8.0时的默认值
mysql> show global variables like '%open_files_limit%' ;
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| open_files_limit | 20000 |
+------------------+-------+
1 row in set (0.00 sec)在本文档中,您将找到一个公式来计算设置此值的正确方法。
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_打开_文件_限制
/proc/THE_PID/limits的输出cat /proc/THE_PID/limits | grep -e '^Limit' -e open
在检查你的opencache之后
mysql> show variables like '%open_cache%' ;
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| table_open_cache | 8000 |
| table_open_cache_instances | 16 |
+----------------------------+-------+
2 rows in set (0.01 sec)https://askubuntu.com/questions/1241013
复制相似问题