MySQL 5.6下table_open_cache参数优化合理配置详解

作者:寂寞无言飘过 时间:2024-01-18 22:18:55 

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设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。

MySQL 5.6下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设置是否合理,是否需要优化。


show variables like '%table_open_cache%';

MySQL 5.6下table_open_cache参数优化合理配置详解


show global status like 'Open%tables';

MySQL 5.6下table_open_cache参数优化合理配置详解

发现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略大。

来源:https://www.cnblogs.com/fjping0606/p/6531292.html

标签:MySQL,table,open,cache
0
投稿

猜你喜欢

  • vue实现登录后页面跳转到之前页面

    2024-04-27 16:00:53
  • python如何实现数据的线性拟合

    2023-10-08 01:56:01
  • golang构建工具Makefile使用详解

    2024-04-28 10:46:04
  • Numpy对于NaN值的判断方法

    2022-12-15 15:08:21
  • 解决Jrebel用户名中文导致用不了的问题

    2023-04-10 05:20:15
  • js实现鼠标悬浮给图片加边框的方法

    2024-04-18 09:40:22
  • python字符串str和字节数组相互转化方法

    2022-02-14 08:31:48
  • python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)

    2022-03-31 11:23:43
  • SQL中查找某几个字段完全一样的数据

    2024-01-26 12:55:59
  • Python3 用什么IDE开发工具比较好

    2022-10-03 13:43:07
  • Python基于pillow判断图片完整性的方法

    2021-05-12 21:55:50
  • python进阶之多线程对同一个全局变量的处理方法

    2023-09-29 19:03:58
  • 原生js实现autocomplete插件

    2024-04-17 09:44:55
  • 浅谈python中set使用

    2023-05-31 10:57:41
  • Tensorflow使用支持向量机拟合线性回归

    2021-01-20 03:38:42
  • OpenCV角点检测的实现示例

    2023-06-25 06:49:10
  • 基于Python3.7.1无法导入Numpy的解决方式

    2022-10-27 20:50:01
  • vscode怎么编译运行

    2022-12-12 13:52:07
  • Python练习之读取XML节点和属性值的方法

    2021-03-25 19:01:06
  • 基于vue-draggable 实现三级拖动排序效果

    2024-05-29 22:18:05
  • asp之家 网络编程 m.aspxhome.com