我们在 Almalinux 8 服务器上运行 MariaDB 10.6.13。在 /etc/my.cnf 中,我们指定了 table_open_cache = 1024。但是,当我们运行它时,show variables like 'table_open%';
它显示 table_open_cache 为 200 而不是 1024。有趣的是,如果我们在 my.cnf 中将它设置为小于 200 的任何值,它需要该值,但超过 200 且上限为 200。
我们可以使用动态将其设置为更高的值set global table_open_cache = 1024;
,这反映在变量中,但我们似乎无法从 my.cnf 设置更高的值。(是的,我们在进行更改后重新启动 mariadb。同样,设置为低于 200 的值有效。)
ulimit -n
返回 1024。open_files_limit 是 40000。我们还检查了 mariadb 除了 /etc/my.cnf 和 ~/.my.cnf 之外没有加载任何其他 cnf 文件,后者不包含任何会覆盖该值的内容. 还检查了错误日志,但没有看到任何启动错误。
还有什么可能导致 table_open_cache 上限为 200?
首先,因为这个系统使用 systemd,ulimit 是不相关的。MariaDB 的打开文件限制在 systemd 单元文件中设置,
/etc/systemd/system/mariadb.service.d/migrated-from-my.cnf-settings.conf
. 默认情况下,它看起来像这样:MariaDB 然后根据可用的打开文件进行一些计算,以支持请求的 max_connections 以及表缓存大小和实例。基本上每个连接都需要一个文件句柄,每个表需要 2 个,所以如果 table_cache_size * table_cache_instances + max_connections 大于 open_file_limit(来自 systemd 单元文件),那么事情就会得到调整。它比那复杂得多,但这是基本的想法。确切的代码在这里: https: //github.com/MariaDB/server/blob/mariadb-10.6.13/sql/mysqld.cc#L4043-L4123
如果它调整值,它会将其记录到服务日志中,您可以使用 进行检查
journalctl -u mariadb
。就我而言,它显示了这一点:因此,要设置更大的表缓存,我需要将打开文件限制增加到 40,000 以上,或者减少我的 max_connections。
如果参数
open_files_limit
小于table_open_cache
,它可以限制 的值table_open_cache
。要检查(并可能编辑)的值
open_files_limit
:(/etc/my.cnf or /etc/mysql/my.cnf)
使用文本编辑器打开 MariaDB 配置文件。[mysqld]
在配置文件中查找该部分。open_files_limit
存在,更新它的值:open_files_limit = 40000
- 如果不可用,添加参数。sudo systemctl restart mariadb
在操作系统中,检查
如果它是可悲的低“1024”,则更改它。那应该打开大坝,让你把事情设置得更大。