GreatSQL社区

搜索

[讨论中] innodb_open_files参数值生效依赖那个值

224 3 2024-7-5 09:49
在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  



全部回复(3)
KAiTO 2024-7-5 10:01:06
在 MySQL/GreatSQL 中,table_open_cacheinnodb_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 65535  mysql 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
[Unit]
Description=GreatSQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
# 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设置的。
一个学艺不精的国产数据库爱好者
JARRY

1

主题

0

博客

2

贡献

新手上路

Rank: 1

积分
3

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2024-9-8 11:02 , Processed in 0.021891 second(s), 16 queries , Redis On.
快速回复 返回顶部 返回列表