MST

星途 面试题库

面试题:MySQL高并发下不同锁类型对性能的影响

在MySQL高并发环境中,行锁、表锁和页锁分别在哪些场景下会被使用?请举例说明每种锁类型对性能产生的不同影响。
48.7万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

行锁

  • 使用场景:常用于对数据一致性要求较高,且并发修改操作集中在少量数据行的场景。例如电商系统中,库存扣减操作。当一个用户购买商品时,只需要锁定该商品对应的库存行数据,这样其他用户对不同商品的库存操作就不会受到影响。
  • 对性能影响:行锁粒度最小,并发度高。在高并发场景下,如果锁争用不严重,能大大提高系统并发处理能力,因为不同事务可以同时操作不同行数据。但如果锁争用激烈,频繁的加锁解锁操作会带来额外开销,如CPU资源消耗和锁等待时间延长,从而降低系统性能。

表锁

  • 使用场景:适用于对表数据的整体操作,比如全表扫描、批量插入等。例如在数据备份时,为了保证备份数据的一致性,可能会对整个表加锁。或者在进行一些DDL操作(如修改表结构)时,需要锁定整个表,防止其他事务对表进行读写操作干扰。
  • 对性能影响:表锁粒度最大,并发度低。在高并发环境下,如果频繁使用表锁,会导致大量事务等待,系统并发性能急剧下降。因为一旦对表加锁,其他事务对该表的任何操作都要等待锁释放,容易形成性能瓶颈。

页锁

  • 使用场景:介于行锁和表锁之间,适用于既有大量数据操作又有一定并发要求的场景。例如在一些日志记录场景中,可能会以页为单位进行数据的插入和更新。假设一个页包含多条日志记录,当对其中部分记录进行修改时,锁定整个页可以避免其他事务对该页数据的干扰,同时又比表锁的粒度小,能一定程度提高并发度。
  • 对性能影响:页锁粒度适中,并发度介于行锁和表锁之间。相较于表锁,页锁可以减少锁争用的范围,提高了并发性能;但相较于行锁,页锁仍可能导致同一页内不同数据行的操作相互等待,在高并发且操作集中在少量行时,性能可能不如行锁。