导读:本文整理对table_definition_cache,table_open_cache和table_open_cache_instances这几种参数的理解,希望对大家有帮助。

先看看官网怎么说:

1. table_definition_cache

the number of table definitions (from .frm files) that can be stored in the definition cache. If you use a large number of tables, you can create a large table definition cache to speed up opening of tables. The table definition cache takes less space and does not use file descriptors, unlike the normal table cache.

理解下来,就是控制总frm文件的数量,还是个hash表,内部维护。如果打开的表实例的数量超过了table_definition_cache设置,LRU机制将开始标记表实例以进行清除,并最终将它们从数据字典缓存中删除。
简单通俗点frm文件有多少,就设置多少了。

2. table_open_cache

The number of open tables for all threads. Increasing this value increases the number of file descriptors that mysqld requires. You can check whether you need to increase the table cache by checking the Opened_tables status variable

所有线程打开的表的数量。增加这个值会增加mysqld需要的文件描述符的数量。可以通过检查Opened_tables状态变量来检查是否需要增加表缓存。

是不是可以理解为ibd/MYI/MYD 文件,打开数量了。但MySQL内部需要对表进行操作的时候,第一需要找到最上层文件的句柄信息,table_open_cache_instances是能提供的,之后对应的寻找ibd,MYI,MYD文件。官网对于这部分没有明确说明。

3. table_open_cache_instances

The number of open tables cache instances. To improve scalability by reducing contention among sessions, the open tables cache can be partitioned into several smaller cache instances of size table_open_cache / table_open_cache_instances . A session needs to lock only one instance to access it for DML statements. This segments cache access among instances, permitting higher performance for operations that use the cache when there are many sessions accessing tables.

打开的表缓存实例的数量。为了通过减少会话间的争用来提高可伸缩性,可以将打开的表缓存划分为几个大小为table_open_cache / table_open_cache_instances的较小缓存实例。一个会话只需要锁定一个实例就可以访问DML语句。写到这里就已经大致了解到 如下关系:

table_definition_cache > table_open_cache_instances > table_open_cache

4. table相关的限制有哪些?

MySQL是多线程,对于并发同一个文件,不同数据的情况下,会打开多个文件,会存在哪些限制呢?下面是源代码里逻辑是这样。

1)table_definition_cache
.frm文件其实最大值只能到2000,跟官网给得最大值没关系

Max值和说明有冲突,实际确认下来就是2000。

2)open_files_limit

limit_1= 10 + max_connections + table_cache_size * 2;

limit_2= max_connections * 5;

limit_3= open_files_limit ? open_files_limit : 5000;

可以看出max_connections有关,需要借助于table open file 的信息。

3)max_connections超出打开文件数量的伐值的时候,也跟table_open_cache有关

4)table_cache_size 计算方式

备注:TABLE_OPEN_CACHE_MIN=table_open_cache

5. 定期查看open table 情况


通过 show global status like ‘%Open%_table%’; 确认是否调优这个参数。

6.常见故障应对:

如:在运行数据库通过 show processlist 可看到大量的 Opening tables、closing tables状态,导致应用端访问操作。

需要确认 table_open_cache=最大并发数表数量(join里可能用到2张表),时候满足当前配置。

如:但并发线程数达到1000,假设这些并发连接中有40%是访问2张表,其他都是单表,那么cache size就会达到(100040%2+100060%*1)=1400
建议定期监控值:

Open_tables / Opened_tables >= 0.85      表的重复使用率
Open_tables / table_open_cache <= 0.95   缓存里存在已打开的表

1)5.7版本已经支持在线动态改配置信息

set global table_definition_cache=2000;
set global table_open_cache=3000;
set global max_connection= 2000;

table_open_cache_instances参数修改需要重新启动服务。

2)无法更改的时候,可通过flush操作,但存在问题

MySQL closes an unused table and removes it from the table cache under the following circumstances: When the cache is full and a thread tries to open a table that is not in the cache.When the cache contains more than table_open_cache entries and a table in the cache is no longer being used by any threads.When a table-flushing operation occurs. This happens when someone issues a FLUSH TABLES statement or executes a mysqladmin flush-tables or mysqladmin refresh command.

这里好奇FLUSH TABLE操作,有如下隐患:
关闭所有打开的表,强制关闭所有正在使用的表,并刷新查询缓存和准备好的语句缓存。FLUSH TABLES还会从查询缓存中删除所有查询结果,比如RESET查询缓存语句。

备注:
另外 table_definition_cache为每个表的表空间中可以同时打开的InnoDB文件的数量定义了一个软限制,这也是由innodb_open_files控制的。

如果设置了table_definition_cache和innodb_open_files,则使用最高设置。如果两个变量都没有设置,则使用默认值更高的table_definition_cache。

总结:
Table缓存关于的参数table_definition_cache,table_definition_cache,table_open_cache_instances 按照实际环境和需求进行设置外,还有跟max_connections也要设置合理。有些环境里发现max_connections过大,过小设置的问题,设置过大可能会存在等待的情况
这些参数控制不好,会给MySQL数据库系统带来性能上的瓶颈。如果把握不是很准,有个很保守的设置建议:把MySQL数据库放在生产环境中试运行一段时间,然后把参数的值调整得比Opened_tables的数值大一些,并且保证在比较高负载的极端条件下依然比Opened_tables略大。

希望工作中,有帮助。

墨天轮原文链接:https://www.modb.pro/db/15158(复制到浏览器中打开或者点击左下角的“阅读原文”)


推荐阅读:144页!分享珍藏已久的数据库技术年刊

点击下图查看更多 ↓

云和恩墨大讲堂 | 一个分享交流的地方

长按,识别二维码,加入万人交流社群

请备注:云和恩墨大讲堂

  点个“在看”

你的喜欢会被看到❤

MySQL关于Table cache设置,看这一篇就够了相关推荐

  1. 基础 | 零散的MySql基础记不住,看这一篇就够啦

    ❝ 这是小小本周的第二篇,本篇将会着重的讲解关于MySql基础的内容,MySql基础看这一篇就够啦. ❞ 送书反馈与继续送书 之情小微信公众号第一次送书,Java深度调试技术,书已经被中奖者麦洛签收, ...

  2. 汇总丨MySQL GTID技术点,看这一篇就够了!

    墨墨导读:对于MySQL GTID,经过多年的磨炼已经很稳定了,作为position方式的延伸,在如今使用环境中带来了很多方便.本文分享GTID技术点的汇总. MySQL复制不管用那个方式,都离不开b ...

  3. 如何查看mysql的gtid_汇总丨MySQL GTID技术点,看这一篇就够了!

    mysql> SELECT * FROM mysql.gtid_executed; mysql.gtid_executed表是由MySQL服务器提供给内部使用的.它允许副本在副本上禁用二进制日志 ...

  4. MySQL基础总结,认真看完这篇就够了!!!

    文章目录 MySQL基础 服务的启动和停止 数据库的相关操作 数据库表的相关操作 表中数据的相关操作 排序和分页 分组查询 联表查询 MySQL事务基础 事务简介 事务操作 事务特征(ACID) 事务 ...

  5. mysql ip比较大小_MySQL优化/面试,看这一篇就够了

    原文链接:http://www.zhenganwen.top/articles/2018/12/25/1565048860202.html 作者:Anwen~ 链接:https://www.nowco ...

  6. 面试被问到 ConcurrentHashMap答不出 ,看这一篇就够了!

    本文汇总了常考的 ConcurrentHashMap 面试题,面试 ConcurrentHashMap,看这一篇就够了!为帮助大家高效复习,专门用"★ "表示面试中出现的频率,&q ...

  7. 如何应对大数据分析工程师面试Spark考察,看这一篇就够了

    作者丨斌迪.HappyMint 来源丨大数据与人工智能(ID:ai-big-data) [导读]本篇文章为大家带来spark面试指南,文内会有两种题型,问答题和代码题,题目大部分来自于网络上,有小部分 ...

  8. 深度好文:云网络丢包故障定位,看这一篇就够了~

    深度好文:云网络丢包故障定位,看这一篇就够了~ https://mp.weixin.qq.com/s/-Q1AkxUr9xzGKwUMV-FQhQ Alex 高效运维 今天 来源:本文经授权转自公众号 ...

  9. 你还不会ElasticsSearch分页查询?那你看这一篇就够了,快拿走吧

    关注.星标下方公众号[ 大数据之美 ],和你一起成长 原文链接:你还不会ElasticsSearch分页查询?那你看这一篇就够了,快拿走吧 引言 我们使用mysql的时候经常遇到分页查询的场景,在my ...

最新文章

  1. 201521123009 《Java程序设计》第10周学习总结
  2. Redis数据库(一)——介绍、配置与优化
  3. c语言考试系统开发,基于WEB的(C语言)网络考试系统的开发与研究
  4. 计算机文字排版竞赛标准,文字录入与排版高手竞赛方案(Word2010).doc
  5. Python 之父 Guido van Rossum 宣布
  6. Java运行时出现”the serializable class drawline does not declare a static final serialversio”...
  7. 理解x86架构的捷径
  8. Android中使用sax解析XML
  9. SpringBoot2集成Quartz配置独立数据源
  10. SpringBoot - @DependsOn注解详解
  11. WPF基础系列六:MVVM框架
  12. 异常,Map,File
  13. python3 陌生的角落(1):基础语法
  14. 【SDUT第11周周赛Problem A】SDUT2576——Queen Collisions
  15. MySQL之高性能的索引策略(索引优化)
  16. IPAD1代做win10的无线拓展屏
  17. 万达商业被曝暂停港股IPO:曾拟募资30亿美元 王健林梦难圆
  18. (转载)libvirt 问题解决记录集
  19. autojs之自动答题
  20. centos6.5升级ntp版本至ntp-4.2.6版本以上

热门文章

  1. 开放防火墙/26ip段_在5个不同国家/地区采用开放硬件设计的电子产品
  2. linux 窗口管理器_您最喜欢的Linux窗口管理器是什么?
  3. 构建嵌入式linux系统_用于构建嵌入式Linux系统的4种工具
  4. docs和src_《编写Docs波特兰2017》中的提示和顶级演示
  5. 数据概览_2015年概览:开源年鉴
  6. 习题7.10 使用割线法求解方程
  7. Vrep中将物体变得透明的方法
  8. ROS笔记(36) 避障运动规划
  9. linux testlink安装,Linux下安装testlink
  10. c语言xuanzeti1,c语言选择题库1