table_open_cache指定表高速缓存的大小。每当MySQL访问一个表时,若是在表缓冲区中还有空间,该表就被打开并放入其中,这样能够更快地访问表内容。
经过检查峰值时间的状态值Open_tables和Opened_tables,能够决定是否须要增长table_open_cache的值。
若是你发现open_tables等于table_open_cache,而且opened_tables在不断增加,那么你就须要增长table_open_cache的值了(上述状态值可经过SHOW GLOBAL STATUS LIKE ‘Open%tables’得到)。
注意,不能盲目地把table_open_cache设置成很大的值,设置太大超过了shell的文件描述符(经过ulimit -n查看),形成文件描述符不足,从而形成性能不稳定或者链接失败。mysql
测试环境:腾讯云CDB,内存4000M,在控制台查看到table_open_cache=512,监测table_open_cache设置是否合理,是否须要优化。sql
发现open_tables等于table_open_cache,都是512,说明mysql正在将缓存的表释放以容纳新的表,此时可能须要加大table_open_cache的值,4G内存的机器,建议设置为2048
比较适合的值:
Open_tables / Opened_tables >= 0.85
Open_tables / table_open_cache <= 0.95
若是对此参数的把握不是很准,有个很保守的设置建议:把MySQL数据库放在生产环境中试运行一段时间,而后把参数的值调整得比Opened_tables的数值大一些,而且保证在比较高负载的极端条件下依然比Opened_tables略大。shell