数据库锁冲突怎么排查
症状是偶发失败,根因往往在一处很小的写法。
先确认是不是锁
偶发的写失败、且错误信息里出现锁相关字样,基本可以判定是锁竞争。这时不要急着加超时,先找是谁长时间占着。
常见的占用来源
事务范围开得太大,中间还夹了网络请求或者耗时操作。事务应当尽量短,把不涉及数据库的操作移到事务外。
连接未释放
查询结束后没有正确关闭游标或连接,会让资源一直被占着。在循环里执行查询时这个问题会被放大。
最后才考虑超时
加长等待时间只是掩盖问题。先修掉长事务和未释放的连接,通常问题就消失了。
症状是偶发失败,根因往往在一处很小的写法。
偶发的写失败、且错误信息里出现锁相关字样,基本可以判定是锁竞争。这时不要急着加超时,先找是谁长时间占着。
事务范围开得太大,中间还夹了网络请求或者耗时操作。事务应当尽量短,把不涉及数据库的操作移到事务外。
查询结束后没有正确关闭游标或连接,会让资源一直被占着。在循环里执行查询时这个问题会被放大。
加长等待时间只是掩盖问题。先修掉长事务和未释放的连接,通常问题就消失了。