mysql 大杂烩

 1、事物

高性能Mysql这本书对MVCC的定义。

他的主要实现思想是通过数据多版本来做到读写分离。从而实现不加锁读进而做到读写并行。MVCC在mysql中的实现依赖的是undo log与read view;

  

2、索引

 

3、锁

  • MVCC解决的是普通读(快照读)的幻读,
  • next-key locks解决的是当前读情况下的幻读。

 

4、当前读、快照读

MySQL InnoDB 引擎的默认隔离级别是「可重复读」,但是它很大程度上避免幻读现象(并未完全解决,参看[1]),解决的方案有两种:

1、针对快照读(普通 select 语句),是通过 MVCC 方式解决了幻读,因为可重复读隔离级别下,事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,即使中途有其他事务插入了一条数据,是查询不出来这条数据的,所以就很好地避免幻读问题。

2、针对当前读(select ... for update 等语句),是通过 next-key lock(记录锁+间隙锁)方式解决了幻读,因为当执行 select ... for update 语句的时候,会加上 next-key lock,如果有其他事务在 next-key lock 锁范围内插入了一条记录,那么这个插入语句就会被阻塞,无法成功插入,所以就很好地避免幻读问题。

 

 5、redo log、undo log、binlog、 wal

https://www.cnblogs.com/mengxinJ/p/14211427.html

 

 6、mysql军规

https://www.slideshare.net/slideshow/mysql-9838563/9838563#1

 

7、wal

Write Ahead Logging,简称WAL,也被翻译成预写式日志,是数据库技术中实现事务日志的一种标准方法,可以实现单机事务的原子性,同时可以提高数据库的写入效率。
原理
【写操作】 WAL怎么解决宕机和恢复的问题:
写WAL前宕机了,重启后,数据处于事务未执行的状态
写WAL时宕机了,重启后,可以检查到WAL数据不正确,回滚当事务前的状态
写WAL后宕机了,重启后,把WAL中记录的操作,应用到数据库文件中,得到事务执行后的状态
WAL的核心思想是: 先写日志再写数据文件,修改数据文件必须发生在修改操作记录在日志文件之后.

 

 

参考

https://www.jianshu.com/p/081a3e208e32

https://www.cnblogs.com/crazymakercircle/p/16990178.html

posted @ 2024-07-03 12:05  人在江湖之诗和远方  阅读(1)  评论(0编辑  收藏  举报