面试题答案
一键面试表级锁特点
- 锁粒度大:以整个表为单位进行锁定,在同一时刻,只能有一个事务对表进行写操作(包括插入、更新、删除),读操作可以并发执行。
- 加锁和解锁速度快:因为锁的范围大,所以加锁和解锁操作相对简单、速度快。
- 锁争用概率高:当多个事务需要操作表中的不同数据行时,也会发生锁争用,导致其他事务等待。
行级锁特点
- 锁粒度小:以表中的行数据为单位进行锁定,同一表中的不同行可以被不同事务同时锁定。
- 加锁和解锁速度慢:相比表级锁,行级锁需要更精确地定位到具体行,加锁和解锁操作相对复杂,速度较慢。
- 锁争用概率低:多个事务可以并发操作表中的不同行数据,大大降低了锁争用的可能性,提高了并发性能。
页级锁特点
- 锁粒度介于表级锁和行级锁之间:以数据页(通常为 16KB)为单位进行锁定,一个数据页可能包含多行数据。
- 加锁和解锁速度适中:速度介于表级锁和行级锁之间。
- 锁争用概率适中:相比表级锁,锁争用概率降低;相比行级锁,锁争用概率较高。
选择表级锁的业务场景
- 并发访问低:如果业务系统中对数据库的并发访问量较低,表级锁的加锁和解锁速度快的优势能够体现,不会因为锁争用而导致性能问题。
- 以表为单位的操作多:例如对整个表进行数据备份、数据迁移等操作时,使用表级锁可以避免对每一行进行加锁的开销,提高操作效率。
选择行级锁的业务场景
- 高并发读写:在互联网应用中,如电商系统的订单处理、库存管理等场景,并发读写操作频繁,行级锁可以最大程度地减少锁争用,提高系统的并发处理能力。
- 对数据一致性要求高:在一些金融系统等对数据一致性要求极高的场景下,行级锁可以保证事务对单行数据的操作是原子性的,避免并发操作导致的数据不一致问题。
不同锁粒度对性能的具体影响
- 表级锁:
- 并发性能低:由于锁粒度大,容易发生锁争用,在高并发场景下,大量事务需要等待锁释放,导致系统吞吐量下降,响应时间变长。
- 适合简单操作:对于以表为单位的简单操作(如批量插入、全表查询等),表级锁的加锁开销小,能够提高操作效率。
- 行级锁:
- 并发性能高:锁粒度小,锁争用概率低,在高并发场景下,能够支持更多的并发事务,提高系统的吞吐量和响应速度。
- 复杂操作开销大:对于涉及大量行的复杂操作(如全表扫描更新),行级锁的加锁和解锁开销大,可能会导致性能下降。同时,由于行级锁可能产生大量的锁资源,也会增加数据库的内存开销。
- 页级锁:
- 并发性能适中:在并发性能上介于表级锁和行级锁之间,对于一些并发度不是特别高,但又希望减少锁争用的场景比较适用。
- 开销适中:加锁和解锁开销、锁争用开销等都介于表级锁和行级锁之间。