《高性能MySQL》读书笔记

#锁粒度
加锁也需要消耗资源,锁的各种操作,包括获得锁、检查锁是否已经解除、释放锁等,都会增加系统的开销。

#ACID
原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。

#隔离级别
READ UNCOMMITTED(未提交读)
READ COMMITTED(提交读)
REPEATABLE READ(可重复读)
SERIALIZABLE(可串行化)

#死锁
死锁是指两个或多个事务对已获得的资源保持不放,并请求锁定对方占用的资源,从而导致恶性循环的现象。
避免死锁的方案:对资源的获取顺序要保持一致,这样可以尽量避免已占用资源的情况下才发现下一个要占用的资源已经被别的事务占用了。
死锁的处理:要有回滚后的处理机制,innoDB目前处理死锁的方法是,将持有最少行级排他锁的事务进行回滚。回滚后最好有补偿方案(比如定时任务重新发起请求)。

#事务日志
1.使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把修改行为记录到持久在硬盘上的事务日志中。
2.事务日志采用的是追加的方式,因此写日志的操作时磁盘上一小块区域内的顺序I/O。
3.事务日志持久以后,内存中被修改的数据在后台可以慢慢地刷回到磁盘。

#显式和隐式锁定
1.事务中的加锁是隐式的,在事务执行过程中,随时都可以执行锁定,所只有在执行COMMIT或者ROLLBACK的时候才会释放,并且所有的锁是在同一时刻被释放。
2.InnoDB也支持显式锁定,如下:
SELECT ... LOCK IN SHARE MODE;
SELECT ... FOR UPDATE;
这些显式锁定经常被滥用,实际上应当尽量避免使用。

猜你喜欢

转载自www.cnblogs.com/atai/p/12227862.html