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
在 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系统服务部分)
楼上说的对,如果你系统配置了这个参数了。
但是你是使用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
KAiTO 发表于 2024-7-5 10:01
在 MySQL/GreatSQL 中,table_open_cache 和 innodb_open_files 的实际值受到多种因素的限制。
table_open ...
很多其它类型的数据库,在操作系统层面都是按65535设置的。
页:
[1]