发布网友 发布时间:2022-03-29 03:39
共5个回答
热心网友 时间:2022-03-29 05:09
我们都知道 MySQL 的 Table Cache 是表定义的缓存,江湖上流传着各种对这个参数的调优方法。
table cache 的作用,就是节约读取表结构文件的开销。对于table cache 是否命中,其实table cache 是针对于线程的,每个线程有自己的缓存,只缓存本线程的表结构定义。不过我们发现,strace 中没有关于表结构文件的 open 操作(只有 stat 操作,定位表结构文件是否存在),也就是说 table cache 不命中,不一定需要读取表结构文件。这种感觉好像是:在不命中 table cache 时,命中了另外一个表结构缓存。
运维建议:
我们读一下 MySQL 的文档,关于 table_open_cache 的建议值公式:建议值 = 最大并发数 * join 语句涉及的表的最大个数。
通过实验我们容易理解:table_cache 是针对于线程的,所以需要最大并发数个缓存。另外,一个语句 join 涉及的表,需要同时在缓存中存在。所以最小的缓存大小,等于语句 join 涉及的表的最大个数。将这两个数相乘,就得到了 MySQL 的建议值公式。
热心网友 时间:2022-03-29 06:27
cache是高速缓冲存储器 一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问。
Cache由标记存储器和数据存储器两个基本部分组成。标记存储器是用来储存Cache的控制位与块地址标签,控制位用于管理Cache的读写操作,而块地址标签则记录着Cache中各块的地址。这个地址包含了与主内存映射的块地址,并且都与Cache中的一块“数据”相对应。而这块“数据”正是贮存于Cache的数据存储器中。
当CPU读取数据时,先通过地址总线把物理地址送到Cache中,与Cache中的块地址标签进行对比。若相符合,则表示此数据已经存在于Cache中(此情况被戏称为“命中”),这时只需把Cache中的对应数据经由数据总线直接传送给CPU即可。但如果CPU送来的物理地址无法与Cache中的块地址标签相符,则表明这一数据不在Cache中(称为“失误”),这时,需要由主内存把CPU所需的数据地址拷贝到Cache中,再由Cache把数据传送给CPU。
从这个过程我们可以看到,若CPU读取“命中”,存取速度确实可以提高许多,但如果“失误”,则Cache的存在反而减慢了CPU的读取速度。因此,采用何种技术和方法提高读写命中率、减少失误率,就成了Cache设计的关键。加大Cache的容量当然可以提高命中率,但因成本问题,Cache不可能无限增大,但可以通过采用适当的映射方式和块替代方式来提高命中率。
知识拓展
Cache中的映射方式数据如何与主内存中的数据相对应的问题。映射方式通常有以下三种:
1.直接映射
如果主内存上的块只能映射到Cache中的特定块,我们称这种映射方式为直接映射。直接映射的存取速度最快,但失误率也最高。
2.完全映射
在这种映射方式下,主内存上的块可以映射到Cache的任意块之中,当CPU欲读取某一个块时,Cache会把CPU送来的地址与Cache中的所有地址标签进行对比。由于是完全对比,因此存取时间最长,但失误率也最低。
3.结合映射
这种映射方式是把Cache分成若干个页面,每个页面会有相同数目的块。主内存中数据块可以映射到Cache中指定页面的任一块中。这种映射方式可以看成是直接映射与完全映射的折衷,是效率最高的映射方式。
热心网友 时间:2022-03-29 08:18
cache的作用就是缓存浏览过的页面,图片等,比如刚刚看过A页面了,现在看的B页面,如果还想看A页面,直接点后退,A页面就可以从cache中装入,而不用再连接网络下载了,呵呵.
热心网友 时间:2022-03-29 10:26
临时存储数据的地方
临时仓库
搬货速度快
热心网友 时间:2022-03-29 12:51
cache 高速缓冲存储器 一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问。存储器的高速缓冲存储器存储了频繁访问的 RAM 位置的内容及这些数据项的存储地址。当处理器引用存储器中的某地址时,高速缓冲存储器便检查是否存有该地址。如果存有该地址,则将数据返回处理器;如果没有保存该地址,则进行常规的存储器访问。因为高速缓冲存储器总是比主RAM 存储器速度快,所以当 RAM 的访问速度低于微处理器的速度时,常使用高速缓冲存储器