我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL中关于Table cache该如何设置

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL中关于Table cache该如何设置

这篇文章将为大家详细讲解有关MySQL中关于Table cache该如何设置,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

因为今天突然有个凌晨5点值班任务,随意翻起同事的书来,看到表对象缓存,这个跟自己平时理解,稍微有差异。所以整理了一下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,跟官网给得最大值没关系

MySQL中关于Table cache该如何设置

MySQL中关于Table cache该如何设置

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

2)open_files_limit

MySQL中关于Table cache该如何设置

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有关

MySQL中关于Table cache该如何设置

4)table_cache_size 计算方式

MySQL中关于Table cache该如何设置

备注:TABLE_OPEN_CACHE_MIN=table_open_cache

5.定期查看open table 情况,

MySQL中关于Table cache该如何设置

通过 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略大。

关于MySQL中关于Table cache该如何设置就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL中关于Table cache该如何设置

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL 字段默认值该如何设置

前言: 在 MySQL 中,我们可以为表字段设置默认值,在表中插入一条新记录时,如果没有为某个字段赋值,系统就会自动为这个字段插入默认值。关于默认值,有些知识还是需要了解的,本篇文章我们一起来学习下字段默认值相关知识。 1.默认值相关
2022-05-17

如何在HTML中设置table宽度

这期内容当中小编将会给大家带来有关如何在HTML中设置table宽度,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。给table标签使用border属性添加边框后,默认宽度有里面的内容决定:
2023-06-15

css中如何设置table边框的颜色

这篇文章主要为大家展示了“css中如何设置table边框的颜色”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“css中如何设置table边框的颜色”这篇文章吧。css中设置table边框颜色的方法
2023-06-15

mysql中如何设置null

mysql 中设置 null 的方法包括:1. 使用 insert 语句插入 null 值;2. 使用 update 语句更新值为 null;3. 使用 alter table 语句将列设置为允许 null;4. 使用 default nu
mysql中如何设置null
2024-04-29

Mysql中如何设置外键

在 MySQL 中,可以使用 FOREIGN KEY 约束来设置外键。外键约束用于确保关系数据库中的数据的完整性和一致性。以下是在 MySQL 中设置外键的步骤:1. 创建两个相关的表,其中一个表将包含外键。例如,我们创建一个名为 "ord
2023-10-26

mysql中文版如何设置

如何在 mysql 中设置中文版本?安装 mysql 服务器和 mysql workbench。修改 mysql 配置文件,添加 character-set-server=utf8 和 collation-server=utf8_gener
mysql中文版如何设置
2024-06-14

Win10中如何设置定时关机

这篇文章主要介绍Win10中如何设置定时关机,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!方法/步骤:方法一:定时关机在键盘上按下“win”+“R”按键调出运行窗口,随后输入命令“at 22:30 shutdown
2023-06-27

css中设置背景图大小该如何实现

这篇文章将为大家详细讲解有关css中设置背景图大小该如何实现,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。css设置背景图大小的方法是,给背景图片添加background-size属性,属性值设置为需要的
2023-06-15

编程热搜

目录