面试题答案
一键面试原理
- 锁持有时间:事务越大,意味着事务内包含的操作越多,那么行锁被持有的时间就越长。因为只有事务提交或回滚时,行锁才会被释放。例如,一个事务需要更新1000条记录,在更新这1000条记录的过程中,所涉及的行锁一直处于持有状态。
- 锁争用概率:随着事务增大,它涉及的行数可能增多,与其他事务争用锁的概率也就越高。比如一个小事务只更新一行数据,而大事务可能更新100行数据,大事务与其他事务同时访问这些行数据并请求锁的可能性更大。
具体表现
- 性能下降:由于锁持有时间长,其他事务等待锁的时间也会变长,从而导致整个系统的并发性能下降。例如,在高并发场景下,若有多个事务竞争同一行锁,大事务长时间持有锁,会使其他事务处于等待状态,降低系统吞吐量。
- 死锁风险增加:大事务涉及的锁资源更多,当多个大事务相互等待对方释放锁时,更容易产生死锁。比如事务A持有行X的锁并请求行Y的锁,同时事务B持有行Y的锁并请求行X的锁,若两个事务都是大事务,死锁产生的几率就会上升。
- 资源消耗增大:长时间持有锁会占用数据库服务器的资源,包括内存等,用于维护锁的状态等信息。大事务持有锁期间,这些资源一直被占用,可能影响其他事务的正常运行。