mysql 锁超时有什么好的方案吗?

2023-05-15 15:05:19 +08:00
 themostlazyman

mysql5.7 插入、更新数据时报错:Lock wait timeout exceeded; try restarting transaction 。定时同步插入、更新到其它数据库时会上行锁。历史遗留问题主键 ID 为 uuid 。目前看超时时间是默认 50s ,临时改为 100s 了。 想不明白都是上的行锁,为啥插入不进去,不知什么原因变成表锁了。目前考虑增加硬件配置会不会好些,还是要将数据库连接池的最大数量调低。

1530 次点击
所在节点    程序员
9 条回复
fmumu
2023-05-15 15:36:03 +08:00
多线程插入吗? 改单线程排队去插入
Pythoner666666
2023-05-15 15:54:31 +08:00
看下是不是事务太大了,如果是的话拆一下
7911364440
2023-05-15 15:56:02 +08:00
更新数据走索引吗,不走的话就是表锁
encro
2023-05-15 15:59:59 +08:00
需要看具体的场景,

1 ,show full processlist 查看可能锁表的进程;

2 ,是否异常导致事务未提交或者回滚;

3 ,是否修改时需要索引重新排序;
siweipancc
2023-05-15 23:57:00 +08:00
大事务就换成 redis 锁,不然就乐观锁,永远不要锁行,用不好就升级成表锁
themostlazyman
2023-05-16 08:37:46 +08:00
@7911364440 走主键或者唯一索引。
themostlazyman
2023-05-16 08:40:30 +08:00
@encro 确实有修改时索引重排。有两个字段。这样会导致表锁吗?
encro
2023-05-16 09:10:30 +08:00
show full processlist 看下是谁在执行,谁在 wait ,状态是什么,那个卡住了,不一定是你说的语句卡住了,可能是一个 count 或者 order by 让数据库卡住了都不一定。
encro
2023-05-16 09:11:25 +08:00
而且可能往往是事务没有正常释放容易导致卡住,这种情况要远超其他情况。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/940135

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX