围绕参数设置可有以下解决方案:
1.
减少打开的表的数量(造成业务中断,不可行)
2.
将参数调大:
在将参数调大时,够用就好,需要注意
mysql
占用文件描述符,不可调的太大。首先先进
入
mysql
设置临时系统变量为
4096
(该系统变量在
mysql
重启会失效),所以还需要在
my.cnf
写入参数设置,保持重启有效。
关 于 参 数 设 置 大 小 问 题 ,
mysql
官 网 给 出 解 释 :
table_open_cache
的 设 置 与
max_connections
相关。例如,对于
200
个并发运行的连接,指定的表缓存大小至少为
200 * N
,其中
N
是执行的任何查询中每个联接的最大表数。您还必须为临时表和文件保
留一些额外的文件描述符。
原理解释
当
mysql
访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可
以更快地访问表内容。如果没有缓存区没空间的话,先使用置换算法将一些目前未使用的
表清理出去,然后再载入该表,这样一来,造成打开缓慢。
MySQL
关闭未使用的表并将其从表缓存中删除:
1.
当缓存已满并且线程尝试打开不在缓存中的表时。
2.
当高速缓存包含多个
table_open_cache
条目并且高速缓存中 的表不再被任何线程使
用时。
3.
当进行表刷新操作时。当有人发出
FLUSH TABLES
语句或执行
mysqladmin 7ush-
tables
或
mysqladmin refresh
命令时,会发生这种情况。
当表高速缓存填满时,服务器将使用以下过程找到要使用的高速缓存条目:
1.
从最近最少使用的表开始,释放当前未使用的表。
2.
如果必须打开一个新表,但是缓存已满并且无法释放任何表,则可以根据需要临时扩展
缓存。当缓存处于临时扩展状态并且表从已使用状态变为未使用状态时,表将关闭并从缓
存中释放。
属性 值
命令行格式
–table-open-cache=#
系统变量
table_open_cache
范围 全球
动态 是
类型 整数
默认值
2000
最低值
1
评论