mysql缓存怎么设置 mysql80 缓存( 二 )


运维建议:
我们读一下 MySQL 的文档,关于 table_open_cache 的建议值公式:建议值 = 最大并发数 * join 语句涉及的表的最大个数 。
通过实验我们容易理解:table_cache 是针对于线程的 , 所以需要最大并发数个缓存 。另外,一个语句 join 涉及的表,需要同时在缓存中存在 。所以最小的缓存大小,等于语句 join 涉及的表的最大个数 。将这两个数相乘,就得到了 MySQL 的建议值公式 。
MySQL表对象缓存表对象缓存: 是将某个表对象的字典信息(定义内容)缓存到内存中,用来提高对表的访问效率 。某个表被访问过一次后 , 只要服务器没有关闭且表定义没有被修改的条件下 , 访问该表,只需要从内存中找到这个已经缓存起来的对象做相应操作即可 。
用户访问表时,表对象在缓存时: 通过HASH算法找到TABLE_SHARE,然后每个线程构造各自的实例化TABLE即可 。
用户访问表时,当表没有被缓存的情况下: 第一需要打开表,首先需要从系统表中将这个表的所有信息都读入内存中 , 这些信息包括表名、库名、所有列信息、列的默认值、表的字符集、对应的frm文件路径、所属存储引擎、主键等,将这些信息构造一个TABLE_SHARE结构体,这个结构体是表对象缓存的第一层,所有用户共享访问且为静态不允许修改 , 它是缓存在table_def_cache(由参数table_definition_cache控制)中的 。
而真正与用户打交道的是TABLE_SHARE的衍生品,它对应结构体为TABLE,在被使用前需要将TABLE_SHARE结构体实例化TABLE才能被使用,由每个线程构造各自的实例化TABLE即可 。(实例化的TABLE由table_open_cache及table_open_cache_instance控制)
注意1: DDL操作时会将所有instance锁?。?而DML操作时instance之间互不干扰 。
(DDL statements still require a lock on the entire cache, but such statements are much less frequent than DML statements.)
注意2: 一个线程中如果打开表过多,超过一个instance限制的大小时,是不能跨instance缓存的
(instance大?。簍able_open_cache / table_open_cache_instances)
表缓存涉及其mysql缓存怎么设置他参数: 通过下面参数判断table_open_cache参数设置是否合理
table_open_cache_hit:能够从table open cache的free list中找到table则为命中,+1
table_open_cache_misses:与table_open_cache_hit相反,如果找不到则需要重新实例化则+1,通常发生在初始化第一次加载表或超过table_open_cache的设置被淘汰后需要重新实例化 。
table_open_cache_overflow:table cache淘汰的数量,每次淘汰+1
opened_tables:已经打开的表数 。如果Opened_tables很大 , 那么table_open_cache的值可能太小mysql缓存怎么设置了 。
open_tables:总的instance (table cache)的总数
【mysql缓存怎么设置 mysql80 缓存】mysql缓存怎么设置的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于mysql80 缓存、mysql缓存怎么设置的信息别忘了在本站进行查找喔 。