mysql技术内幕

innodb存储引擎

内存

1
2
3
4
5
6
7
8
9
10
11
                缓存池
内存页 插入缓冲 锁消息
重做日志缓冲
额外内存池
索引页 自适应哈希索引 数据字典信息




缓存池
通过lru算法来进行管理的.频繁的在前端,最少使用的在尾端

innodb关键特性

1
2
3
4
5
6
7
8
9
10
11
12
插入缓存
insert buffer
索引是辅助索引
索引不是唯一的,因为不会去超找索引页来判断插入的记录的唯一性,如果去查找肯定会有离散读取到情况,从而导致insert buffer失去意义
change buffer
insert,delete,purge进行缓冲

update过程->
记录标记已删除
真正将记录删除
delete buffer对应第一个
purge buffer对应第二个
1
2
两次写
重做日志前,用户u赢一个页的副本,当写入失效发生时,先通过页的副本来还原改页,在进行重做,这就是doublewrite.
1
自适应哈希索引
1
异步io
1
2
刷新邻接页
当刷新一个脏页时,innodb会检测该页所在区到所有页,如果是脏页,那麽一起进行刷新

innnodb文件

1
2
3
4
5
日志文件
错误
慢查询
查询
二进制

innnodb表

1
tablespace-->多segment(段)->多extent(区)->多page(页)->多row

索引和算法

1
2
3
b+树索引
全文索引
哈希索引
1
2
3
4
5
b+树高度一般在2-4层
一般100次/每秒,2-4次只需要20-40ms


16*1000*1000****
1
2
聚集索引
辅助索引
1
2
3
联合索引
覆盖索引
优化器选择不使用索引当情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
锁类型
共享锁
排它锁
意向锁
意向共享锁:一张表中某几行的共享锁
一项排它锁
一致性非锁定读
read commit
最新快照
repeatable
开始的时候
一致性锁定读
select for update
select lock in share mode
锁定算法
record lock
gap lock
next-key lock 解决幻读

事务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
a
c
i
d



事务实现

undo
记录事务的行为,可以很好的通过其对页进行重做操作,事务需要回滚操作,这时需要undo.
数据库内部一个特殊段
帮助事务回滚和mvcc的功能
update
redo
存放在重做日志缓冲,易失
重做日志文件,持久
保证事务的持久性

purge
delete和update操作可能并不直接删除原有的数据
仅记录删除,mvcc需要
需要purge进行清理





事务隔离级别
read uncommitted
read committed
repeatable read
serializable
默认会添加一个select in share lock

性能调优

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
innodb一般应用于oltp的应用
并发量大
时间段
语句简单,一般走索引
复杂查询少




cpu
并发
内存
buffer pool
硬盘
机械硬盘
寻道,转速
固态硬盘
低延迟,低功耗,防震性