首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在Ubuntu20.04中增加MySQL table_open_cache

问无法在Ubuntu20.04中增加MySQL table_open_cache
EN

Ask Ubuntu用户
提问于 2020-05-18 14:55:38
回答 2查看 1.4K关注 0票数 3

我读过这两个相关的问题,但仍然坚持着:

MySQL table_open_cache在/etc/mysql/mysql.conf.d/mysqld.cnf中被设置为8000,并且在任何其他加载的cnf文件中都没有定义此值:

代码语言:javascript
复制
table_open_cache = 8000

另外,在/lib/systemd/system/mysql.service中,我有默认条目:

代码语言:javascript
复制
LimitNOFILE=10000

当我从cli查询变量时,仍然可以得到以下内容:

代码语言:javascript
复制
mysql> show variables like 'table_open_cache';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| table_open_cache | 4745  |
+------------------+-------+

还有这样一个:

代码语言:javascript
复制
$ ulimit -n
1024

这是令人困惑的,因为如果开放的文件限制是由系统限制的,难道不应该把我限制在1024而不是4745吗?我不明白4745到底是从哪里来的。

有人能解释一下这是怎么回事吗?这是MySQL配置问题还是操作系统强加的限制?我刚从Ubuntu16.04迁移到几乎相同的配置,这以前不是问题。

操作系统是Ubuntu20.04。MySQL版本为8.0.20。

EN

回答 2

Ask Ubuntu用户

发布于 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并将更新的配置放在那里,就像堆栈溢出上描述的那样。否则,您的配置更改可能会被更新覆盖。

我希望这能帮到你。

票数 1
EN

Ask Ubuntu用户

发布于 2020-05-22 13:50:50

open_files_limit与table_open_cache和max_connections之间存在某种约束。

对于每个连接,您需要一个文件描述符,而对于缓存中的每个表,您需要一个或两个文件描述符。

如果您不低于或高于某些边界,则公式将是

table_cache_size = (requested_open_files - 10 - max_connections) / 2

所有这些参数都是在这三个函数中计算的。

函数adjust_table_cache_size

https://github.com/mysql/mysql-server/blob/7d10c82196c8e45554f27c00681474a9fb86d137/sql/mysqld.cc#L7717

函数adjust_max_connections

https://github.com/mysql/mysql-server/blob/7d10c82196c8e45554f27c00681474a9fb86d137/sql/mysqld.cc#L7704

函数adjust_open_files_limit

来自https://github.com/mysql/mysql-server/blob/7d10c82196c8e45554f27c00681474a9fb86d137/sql/mysqld.cc#L7663

在这种情况下,需要将最大open_files提高到更大的值。

1)运行命令systemctl edit mysql和

代码语言:javascript
复制
[Service]
LimitNOFILE=20000

2) systemctl停止mysql

3) systemctl启动mysql

检查max打开文件的新值。

  1. MYSQL检查方法

在Ubntu 20.4上安装mysql-server-8.0时的默认值

代码语言:javascript
复制
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_打开_文件_限制

  1. 检查的通用方法
    • 标识mysql守护进程的进程id
    • 通过运行检查/proc/THE_PID/limits的输出

cat /proc/THE_PID/limits | grep -e '^Limit' -e open

在检查你的opencache之后

代码语言:javascript
复制
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)
票数 -1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1241013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档