MySQL5.6下table_open_cache参数优化合理配置详解1、简介
table_cache是⼀个⾮常重要的MySQL性能参数,它在5.1.3之后的版本中叫做table_open_cache。table_cache主要⽤于设置table⾼速缓存的数量。由于每个客户端连接都会⾄少访问⼀个表,因此此参数的值与max_connections有关。
例如,对于 1000 个并⾏运⾏的连接,应该让表的缓存⾄少有 1000 × N ,这⾥ N 是应⽤可以执⾏的查询的⼀个联接中表的最⼤数量。此外,还需要为临时表和⽂件保留⼀些额外的⽂件描述符。
2、缓存机制
当某⼀连接访问⼀个表时,MySQL会检查当前已缓存表的数量。如果该表已经在缓存中打开,则会直接访问缓存中的表已加快查询速度;如果该表未被缓存,则会将当前的表添加进缓存并进⾏查询。
在执⾏缓存操作之前,table_open_cache⽤于限制缓存表的最⼤数⽬:如果当前已经缓存的表未达到table_open_cache,则会将新表添加进来;若已经达到此值,MySQL将根据缓存表的最后查询时间、查询率等规则释放之前的缓存。每当MySQL访问⼀个表时,如果在表缓冲区中还有空间,该表就被打开并放⼊其中,这样可以更快地访问表内容。
3、如何判断
通过检查峰值时间的状态值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设置成很⼤的值。如果设置得太⾼,可能会造成⽂件描述符不⾜,从⽽造成性能不稳定或者连接失败。
Open_tables / Opened_tables >= 0.85
Open_tables / table_cache <= 0.95
4、建议
如果开始没有把握的话,把MySQL数据库放在⽣产环境中试运⾏⼀段时间,然后把参数的值调整得⽐Opened_tables的数值⼤⼀些,并且保证在⽐较⾼负载的极端条件下依然⽐Opened_tables略⼤。
在mysql默认安装情况下,table_cache的值在2G内存以下的机器中的值默认时256到 512,如果机器有4G内存,则默认这个值是2048,但这决意味着机器内存越⼤,这个值应该越⼤,因为table_cache加⼤后,使得mysql对 SQL响应的速度更快了,不可避免的会产⽣更多的死锁(dead lock),这样反⽽使得数据库整个⼀套操作慢了下来,严重影响性能。所以平时维护中还是要根据库的实际情况去作出判断,到最适合你维护的库的 table_cache值。
mysql >flush tables; 可以将open_tables 清零
# service mysqld restart 可以讲opened_tables 清零
以下是针对mysql 5.6的说明
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查看),造成⽂件描述符不⾜,从⽽造成性能不稳定或者连接失败。
测试环境:腾讯云CDB,内存4000M,在控制台查看到table_open_cache=512,监测table_open_cache设置是否合理,是否需要优化。安装mysql失败
show variables like '%table_open_cache%';
show global status like 'Open%tables';
发现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略⼤。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。