Fari

《高性能MySQL第四版》笔记

MySQL的事务是由存储引擎实现的

事务的四种特性:Atomicity、Consistency、Isolation、Durability:

  1. 原子性:要么全部成功要么全部失败,不能切割

  2. 一致性:数据库的数据从一个一致性状态转移到另一个一致性状态,可以理解为是原子性的一个结果,即执行一个事务后,数据库的数据要么是保持事务执行之前的状态,要么是事务完整执行之后的状态,而不能是事务执行过程中中间的状态

  3. 隔离性:下述的四种隔离级别

  4. 持久性:一旦事务提交,数据就永久保存在数据库中,不会因为数据库崩溃而导致数据丢失

事务的隔离级别:读未提交、读已提交、可重复读、可串行化

  1. 读未提交:事务中可以查看其他事务中还没提交的修改,这个过程称为脏读

  2. 读已提交:大多数据库默认的隔离级别(MySQL不是),只能读取到已经提交的事务修改。但可能存在同一个事务中读取到两个不一样的值(两次读取过程中,其他事务提交了修改)

  3. 可重复读:MySQL默认级别,保证了一个事务中读取的同一个数据是一致的,但如果是读取一个范围内的数据,仍然不能保证一致,例如两次读取一个范围内数据过程中,其他事务向该范围内增加或修改了数据,这一过程称为幻读

  4. 可串行化:读取数据时,在每一行都加上锁,解决幻读问题。但锁的开销巨大

多版本并发控制

使用MVCC用于提高并发性能,Oracle、PostgreSQL也使用了MVCC,但实现方式有区别

MVCC可以认为是行级锁的一个变种,但它很多情况下避免了加锁操作

Performance Schema

提供了数据库优化的一些性能指标

什么是程序插桩?

程序插桩是在mysql代码中插入检测代码,以获取想了解的信息,例如,想要收集关于元数据锁的使用情况,需要启用 wait/lock/meta-data/sql/mdl 这个插桩

什么是消费者表?

用于存储程序插桩获得的记录结果,例如我们为查询模块添加插桩,则相应的消费者表中将记录诸如执行总数、未使用索引的次数、花费的时间等信息