【直播笔记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


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