mysql5.7 插入、更新数据时报错:Lock wait timeout exceeded; try restarting transaction 。定时同步插入、更新到其它数据库时会上行锁。历史遗留问题主键 ID 为 uuid 。目前看超时时间是默认 50s ,临时改为 100s 了。 想不明白都是上的行锁,为啥插入不进去,不知什么原因变成表锁了。目前考虑增加硬件配置会不会好些,还是要将数据库连接池的最大数量调低。
1 fmumu 2023-05-15 15:36:03 +08:00 多线程插入吗? 改单线程排队去插入 |
![]() | 2 Pythoner666666 2023-05-15 15:54:31 +08:00 看下是不是事务太大了,如果是的话拆一下 |
![]() | 3 7911364440 2023-05-15 15:56:02 +08:00 更新数据走索引吗,不走的话就是表锁 |
![]() | 4 encro 2023-05-15 15:59:59 +08:00 需要看具体的场景, 1 ,show full processlist 查看可能锁表的进程; 2 ,是否异常导致事务未提交或者回滚; 3 ,是否修改时需要索引重新排序; |
![]() | 5 siweipancc 2023-05-15 23:57:00 +08:00 via iPhone 大事务就换成 redis 锁,不然就乐观锁,永远不要锁行,用不好就升级成表锁 |
6 themostlazyman OP @7911364440 走主键或者唯一索引。 |
7 themostlazyman OP @encro 确实有修改时索引重排。有两个字段。这样会导致表锁吗? |
![]() | 8 encro 2023-05-16 09:10:30 +08:00 ![]() show full processlist 看下是谁在执行,谁在 wait ,状态是什么,那个卡住了,不一定是你说的语句卡住了,可能是一个 count 或者 order by 让数据库卡住了都不一定。 |
![]() | 9 encro 2023-05-16 09:11:25 +08:00 而且可能往往是事务没有正常释放容易导致卡住,这种情况要远超其他情况。 |