07 | 行锁功过:怎么减少行锁对性能的影响?
2019-06-26 本文已影响0人
carlclone
知识点
1 行锁是引擎层的
2 两阶段锁 , 语句执行的时候加上 , 事务结束的时候释放 , 两阶段也是原子性的一个体现吧
3 把最可能锁冲突的放事务最后面
4 一个影院买票的事务案例 , 语句顺序安排
5 死锁 , 循环资源依赖 , 陷入无线等待
6 死锁策略 : 等到超时 , innodb_lock_wait_timeout 参数 默认 50s
7 死锁检测 , 主动回滚其中一个 , innodb_deadlock_detect on
8 死锁超时时间太短可能误伤 , 可能是普通的锁等待
9 死锁检测消耗大 , 会遍历其他事务判断是否被别人锁住
10 列举了一个极端死锁检测情况
11 可以关掉死锁检测的场景 , 业务上作保证
12 控制并发度 , 减少死锁成本
13 一行逻辑上改为多行 , 减少死锁发生几率
14 一个问题 , 删除表中前 10000 行 , 单语句时间长 , 锁时间长 , 导致主从延迟 第二种 OK , 第三种会发生死锁 , 其他解决方案 , 先拿到 每 500 个 的 第一个ID , 然后可以用多个连接同时执行