innodb理解

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文件。

相关推荐
zgdlsz1 分钟前
羲之文化传承人王杰宝:沉厚笔墨间的守正出新
大数据·数据库·数据仓库·涛思数据
打小就很皮...1 分钟前
基于 Python + LangChain + SQL 生成自动查询数据实战
数据库·sql·langchain
xcLeigh3 分钟前
KES大小写混合路径+国产OS/文件系统兼容实战
linux·数据库·文件系统·兼容性·麒麟·欧拉·kes
神明9314 分钟前
Golang testing怎么写单元测试_Golang单元测试教程【经典】
jvm·数据库·python
神明93115 分钟前
如何自动同步SQL异构表数据_利用触发器实现实时数据复制
jvm·数据库·python
这个DBA有点耶15 分钟前
某银行核心系统从Oracle迁移到国产数据库全程复盘(DBA视角)
数据库·经验分享·sql·oracle·dba·智能硬件
2401_8504916516 分钟前
CSS 悬停箭头跳动问题的根源与稳定解决方案
jvm·数据库·python
m0_6315298224 分钟前
如何创建物化视图日志_CREATE MATERIALIZED VIEW LOG记录基表DML变更
jvm·数据库·python
m0_7020365328 分钟前
Layui表格渲染如何处理字段名为JSON关键字(如order)的情况
jvm·数据库·python
m0_5913647332 分钟前
mysql连接查询中包含大表如何优化_采用嵌套循环JOIN优化顺序
jvm·数据库·python