2021数据库考试题及答案 mysql题目和详细答案( 六 )


与悲观并发控制和乐观并发控制不同的是,MVCC是为了解决读写锁造成的多个、长时间的读操作饿死写操作问题,也就是解决读写冲突的问题 。MVCC 可以与前两者中的任意一种机制结合使用,以提高数据库的读性能 。
数据库的悲观锁基于提升并发性能的考虑,一般都同时实现了多版本并发控制 。不仅是MySQL,包括Oracle、PostgreSQL等其他数据库系统也都实现了MVCC,但各自的实现机制不尽相同,因为MVCC没有一个统一的实现标准 。
总的来说,MVCC的出现就是数据库不满用悲观锁去解决读-写冲突问题,因性能不高而提出的解决方案 。
实现方式MVCC的实现,是通过保存数据在某个时间点的快照来实现的 。每个事务读到的数据项都是一个历史快照,被称为快照读,不同于当前读的是快照读读到的数据可能不是最新的,但是快照隔离能使得在整个事务看到的数据都是它启动时的数据状态 。而写操作不覆盖已有数据项,而是创建一个新的版本,直至所在事务提交时才变为可见 。
当前读和快照读什么是MySQL InnoDB下的当前读和快照读?
当前读像select lock in share mode(共享锁), select for update ; update, insert ,delete(排他锁)这些操作都是一种当前读,为什么叫当前读?就是它读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁 。快照读像不加锁的select操作就是快照读,即不加锁的非阻塞读;快照读的前提是隔离级别不是未提交读和串行化级别,因为未提交读总是读取最新的数据行,而不是符合当前事务版本的数据行 。而串行化则会对所有读取的行都加锁 。优缺点MVCC 使大多数读操作都可以不用加锁,这样设计使得读数据操作很简单,性能很好,并且也能保证只会读取到符合标准的行 。不足之处是每行记录都需要额外的存储空间,需要做更多的行检查工作,以及一些额外的维护工作 。
适用场景解决读-写冲突的无锁并发控制 。与上面两者结合,提升它们的读性能 。可以解决脏读,幻读,不可重复读等事务问题,更新丢失问题除外 。21.sql语句的执行流程!client和server建立连接,client发送sql至server(对应连接器这一过程)server如果在查询缓存中发现了该sql,则直接使用查询缓存的结果返回给client,如果查询缓存中没有,则进入下面的步骤(对应查询缓存这一过程,8.0这一过程已经不存在了,8.0完全抛弃了这个功能)server对sql进行语法分析,识别出sql里面的字符串是否符合标准,比如select关键字不能写错(对应分析器这一过程)server对sql进行语义分析,识别出sql里面的字符串的具体意思是什么,比如T1是表名,C1是列名(对应分析器这一过程 。3、4步其实解析的过程,这个解析的过程是分析器的工作不是优化器的工作)server确定sql的执行路径,比如走索引还是全表,多表连接时哪张表先走哪张表后走,当你的where条件的可读性和效率有冲突时mysql内部还会自动进行优化,也就是大家理解的重写where子句(对应优化器这一过程)server对执行sql的用户进行权限检查,比如对表是否有权限执行(对应执行器这一过程)server执行该sql语句,发送结果给client(对应执行器这一过程)连接器–>查询缓存–>分析器–>优化器–>执行器
如果表 T1 中没有字段 C1,而执行select * from T1 where C1=1会报错不存在C1这个列,这个过程对应上面第4个过程,对应分析器这一过程
如果用户对T1表没有权限,而执行select * from T1 where C1=1会报错对表T1没有权限,这个过程对应上面第6个过程,对应执行器这一过程


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: