后端面经系列-MVCC协议

后端面经系列-MVCC协议

August 21, 2023
后端开发, 数据库
Mysql, 数据库

什么是MVCC?为什么需要MVCC? #

MVCC即多版本并发控制,同一条记录可能存在多个版本,不同的事务可能读取到的是不同版本。 之所以使用MVCC,是为了提高并发读写性能。如果没有MVCC,就需要使用锁来保证并发安全,有一个会话在进行写操作,其它读操作都需要阻塞。而我们现实中的业务,大部分 都是读多写少的,所以使用锁的话会大大降低并发性能。

什么是隔离级别?隔离级别有哪几种? #

首先,事务隔离是数据库中的一个基石,它是事务特性ACID中的I,即各个事务之间应该相互不影响。事务隔离级别是数据库处理事务隔离的方式,不同的隔离 级别是在性能和可靠性、一致性、可重复性之间做出的权衡和调节。 常见的隔离级别有:读未提交、读已提交、可重复读、串行化。

什么是脏读、不可重复度、幻读?它们与隔离级别的关系是怎样的? #

脏读是指读取到了其它事务未提交的记录。 不可重复读是指在同一个事务中,相同的查询语句,读取到的结果不一致。 幻读是指在同一个事务中,相同的查询语句执行多次,后一次执行时读取到了前一次执行没有读取到的记录。 不可重复读与幻读的区别?幻读更侧重于插入。

读未提交,存在脏读、不可重复读、幻读。 读已提交,存在不可重复读、幻读。 可重复读,存在幻读(相对来说)。是在一定程度上解决了幻读的问题。 串行化,不存在脏读、不可重复读、幻读。

隔离级别是不是越高越好? #

不是,隔离级别预告,并发性能越差。要根据实际需要来选择。

你们公司用的什么隔离级别?为什么使用这个隔离级别?能不能使用别的隔离级别? #

RC,读已提交。我司是一家互联网公司,对数据的一致性要求不高,但是对并发性能要求较高,所以使用RC级别。 RC级别相对来说是最适合的级别,读未提交存在脏读,RR和串行化性能较差。

你有没有改过隔离级别?为什么改? #

个人学习有修改过,但在实际工作中没有修改过。隔离级别的修改,会影响到业务,一旦定下,不会轻易修改。