MVCC 水略深,但是弄懂了真的好爽!
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
摘要
本文详细讨论了MySQL的MVCC(多版本并发控制)机制,包括事务隔离级别、快照读与当前读、undo log、行格式以及MVCC在不同隔离级别下的工作原理。
1. 隔离级别
MySQL支持四种事务隔离级别:序列化(SERIALIZABLE)、可重复读(REPEATABLE READ)、提交读(READ COMMITTED)、未提交读(READ UNCOMMITTED)。隔离级别越高,事务之间的隔离程度越严格,但可能影响性能。默认隔离级别是REPEATABLE READ。
2. 快照读与当前读
快照读返回事务开始时的数据状态,而当前读返回最新的数据状态。REPEATABLE READ下的快照读不会看到其他事务的修改,而当前读可以。
3. undo log
undo log记录数据的旧版本,用于事务回滚。
4. 行格式
行格式决定了数据如何存储,每行数据包括3个隐藏列:DB_ROW_ID(行ID),DB_TRX_ID(事务ID)和DB_ROLL_PTR(回滚指针)。
5. MVCC
MVCC是一种通过保存数据行的历史版本来支持高并发的技术。在REPEATABLE READ隔离级别下,事务在开始时创建一致性视图,而READ COMMITTED每个语句执行前都会创建新视图。MVCC使读写操作可并发执行。
6. 小结
MVCC使得在REPEATABLE READ和READ COMMITTED隔离级别下,读写操作并发执行,提高了性能。READ UNCOMMITTED总是读取最新数据,而SERIALIZABLE对所有读取行加锁。
想要了解更多内容?