面试题答案
一键面试共享锁(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锁时,也会阻塞其他事务的读和写操作,导致并发性能下降。不过它保证了数据修改的原子性和一致性,避免数据冲突。