面试题答案
一键面试行锁对系统性能的影响分析
- 并发度提升:行锁粒度细,多个事务可以同时操作不同行数据,减少锁冲突,提高并发性能。例如在电商订单系统中,不同用户同时下单不同商品,行锁允许这些操作并行执行。
- 锁开销增加:由于行锁需要对每行数据加锁,锁的管理和维护开销较大。特别是在大量小事务频繁操作时,会导致额外的CPU和内存消耗。
- 死锁风险:当多个事务按照不同顺序获取行锁时,可能会形成死锁。例如事务A获取行1的锁,事务B获取行2的锁,然后事务A尝试获取行2的锁,事务B尝试获取行1的锁,就会造成死锁。
表锁对系统性能的影响分析
- 简单高效:表锁粒度大,加锁和解锁操作相对简单,开销小。适合在数据操作不频繁,但对数据一致性要求较高的场景,如定期的数据清理任务。
- 并发度降低:一旦对表加锁,其他事务对该表的任何操作都需等待锁释放,严重限制并发性能。例如在银行转账场景,如果使用表锁,所有转账操作都只能串行执行。
- 锁等待时间长:由于锁的粒度大,持有锁的时间相对较长,其他事务等待锁的时间也会增加,可能导致系统响应变慢。
不同业务场景下锁类型的选择
- 高并发读多写少场景:选择行锁,因为读操作基本不冲突,写操作也能在不同行并行执行,提高并发度。如新闻资讯网站,大量用户浏览文章(读操作),偶尔有管理员更新文章(写操作)。
- 低并发写多读少场景:可选择表锁,因为操作不频繁,表锁的简单性和低开销优势明显。如企业内部定期的报表生成任务,数据更新不频繁,对一致性要求高。
- 高并发读写混合场景:根据业务特点细分,如果数据关联性不强,尽量使用行锁;若数据关联性强,可能需要结合表锁和行锁,如在库存管理系统中,对库存总量操作可能用表锁保证一致性,对单个商品库存操作可用行锁提高并发。