MySQL
啾啾猫咪
这个作者很懒,什么都没留下…
展开
-
Innodb 什么是Next-Key Lock
Innodb 什么是Next-Key LockInnodb的锁机制Innodb有三种锁:Record Lock:对单行记录上锁。Gap Lock:间隙锁,锁定记录附近的一个范围,但不包括记录本身。间隙锁的目的是为了防止同一事务内的两次当前读之间,出现新数据插入而导致幻读的情况。比如说我要更改status=1的记录,间隙锁会给所有目标记录附近的记录上锁,避免在目标记录周围出现插入和删除操作影响update。Gap Lock只能阻止其他事务在被上了间隙锁的记录行附近插入记录,无法阻止其他事务对该原创 2022-02-27 19:02:21 · 399 阅读 · 0 评论 -
什么是脏读、幻读、不可重复读,怎么解决?
脏读一个事务访问到了其他事务未提交的数据更改例:事务A对一个数据进行了修改操作,但事务A未提交,事务B在查询时却查到了修改后的数据。脏数据:事务B查询到事务A修改后的数据,但是事务A回滚了,此时事务B查询出来的数据就是脏数据。幻读在一个事务中进行了两次查询操作,得到的行数不一致例:一个事务进行两次查询操作,在两次查询之间,另一个事务插入了新数据并提交事务,导致第二次查询多了一条数据。不可重复读在一个事务中进行了两次查询操作,得到的数据内容不一致例:事务A进行两次查询操作,在两次原创 2022-02-27 18:09:58 · 1350 阅读 · 0 评论 -
MVCC实现原理笔记
MVCC是通过全局事务ID、表中隐藏的版本列、undolog和read view结合实现的。全局事务IDInnodb每开启一个事务都会随机生成一个自增事务版本号。表中隐藏的版本列DB_TRX_ID: 记录操作该数据事务的事务ID;DB_ROLL_PTR:指向上一个版本数据在undo log 里的位置指针;DB_ROW_ID: 隐藏ID ,当创建表没有合适的索引作为聚集索引时,会用该隐藏ID创建聚集索引;undologundolog是个逻辑日志,他记录的是与SQL操作相反的语句,用于事务的原创 2022-02-25 12:28:29 · 395 阅读 · 0 评论 -
MySQL主从同步流程详解
MySQL主从同步流程详解从库进行配置,设置从库要从主库binlog的哪一个位置开始请求数据,这个位置信息包括主库binlog文件名及偏移量。从库开始执行主从同步,这时从库会开启两个线程,一个是IO线程,一个是SQL线程。IO线程负责与主库建立连接,连接建立后,从库向主库发送身份信息、所需的binlog文件名及偏移量。主库开启一个dump线程,与从库建立连接(当主库连接了多个从库时,主库会为每一个当前连接的从库建一个dump线程)。连接后校验从库的身份信息,然后根据从库发来的binlog文原创 2022-02-19 22:31:50 · 1007 阅读 · 0 评论 -
为什么Innodb用B+树而不用跳表
为什么Innodb用B+树而不用跳表(1)Innodb出来时跳表还没发扬光大,所以没选跳表?(2)B+树的一个节点可以存储很多关键字,而且单个节点大小可以与磁盘页对齐(默认16kb),一次IO就能传输一整个节点(跳跃表可能会出现跨页IO),大幅减少磁盘IO次数,所以B+树更适合用于文件系统及关系型数据库。(3)跳跃表的索引层建立具有随机性,磁盘不能对链表进行预读,会产生大量随机IO。(磁盘预读:从本次被读取的位置开始,顺序向后读取一定长度的数据放入内存)(4)B+树检索效率比跳表高。...原创 2022-02-18 01:36:49 · 1286 阅读 · 0 评论 -
面试题:B树与B+树的区别,为什么Innodb要用B+树而不是B树
面试题:B树与B+树的区别,为什么Innodb要用B+树而不是B树B树B树是一种平衡的多路查找树,它的所有叶子节点都在同一层。B树是由平衡二叉树演化而来,B树的每个节点可以存储多个关键字,每个节点都带有完整的数据。B树将节点大小设为磁盘页的大小,每次读取磁盘页时就能读取到一整个节点,减少了磁盘IO次数。由于B树的每个节点都存储着多个关键字,树的深度会远小于一般的平衡二叉树,进而减少了磁盘IO次数。B树在进行搜索关键字操作时,先将指定的那一个节点从磁盘读取到内存中(这个节点包含了多个关键字和数据),原创 2022-02-13 18:54:24 · 1162 阅读 · 0 评论 -
MySQL为什么需要两阶段提交
MySQL为什么需要两阶段提交两阶段提交图解为什么需要两阶段提交?保证binlog与redolog的数据一致性。如果没有两阶段提交:先写redolog,再写binlog:redolog写完,还没来得及写binlog,MySQL宕机。重启以后,redolog里有记录,MySQL判断事务提交成功,但binlog里没有记录,binlog与redolog出现数据不一致。由于binlog是追加写入日志,往后的时间里binlog会一直缺失这条数据。如果在以后使用binlog恢复这个时间点的数据,会出现原创 2022-02-13 17:56:01 · 888 阅读 · 0 评论 -
MySQL三大日志知识点总结
MySQL三大日志知识点总结binlog 二进制日志redolog 重做日志undolog 回滚日志binlog什么是binlog?binlog是MySQL Server层的二进制日志,用于记录MySQL执行的所有写入性操作。无论MySQL使用什么存储引擎,写入性操作都会记录到binlog。binlog是逻辑日志,新来的写入性操作通过追加的方式进行写入。如果当前binlog文件过大,MySQL会创建一个新的binlog文件来记录MySQL操作。可以将binlog理解为一个记录所有写入性s原创 2022-02-13 17:07:58 · 1048 阅读 · 0 评论