面试题答案
一键面试行级锁
- 类型:
- 共享锁(Share Lock,简称S锁):允许多个事务同时读取同一行数据,但阻止其他事务对该行数据获取排他锁。例如,多个事务可以同时查询某一行数据,以实现并发读操作。
- 排他锁(Exclusive Lock,简称X锁):只有获取排他锁的事务可以对该行数据进行读写操作,其他事务无法获取该行的任何锁(共享锁或排他锁)。常用于对数据进行修改操作时,防止其他事务干扰。
- 适用场景:
- 共享锁:适用于读多写少的场景,如多个用户同时查询数据库中的某一行数据。例如在电商系统中,多个用户同时查看某一商品的详情页,都可以获取该行商品信息的共享锁,从而实现并发读取。
- 排他锁:适用于写操作,当需要对某一行数据进行修改(如更新商品库存)时,获取排他锁以保证数据修改的原子性和一致性,避免其他事务同时修改同一行数据导致数据不一致。
- 对并发性能的影响:
- 共享锁:如果读操作频繁,共享锁可以在一定程度上提高并发性能,因为多个事务可以同时持有共享锁进行读操作。但如果写操作也频繁,共享锁会与排他锁产生竞争,可能导致写操作等待,降低系统整体性能。
- 排他锁:排他锁保证了数据修改的一致性,但由于其独占性,在高并发写操作场景下,会导致其他事务长时间等待,降低并发性能。例如在高并发的秒杀场景中,如果使用排他锁更新商品库存,可能会因为锁竞争严重而导致大量请求超时。
表级锁
- 类型:
- 意向锁(Intention Lock):用于表明事务对表中某些行有获取锁的意向。意向锁分为意向共享锁(Intention Share Lock,简称IS锁)和意向排他锁(Intention Exclusive Lock,简称IX锁)。IS锁表示事务打算在表中的某些行获取共享锁,IX锁表示事务打算在表中的某些行获取排他锁。
- 表共享锁(Table Share Lock,简称TS锁):允许其他事务对表进行读操作,但阻止其他事务获取表排他锁。例如,多个事务可以同时对表进行查询操作。
- 表排他锁(Table Exclusive Lock,简称TX锁):阻止其他事务对表进行任何操作(读或写),只有获取表排他锁的事务可以对表进行读写。常用于对表结构进行修改等操作。
- 适用场景:
- 意向锁:主要用于协调行级锁和表级锁,避免死锁。例如,当一个事务要在表的某些行获取排他锁时,首先获取表的IX锁,这样其他事务如果想获取表级锁(如TS锁或TX锁),就可以根据意向锁判断是否有冲突。
- 表共享锁:适用于读多写少的场景,并且读操作涉及到对整个表的扫描,例如对表进行统计分析时,获取表共享锁可以保证在统计过程中表结构不被修改,同时允许其他事务进行读操作。
- 表排他锁:适用于对表结构进行修改(如添加列、删除表等)或对整个表数据进行大规模修改的场景,确保操作过程中表的一致性,防止其他事务干扰。
- 对并发性能的影响:
- 意向锁:意向锁本身对并发性能影响较小,它主要是一种协调机制。合理使用意向锁可以避免死锁,从而间接提高系统的稳定性和并发性能。
- 表共享锁:在读多写少的场景下,表共享锁可以允许并发读操作,提高了并发读性能。但如果写操作频繁,表共享锁会与表排他锁产生竞争,可能导致写操作等待,影响整体性能。
- 表排他锁:由于表排他锁会阻止其他事务对表的任何操作,在持有表排他锁期间,系统并发性能会急剧下降,因为其他事务都要等待锁的释放。所以在使用表排他锁时,应尽量缩短持有锁的时间,减少对并发性能的影响。