《高性能MySQL第四版》笔记
MySQL的事务是由存储引擎实现的
事务的四种特性:Atomicity、Consistency、Isolation、Durability:
-
原子性:要么全部成功要么全部失败,不能切割
-
一致性:数据库的数据从一个一致性状态转移到另一个一致性状态,可以理解为是原子性的一个结果,即执行一个事务后,数据库的数据要么是保持事务执行之前的状态,要么是事务完整执行之后的状态,而不能是事务执行过程中中间的状态
-
隔离性:下述的四种隔离级别
-
持久性:一旦事务提交,数据就永久保存在数据库中,不会因为数据库崩溃而导致数据丢失
事务的隔离级别:读未提交、读已提交、可重复读、可串行化
-
读未提交:事务中可以查看其他事务中还没提交的修改,这个过程称为脏读
-
读已提交:大多数据库默认的隔离级别(MySQL不是),只能读取到已经提交的事务修改。但可能存在同一个事务中读取到两个不一样的值(两次读取过程中,其他事务提交了修改)
-
可重复读:MySQL默认级别,保证了一个事务中读取的同一个数据是一致的,但如果是读取一个范围内的数据,仍然不能保证一致,例如两次读取一个范围内数据过程中,其他事务向该范围内增加或修改了数据,这一过程称为幻读
-
可串行化:读取数据时,在每一行都加上锁,解决幻读问题。但锁的开销巨大
多版本并发控制
使用MVCC用于提高并发性能,Oracle、PostgreSQL也使用了MVCC,但实现方式有区别
MVCC可以认为是行级锁的一个变种,但它很多情况下避免了加锁操作
Performance Schema
提供了数据库优化的一些性能指标
什么是程序插桩?
程序插桩是在mysql代码中插入检测代码,以获取想了解的信息,例如,想要收集关于元数据锁的使用情况,需要启用 wait/lock/meta-data/sql/mdl 这个插桩
什么是消费者表?
用于存储程序插桩获得的记录结果,例如我们为查询模块添加插桩,则相应的消费者表中将记录诸如执行总数、未使用索引的次数、花费的时间等信息