MYSQL日志 MySQL InnoDB及MyISAM 行锁,表锁,间隙锁

 

Bin log 二进制日志  备份  增量备份 DDL DML DCL

Erro Log 错误日志   排错  

Relay Log 中继日志  复制 接收relication master

Slow query  Log 慢查询日志

Redo Log 重做日志

什么时候产生:
  事务开始之后就产生redo log,redo log的落盘并不是随着事务的提交才写入的,而是在事务的执行过程中,便开始写入redo log文件中。
什么时候释放:
  当对应事务的脏页写入到磁盘之后,redo log的使命也就完成了,重做日志占用的空间就可以重用(被覆盖)。

事务开始之后就产生redo log,redo log的落盘并不是随着事务的提交才写入的,而是在事务的执行过程中,便开始写入redo log文件中。

即使某个事务还没有提交,Innodb存储引擎仍然每秒会将重做日志缓存刷新到重做日志文件。

Undo Log 回滚日志


保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC)

什么时候产生:
  事务开始之前,将当前是的版本生成undo log,undo 也会产生 redo 来保证undo log的可靠性

什么时候释放:
  当事务提交之后,undo log并不能立马被删除,
  而是放入待清理的链表,由purge线程判断是否由其他事务在使用undo段中表的上一个事务之前的版本信息,决定是否可以清理undo log的日志空间。

两阶段提交

MySQL通过两阶段提交过程来完成事务的一致性的,也即redo log和binlog的一致性的,理论上是先写redo log,再写binlog,两个日志都提交成功(刷入磁盘),事务才算真正的完成。

表锁

偏向MyISAM存储引擎,开销小,加锁快;无死锁;锁定粒度大,并发度低;

show open tables;

手动锁表:

lock table jeuc read(读共享锁:可读自己,不可修改自己,不可读别的表) ;

读锁:读共享锁:当前Session1可读自己,Session1不可修改自己,Session1不可读别的表;Session2 可读取,Session2修改操作在当前Session1解锁期间,处于阻塞状态。

lock table jeuc write(独占锁);

写锁:当前Session1可读自己,Session1可修改自己,Session1不可读别的表;Session2 ,Session2 在当前Session1解锁期间,读写都处于阻塞状态。

手动释放表:

unlock tables;

总之:对MyISAM读锁会阻塞写,不会阻塞读。写锁会把读写都阻塞。

show STATUS LIKE 'table%';

行锁

偏向innodb存储

索引失效行锁变表锁 

间隙锁 

范围查询,InnoDB会给符合条件的已有数据的索引项加锁,对于在范围条件内但并不存在的记录,叫做间隙锁。即使键值不存在。

参考:https://zhuanlan.zhihu.com/p/86538338

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值