JARRY 发表于 2024-7-5 09:49:27

innodb_open_files参数值生效依赖那个值

在mysql.8.0.25中,配置文件中有如下配置
table_open_cache=3000
open_files_limit=65535
innodb_open_files=65535   


在操作系统层面额参数设置为如下

mysql soft nofile 1024
mysql hard nofile 1024

使用mysql用户重启mysql服务

查询结果
mysql> show variables like '%open%';
+----------------------------+-------+
| Variable_name            | Value |
+----------------------------+-------+
| have_openssl               | YES   |
| innodb_open_files          | 431   |
| mysqlx_port_open_timeout   | 0   |
| open_files_limit         | 1024|
| table_open_cache         | 431   |
| table_open_cache_instances | 16    |
+----------------------------+-------+


请问为什么
table_open_cache为什么是431

innodb_open_files为什么是431



KAiTO 发表于 2024-7-5 10:01:06

在 MySQL/GreatSQL 中,table_open_cache 和 innodb_open_files 的实际值受到多种因素的限制。

table_open_cache 表示所有线程打开表的缓存数量。虽然在配置文件中设置了 table_open_cache=3000,innodb_open_files = 65535但 MySQL/GreatSQL 还会考虑其他因素来确定最终的值。

因为你的操作系统层面设置了 mysql soft nofile 1024 和 mysql hard nofile 1024,这限制了 MySQL/GreatSQL 用户可以打开的文件描述符数量。MySQL/GreatSQL 在启动时会受到这个限制,从而导致 innodb_open_files 的实际值为 431。

解决方法(仅供参考):
确保操作系统层面的文件描述符限制足够大。可以通过修改操作系统的相关配置(如 /etc/security/limits.conf文件)来增加 MySQL/GreatSQL 用户可打开的文件描述符数量。

按您发的可设置为 ’mysql hard nofile 65535mysql soft nofile 65535‘
(但需注意,设置的值也不能过大,要根据实际的系统资源和需求进行合理调整,以免引发其他问题。)
修改后,需要重新启动 MySQL/GreatSQL服务以使更改生效。

此外,还需确认在 MySQL/GreatSQL 的服务配置文件(如 /etc/systemd/system/mysqld.service)中没有其他对 open_files_limit 或相关参数的限制设置。

此处可参考GreatSQL手册: Centos系统中安装GreatSQL | GreatSQL用户手册(增加GreatSQL系统服务部分)


驭无殇1998 发表于 2024-7-5 11:10:52

楼上说的对,如果你系统配置了这个参数了。
但是你是使用systemd的方式启动。那就需要在systemd的启动文件里面加上:
# open files
LimitNOFILE=65535
# processes/threads
LimitNPROC=65535

然后重新加载就生效了,不然就算是系统配置了在greatsql里面也不会生效

比如我的greatsql启动配置:
cat /etc/systemd/system/greatsql.service

Description=GreatSQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

WantedBy=multi-user.target

# some limits
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=65535
# processes/threads
LimitNPROC=65535
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false

User=mysql
Group=mysql
#如果是GreatSQL 5.7版本,此处需要改成simple模式,否则可能服务启用异常
#如果是GreatSQL 8.0版本则可以使用notify模式
#Type=simple
Type=notify
TimeoutSec=0
PermissionsStartOnly=true
ExecStartPre=/usr/local/greatsql/bin/mysqld_pre_systemd
ExecStart=/usr/local/greatsql/bin/mysqld $MYSQLD_OPTS
EnvironmentFile=-/etc/sysconfig/mysql
LimitNOFILE = 10000
Restart=on-failure
RestartPreventExitStatus=1
Environment=MYSQLD_PARENT_PID=1
PrivateTmp=false

reddey 发表于 2024-7-5 20:12:25

KAiTO 发表于 2024-7-5 10:01
在 MySQL/GreatSQL 中,table_open_cache 和 innodb_open_files 的实际值受到多种因素的限制。

table_open ...

很多其它类型的数据库,在操作系统层面都是按65535设置的。
页: [1]
查看完整版本: innodb_open_files参数值生效依赖那个值