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

相关推荐
蓝田~13 分钟前
MySQL慢查询怎么优化?B+Tree索引原理+MVCC读不阻塞写+EXPLAIN执行计划,从5秒到0.05秒
数据库·mysql
sunxunyong1 小时前
doris用户资源组配置
数据库
Cloud云卷云舒1 小时前
云卷云舒:HaishanDB的AI原生能力主要应用场景
数据库·人工智能·ai-native·haishandb·移动云长期记忆
时间的拾荒人1 小时前
MySQL 视图详解
android·数据库·mysql
qq_366086221 小时前
sql 查询中关于 null 值判断的问题
数据库·sql
测试修炼手册2 小时前
[测试技术] JUnit 6 入门与实战:断言、参数化与 Mockito
数据库·junit·sqlserver
吴声子夜歌2 小时前
Redis 3.x——集群故障转移
java·数据库·redis·集群
名不经传的养虾人2 小时前
从0到1:企业级AI项目迭代日记 Vol.71|系统显示正常,但实际上什么都没发生
数据库·人工智能·ai编程·ai工作流·企业ai
尽兴-2 小时前
企业数据库选型与演进:Oracle、达梦、MySQL 与分库分表实践
数据库·mysql·oracle·分库分表
空中湖3 小时前
Spring AI Function Calling 完全指南:让 AI 查数据库、调 API、发通知
数据库·人工智能·spring