1.第1个概念buffer pool,当用户想从数据库中获取数据的时候,会从buffer pool中获取数据,如果bp中没有的话会从磁盘中读取。但是内存的空间是少的,所以会通过LRU算法去置换数据。LRU是最近最少使用的算法。通过这个可以使内存空间得到控制。
如果buffer pool还不够快怎么办,在bp的基础上开辟了AHI,自适应hash索引,通过这个索引可以更快的找到想要的数据。
2.知道了怎么读数据后,引出第2个概念就是怎么更数据,改数据分为二类一类是磁盘中存在的,一类是不存在的,对于存在的则直接修改bp中的记录就可以了,如果不存在的呢?如果也先读取进bp,然后再修改的话,就很费时间,所以创建了changer buffer。这个buffer对修改的数据进行储存,先记录下来,如果有人读取的话就更新到bp中,如果没人读取的话,就定期存入磁盘。
这里面还有一个小知识点,就是不是所有的更新都可以通过cb来完成,只有不涉及主键或唯一约束的更新才可以通过cb来进行优化,因为那种有约束的需要第一时间反馈结果,所以不适用于这种场景。
另外第二个小知识点,就是cb中的数据如果通到bp中时,是需要进行merge的。
第三个小知识点,如果直接更新bp的数据,需要打上脏数据标记,然后再更新到磁盘。
3.核心概念log buffer,这个叫日志缓存,数据变更会通过它定期写入磁盘。这里有一个小概念,就是change buffer中的记录不会直接存入log buffer,只有在merge后,直成进入bf时,才会写入log buffer.log buffer中记录的是redo log.
内存3剑客就说完了,接下来就是磁盘部分了。
首先是系统表空间和redo log文件。
