首页 新闻 会员 周边 捐助

数据库事务隔离级别选择

0
[待解决问题]

Mysql事务隔离级别,我听了很多概念,各种锁的概念,MVCC,undolog,read view等等

那么问题是我知道这些概念,那么我如何选择事务隔离级别呢?

网络上大部分回答都是使用可提交,也就是RC级别,然后诉说了各种好处。

那么我想问可重复读级别有什么用呢?

我们在什么时候应该使用RR呢?

KeBoom的主页 KeBoom | 菜鸟二级 | 园豆:202
提问于:2023-04-06 21:33
< >
分享
所有回答(3)
0
ycyzharry | 园豆:25683 (高人七级) | 2023-04-06 22:47
1

MySQL提供了四种事务隔离级别:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。选择事务隔离级别需要根据实际情况来决定,下面是一些考虑因素:

并发性需求:读未提交级别会造成数据不一致的情况,而串行化级别会完全锁定表,因此通常情况下应该选择读已提交或可重复读级别,以兼顾并发性和数据准确性。

数据的业务特点:有些业务数据可能需要高度一致性,对数据一致性要求高的业务适合使用可重复读或串行化隔离级别。

事务的读写比例:事务的读写比例越大,可重复读级别的优势就越明显,因为可重复读级别可以避免不必要的锁定和读取。

应用的实际情况:不同的应用需要的隔离级别也不同,需要根据实际情况进行选择。

RR(可重复读)隔离级别的主要优点是可以避免幻读,即在一个事务中读取的所有行都保持不变,不受其他事务的干扰,这对于需要对数据进行多次读取和计算的场景非常有用,同时也可以提高数据的一致性。

使用RR隔离级别的场景包括:

需要多次读取同一批数据进行计算的场景,例如统计分析类应用。

对于多表关联查询,如果查询中包含的表中有新增、删除、更新操作,则需要使用RR隔离级别,否则会出现幻读。

需要注意的是,RR隔离级别会引入一些不必要的锁定和读取,可能会影响并发性能,因此需要根据具体情况进行选择。

Technologyforgood | 园豆:7688 (大侠五级) | 2023-04-07 21:49

后面的场景很有用,谢谢!!

支持(0) 反对(0) KeBoom | 园豆:202 (菜鸟二级) | 2023-04-07 22:22
0

题主所学的这些都是事务的实现,undo日志和redo日志本质是事务回滚时底层的机制,和事务隔离级别都没有关系。
事务隔离级别,四个
NONE:没有
READ_COMMITED:在事务开启之前,只读取已提交事务的数据,不读取未提交的事务。
REPEATABLE:可重复读,指一个事务在进行两次查询时得到的结果不一样,因为在这个事务执行期间,其他事务可能删除或者插入了满足条件的查询记录。
Serializable:事务串联化,对某一个表的读事务或写事务,只能依次执行。
底层实现,通常都是读锁和写锁。默认情况下都是只允许一个写锁和多个读锁。而且即使是写锁,也希望是乐观锁,采用CAS技术,最大的提高并发性能。所以Serializable基本不现实,和NONE一样,只存在于理论中。
REPETABLE为什么不使用,是因为有更好的解决办法,例如只允许你查询前一天的数据,不是实时计算,那么这个问题就不会存在了,这样你就能理解为什么许多统计信息,都是T-1的数据,都是前一天的数据,不会计算当天的数据。

蜗牛旅行1899 | 园豆:285 (菜鸟二级) | 2024-05-20 16:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册