数据库,不止是静态的供我们查询;还会动起来,进行更新操作,跑一些事务。
一、总结
1.1 动起来的数据库,有哪些问题?
- 日志:占用内存、占用硬盘;
- 死锁(行级锁)、锁等待(元数据锁)
- 事务的隔离性级别,产生脏读、幻读、不可重复读;
1.2 MySQL日志体系
数据更新的流程图:
其中有两个地方是可以设置的,进行刷盘。确保日志的持久化:
- redo log写入内存时,提交事务之前,强制刷盘;
- bin log在写入内存时,提交事务之前,也强制刷盘;
1.3 MySQL的锁
1.4 事务、MVCC
有了日志、锁的基础,就可以研究事务、MVCC
- 因为undo log能够实现行记录的历史版本,那么就能实现快照读;
- 快照读,不加行锁,加的是自动的元数据锁MDL
- 当前读,是要读取该行记录的最新版本。加行锁,该行记录同一时间只能由一个人来修改
- 行锁+间隙锁,合体为Next-Key Lock
1.5 MySQL的刷脏
MySQL数据库跑着,卡个几秒没有响应,不是在GC,而是在刷脏:
Comments | NOTHING