【直播笔记0424】面试必问的mysql事务和锁机制-马士兵

经过这一篇解决Mysql的大多数基础问题
面试必问的mysql事务和锁机制

事务的四个特点是什么?他们的实现原理是什么?
MVCC如何实现多版本并发控制?如何解决读写冲突?

马士兵yyds

  • mysql的整体架构
  • MySql的日志系统
    • 如何实现事务特性
    • 什么是WAL?保证持久性
    • 什么是mysql的两阶段提交?
  • 什么是MVCC?
    • 数据库支持的并发有几种情况?
    • Mysql有几种读的方式?
    • 什么是MVCC?
    • MVCC如何实现的?
    • RR隔离级别能否解决幻读问题?
    • 产生幻读的本质原因
  • 数据一致性
  • 如何查看死锁?

在这里插入图片描述

mysql的整体架构

AST:抽象语法树(antlr,calcite)
https://shardingsphere.apache.org/document/4.1.0/en/features/sharding/principle/parse/
CBO:基于成本的优化
RBO:基于效率的优化

在这里插入图片描述

MySql的日志系统

errorlog:错误日志
binlog: 主从复制,主从同步
slowlog:慢日志
relaylog:中继日志
以上日志位于server层面,跟存储引擎无关。


以下日志属于innodb存储引擎,其他存储引擎是不包含这两个日志
undolog:回滚日志
redolog: 前滚日志

在这里插入图片描述

如何实现事务特性

隔离性:
锁机制:效率慢
mvcc多版本并发控制 : 效率高

什么是WAL?保证持久性

https://zhuanlan.zhihu.com/p/137512843
hbase里也有WAL。

Write Ahead Log 预写日志。
每次在进行操作的时候,先写到日志redolog里面写,再往磁盘里面写。断电了可以回来查看日志。
顺序读写:直接往后append,追加,效率高
随机读写:移动到指定位置,再读写。

什么是mysql的两阶段提交?

在这里插入图片描述
多个mysql间保持数据一致性: 主从,依靠binlog

在这里插入图片描述
先写redo,断电了,a恢复,但是b没有
先写binlog,也存在问题。
所有就有两阶段提交

两阶段提交:redolog有两种状态。
在这里插入图片描述

什么是MVCC?

mysql在加锁过程中是给索引加锁。

数据库支持的并发有几种情况?

读读,读写,写写。
读读不需要加锁,不存在问题,不需要并发控制
在这里插入图片描述

Mysql有几种读的方式?

当前读:读取的是数据的最新版本,而且要保证其他并发事务不能修改当前记录

哪些操作会触发当前读操作:lock in share mode,for update,updatedelete,insert

快照读:不加锁的非阻塞读,读取的是历史版本的数据,不是最新的记录。

哪些操作会触发快照读操作:不加锁的select

在这里插入图片描述

什么是MVCC?

MVCC:multi-Version concurrency control:多版本并发控制,用来解决并发读写的问题,不需要通过加锁来解决
在这里插入图片描述
在这里插入图片描述

MVCC如何实现的?

在这里插入图片描述
三个组件来实现的。
隐藏字段,Undolog,readview
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
readview:事务id的视图
在这里插入图片描述
案例展示1
在这里插入图片描述
案例展示2
在这里插入图片描述
假设
在这里插入图片描述

说明第二次select并没有生成新的readview,而是沿用了第一次快照时刻的readview。
在这里插入图片描述

RR隔离级别能否解决幻读问题?

不能。

产生幻读的本质原因

如果事务中都是用快照读,那么是不会产生幻读问题的,但是当快照读和当前读一起使用的时候就产生了幻读问题
在这里插入图片描述
在这里插入图片描述

数据一致性

异步刷盘
了解:同步,半同步,异步

如何查看死锁?

show engine innodb status\G

在这里插入图片描述
在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部