mysql table_open_*(打开表) 和 open_files_*(文件句柄数) 相关的几个参数
mysql 执行sql语句涉及到表时需要打开这张表然后进行操作,mysql中有一些跟打开表相关的参数,这里记录一下:
点击查看代码
open_files_limit
innodb_open_files
table_definition_cache
table_open_cache
table_open_cache_instances
1、open_files_limit
它定义了MySQL服务进程(mysqld)能够同时打开的最大文件描述符数量。在MySQL运行过程中,打开的文件可以包括数据表、日志文件、临时文件以及其他与数据库操作相关的文件。
该值的计算公式:
- 10 + max_connections + (table_open_cache * 2)
- max_connections * 5
- 如果操作系统设置了hard nofile ,则使用操作系统的值即可
- 默认值5000
- 需要重启mysql 生效
由于文件描述符资源是操作系统级别的限制,因此,在设置open_files_limit时需要确保其值小于或等于操作系统的最大允许打开文件数限制。如果MySQL需要的文件描述符数超过了系统允许的最大值,可能会导致“Too many open files”错误,影响数据库的正常运行和服务质量。
# 设置操作系统文件描述符的限制
点击查看代码
vim /etc/security/limits.conf
* hard nproc 2048 # 用户创建进程数的限制
* soft nproc 2048
* hard nofile 65535 # 用户打开文件句柄数的限制
* soft nofile 65535
# 软限制和硬限制的区别:
软限制(Soft Limit):可以使用的资源的最大值。
当一个进程试图超过其软限制时,系统会允许它暂时突破这个限制,但最终进程必须将资源使用量降低到软限制以下
硬限制(Hard Limit):这是当前用户或者系统能够设定的某个资源的绝对最大值。任何单个进程都不能设置超过硬限制的软限制。
hard nproc 用于设定一个用户可以创建的最大进程数。这里的 nproc 指的是“number of processes”。
它用于设置InnoDB能够同时保持打开的表文件数量。当innodb引擎打开的表文件超过innodb_open_files设定的值,超出部分的表文件将无法被立即打开,而需要等待已打开的表文件关闭后才能重新分配资源来打开新的表文件。
3、table_open_cache
它定义了MySQL能够同时在内存中缓存的已打开表的数量。当客户端执行SQL查询时,MySQL需要访问数据表,如果该表已经在table_open_cache中被打开,则可以直接从缓存中读取,避免了重新打开表文件带来的磁盘I/O操作和表结构解析的开销。
默认值为2000,取值公式为
MAX(
(open_files_limit - 10 - max_connections) / 2,
400
)
4、table_open_cache_instances
table_open_cache 参数定义了MySQL能够同时在内存中缓存的已打开表的数量。随着并发查询和事务操作的增多,单个表打开缓存可能会成为性能瓶颈,因为所有线程都共享这一个缓存,竞争激烈时会导致效率下降。
为了解决这个问题,MySQL引入了 table_open_cache_instances 参数。当设置此参数大于1时,MySQL会将整个table_open_cache 分割成多个独立的子缓存(称为实例),每个实例都有自己独立的打开表空间。这样可以减少不同线程间对同一缓存的竞争,提高并发环境下打开和关闭表的效率。
例如,如果你将 table_open_cache 设置为 1000,并且将 table_open_cache_instances 设置为 4,则MySQL将会创建4个独立的打开表缓存,每个缓存可容纳250个打开的表
5、table_definition_cache
它决定了MySQL能够同时缓存的表定义(即.frm文件)的数量。
与普通表缓存不同,表定义缓存占用的空间较小,并且不使用文件描述符。最小值为400,上限为2000,默认值基于以下公式,:
400 + (table_open_cache / 2)
6、max_connections
这个参数决定了数据库允许的最大连接数,如果连接数超过了该值,则会报Too many connections的错误。参数默认值是151
注意:max_connections最大有效值是open_files_limit-810和max_connections设置的值中的较小值。

浙公网安备 33010602011771号