MySQL 5.6中Table cache是什么

62次阅读
没有评论

共计 1352 个字符,预计需要花费 4 分钟才能阅读完成。

丸趣 TV 小编给大家分享一下 MySQL 5.6 中 Table cache 是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

一、Table
Cache

 MySQL
5.6 后,引入了“table_cache_instances”参数来控制 table
cache instance 的个数。目前最大值是 64,默认值是 1。建议值是 16,当系统 CPU 核数高于 16 时。引入此参数的目的是,提高并发。相当于把 table
cache 拆成了多个分区,每个分区的打开 table 句柄数为:table_open_cache / table_open_cache_instances。跟 innodb_buffer_pool_instances 参数有异曲同工的作用。
     table_cache_instances 的最大值为 64,每个 thread 会使用哪个 table cache
instance,根据 thread
id 取模得到:m_table_cache
[thread_id % table_cache_instances]。其中 m_table_cache 是 table cache 的 instance 分区数组。源码定义如下:

      Table
cache instance 统一由 Table_cache_manager 类来管理。Table_cache_manager 负责初始化和销毁 table cache
instance。
      另外,取代 LOCK_open 锁的是 64 个 m_lock
mutex。因此大大降低了 table
cache 锁的争用,将其分摊到了 64 个 instance 上的 m_lock
mutex 上。
      但是涉及到多个 table cache 中的对象的 DDL 语句,仍然需要整个 table cache 级别的锁,即 Lock_open。另外,对所有 table cache
instances 以及 table
definition cache 上锁时,也需持有 Lock_open 锁。

二、Table cache Table definition cache

Table cache 与 Table
definition cache 是两个概念完全不同的东西。

Table cache:也就是通常说的 table open
cache。存放当前已经打开的表句柄,与表创建时指定的存储引擎相关。这块在源码上的体现是
table object 即有指向 table
share 的指针,也有指向具体存储引擎的 handler 指针。

Table definition cache:存放表的定义信息。是 frm 文件在内存中的映射。MySQL 需要打开 frm 文件,并将其内容初始化为 Table Share
对象。这里存放与存储引擎无关的,独立的表定义相关信息。

为什么 MySQL 会出现这两个概念是因为:MySQL 支持不同的存储引擎,每种存储引擎,数据存储的格式都是不一样的,因此需要指定一个存储引擎相关的 handler。这就有了 table cache 的作用。另外表的定义也需要存放内存中,而表的定义 frm 文件每个存储引擎是通用的,需要另外独立开来,这就有了 table
definition cache。

看完了这篇文章,相信你对“MySQL 5.6 中 Table cache 是什么”有了一定的了解,如果想了解更多相关知识,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-26发表,共计1352字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)