mysql中输入没反应_mysql数据库插入无反应问题
情景再現(xiàn):
頁(yè)面點(diǎn)擊插入數(shù)據(jù)操作無(wú)反應(yīng)
問(wèn)題追溯:
查看日志,sql執(zhí)行語(yǔ)句輸出,sql語(yǔ)句無(wú)錯(cuò),報(bào)異常Lock wait timeout exceeded; try restarting transaction
解決問(wèn)題:
直接數(shù)據(jù)庫(kù)執(zhí)行sql語(yǔ)句,長(zhǎng)時(shí)間無(wú)反應(yīng),其他數(shù)據(jù)行插入成功,外鍵索引列為特定值時(shí)插入不成功,判斷該處有鎖未釋放
1:查看當(dāng)前的事務(wù)
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
發(fā)現(xiàn)有一個(gè)事物處于運(yùn)行中狀態(tài),trx_mysql_thread_id 進(jìn)程id為567843
2:查看當(dāng)前鎖定的事務(wù)
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
無(wú)事物被鎖
3:查看當(dāng)前等鎖的事務(wù)
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
無(wú)事物等待鎖
查出死鎖進(jìn)程:SHOW PROCESSLIST
進(jìn)程id為567843的進(jìn)程運(yùn)行時(shí)長(zhǎng)Time50000多秒,一直在運(yùn)行
殺掉進(jìn)程 KILL 567843;
該事物結(jié)束。重新運(yùn)行,成功插入
總結(jié):
程序運(yùn)行到插入數(shù)據(jù)的函數(shù)時(shí),開(kāi)啟了事物,執(zhí)行了sql,本來(lái)應(yīng)該commit事物的,由于未知原因未提交,導(dǎo)致事物因?yàn)橐恢痹诘却峤幻疃枞.?dāng)前事物鎖定了外鍵值一直未釋放,導(dǎo)致后續(xù)該外鍵值得數(shù)據(jù)因?yàn)橐恢钡却i釋放而執(zhí)行超時(shí)。
項(xiàng)目設(shè)置的事物超時(shí)時(shí)間是默認(rèn)的-1.如果執(zhí)行長(zhǎng)時(shí)間dql事物可設(shè)置過(guò)期時(shí)間,超時(shí)會(huì)自動(dòng)回滾
Spring事務(wù)超時(shí) = 事務(wù)開(kāi)始時(shí)到最后一個(gè)Statement創(chuàng)建時(shí)時(shí)間 + 最后一個(gè)Statement的執(zhí)行時(shí)超時(shí)時(shí)間(即其queryTimeout)。
即事物開(kāi)始到sql執(zhí)行結(jié)束的時(shí)間,sql執(zhí)行后即使阻塞也不會(huì)觸發(fā)事物的超時(shí)自動(dòng)回滾
總結(jié)
以上是生活随笔為你收集整理的mysql中输入没反应_mysql数据库插入无反应问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 产品项目团队都有哪些角色概览
- 下一篇: 可使用 git 操作的数据库 dolt