目录
一、MVCC多版本并发控制机制
二、事务的隔离级别
一、MVCC多版本并发控制机制
1、定义:
MVCC(Multi-Version Concurrency Control,多版本并发控制)一种并发控制机制,在数据库中用来控制并发执行的事务,控制事务隔离进行。
2、MVCC的好处包括:
1、并发性能提升:MVCC允许多个事务同时读取数据库中的数据,同时进行读写操作,避免了锁定整个数据对象的情况,提高了并发性能。
2、无锁冲突:由于每个事务可以看到一致性的数据视图,事务之间互不干扰,避免了传统锁机制下可能出现的死锁等冲突问题。
3、数据一致性:每个事务只能看到在其开始之前已经提交的数据,保证了数据一致性。
然而,MVCC也有一些限制和注意事项:
1、存储空间占用:由于每个数据行可能存在多个版本,MVCC可能会占用更多的存储空间。
2、随机写性能:对于频繁进行大量更新操作的场景,由于需要创建新版本,MVCC可能会影响随机写性能。
3、销毁时间戳回收:事务的销毁时间戳需要及时回收,以避免无用的数据版本堆积,影响性能。
综上所述:MVCC是一种高效的并发控制机制,通过版本管理和时间戳来实现并发事务的隔离
二、事务的隔离级别
事务的隔离级别是指多个并发事务之间的相互关系和可见性的级别。数据库系统通过隔离级别来控制并发事务间的影响,保证事务的正确执行和数据的一致性(多个客户端操作时 ,各个客户端的事务之间应该是隔离的,相互独立的 , 不受影响的。如果多个事务操作同一批数据时,则需要设置不同的隔离级别 , 否则就会产生问题 )
1、Read Uncommitted(读取未提交数据):是最低的隔离级别,事务可以读取其他事务未提交的数据。这种级别有最高的并发性,但是可能导致脏读(Dirty Read),即读取到其他事务更新但未提交的数据。(一个事务读到了另一个事务还没有提交的数据)
2、Read Committed(读取已提交数据):保证了事务只能读取到已经被提交的数据,避免了脏读。在这个级别下,事务只能看到并发事务提交的数据,但由于其他事务可能在事务执行期间提交新的数据,可能导致不可重复读(Non-Repeatable Read),即多次读取同一数据得到的结果不一致。(一个事务要等另一个事务提交后才能读取数据)
3、Repeatable Read(可重复读):保证了事务在执行期间多次读取同一数据时结果保持一致。在这个级别下,事务在读取数据时会获取共享锁,防止其他事务修改数据,但不阻止其他事务新增数据。这种级别可以避免脏读和不可重复读,但仍然可能出现幻读(Phantom Read),即同一查询多次执行结果不一致。(同一事务下,事务在执行期间,多次读取同一数据时,能够保证读取到的数据是一致的)
4、Serializable(串行化):是最高的隔离级别,通过确保事务之间的串行执行来避免并发问题。在这个级别下,所有事务按顺序一个一个地执行,避免了脏读、不可重复读和幻读,但牺牲了并发性能。
隔离级别按照可见性排列如下:
读未提交<读已提交<可重复读<串行化
读未提交是最低级别,提供了最小的隔离和最高的并发性能。而Serializable是最高级别,提供严格的隔离,但并发性能差。