MST

星途 面试题库

面试题:MySQL中不同类型锁(共享锁、排他锁)对查询并发性能有何影响?

请阐述在MySQL数据库中,共享锁(S锁)和排他锁(X锁)的基本概念,并说明它们分别在查询操作时,是如何影响并发性能的,可举例说明。
27.8万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

共享锁(S锁)

共享锁又称读锁,若事务对数据对象A加S锁,则其他事务只能对A再加S锁,不能加X锁,直到事务释放A上的S锁。这意味着多个事务可以同时读取数据,保证了数据的一致性读取,提高了并发读性能。例如在银行账户余额查询场景,多个查询操作可同时加S锁读取余额,彼此不影响。

排他锁(X锁)

排他锁又称写锁,若事务对数据对象A加X锁,则其他事务不能再对A加任何锁,直到事务释放A上的X锁。这确保了只有持有X锁的事务能修改数据,防止其他事务同时修改造成数据不一致。但在并发场景下,会降低并发性能,因为其他事务需等待X锁释放才能操作。比如银行账户转账操作,转账事务对账户数据加X锁进行余额修改,其他事务不能同时对该账户数据进行读写操作。

对并发性能的影响

  • 共享锁(S锁):在查询操作中,多个事务可同时持有S锁读取数据,有利于并发读操作,提高了并发读性能。但如果读操作时间过长,可能会导致写操作等待,因为写操作需要获取X锁,而获取X锁需等待所有S锁释放。
  • 排他锁(X锁):在查询操作与写操作共存时,若查询操作前获取X锁(这种情况通常不合理,一般写操作才获取X锁,但为了说明影响),则会阻塞其他读、写操作,大大降低并发性能。正常写操作获取X锁时,也会阻塞其他事务的读和写操作,导致并发性能下降。不过它保证了数据修改的原子性和一致性,避免数据冲突。