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 1
show full processlist 看下是谁在执行,谁在 wait ,状态是什么,那个卡住了,不一定是你说的语句卡住了,可能是一个 count 或者 order by 让数据库卡住了都不一定。
|
9
encro 2023-05-16 09:11:25 +08:00
而且可能往往是事务没有正常释放容易导致卡住,这种情况要远超其他情况。
|