数据库缓存机制是什么?缓存是如何作用数据库?

数据库缓存机制是什么?缓存是如何作用数据库?,第1张

缓存的介质一般是内存,所以读写速度很快。但如果缓存中存放的数据量非常大时,也会用硬盘作为缓存介质。缓存的实现不仅仅要考虑存储的介质,还要考虑到管理缓存的并发访问和缓存数据的生命周期。

缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。

因为缓存往往使用的是RAM(断电即掉的非永久储存),所以在用完后还是会把文件送到硬盘等存储器里永久存储。电脑里最大的缓存就是内存条了,最快的是CPU上镶的L1和L2缓存,显卡的显存是给显卡运算芯片用的缓存,硬盘上也有16M或者32M的缓存。

1、打开mysql的客户端 这里使用navicat,连接数据库,等到navicat主页面,双击需要 *** 作的数据库连接。

2、登录到数据库主页面后,点击左侧的数据库连接,打开数据库,可以看到可以 *** 作的所有数据库。

3、这时有有两个数据库,目标是将数据1的所有数据同步到数据库2上,需要点击主页面上的。

4、打开工具菜单,选择数据库同步菜单,d出数据同步的对话框,可以选择数据源,目标数据库。

5、选择数据库源和需要 *** 作的数据库后,然后在选择目标数据库连接,目标数据库,然后在选择需要 *** 作的表,点击开始即可。

表对象缓存: 是将某个表对象的字典信息(定义内容)缓存到内存中,用来提高对表的访问效率。某个表被访问过一次后,只要服务器没有关闭且表定义没有被修改的条件下,访问该表,只需要从内存中找到这个已经缓存起来的对象做相应 *** 作即可。

用户访问表时,表对象在缓存时: 通过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大小:table_open_cache / table_open_cache_instances)

表缓存涉及其他参数: 通过下面参数判断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的值可能太小了。

open_tables:总的instance (table cache)的总数


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9859182.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存