首頁 > 資料庫 > mysql教程 > 如何解決 MySQL 的「超過鎖定等待逾時」錯誤?

如何解決 MySQL 的「超過鎖定等待逾時」錯誤?

Susan Sarandon
發布: 2025-01-03 14:42:41
原創
960 人瀏覽過

How to Troubleshoot MySQL's

如何除錯 MySQL 上超過鎖定等待逾時的情況?

當查詢嘗試存取資料庫並遇到鎖定時,可能會導致超過鎖定等待逾時MySQL 錯誤日誌中的錯誤。雖然您可能知道哪個查詢正在嘗試存取資料庫,但無法立即確定哪個查詢在該確切時刻具有鎖定。

找到罪魁禍首的關鍵是錯誤語句中提到的「交易」。這表示該查詢正在嘗試修改一個或多個 InnoDB 表中的至少一行。

既然您已經辨識了該查詢,下一步就是執行 SHOW ENGINE INNODB STATUSG 指令來查看受影響的表。此命令將為您提供有關查詢中涉及的鎖和互斥鎖的詳細資訊。

例如,考慮SHOW ENGINE INNODB STATUSG 指令的以下輸出:

mysql> show engine innodb status\G
...
Per second averages calculated from the last 4 seconds
----------
SEMAPHORES
----------
...
14 lock struct(s), heap size 3024, 8 row lock(s), undo log entries 1
...
---------------
LATEST FOREIGN KEY ERROR
---------------
...
DELETE FROM file WHERE file_id in ('6dbafa39-7f00-0001-51f2-412a450be5cc' )
...
登入後複製

在此輸出中,我們可以看到有8個行鎖,說明正在對檔案表中的8行進行寫入操作。輸出中提供的 DELETE 語句確認正在嘗試刪除操作。

要解決此問題,您可以增加 innodb_lock_wait_timeout 值,該值定義事務在計時之前可以等待鎖定的最長時間出去。此設定的預設值為 50 秒。您可以將此值調整為更高的數字,例如 120 秒,以便為交易提供更多時間來完成。

要永久設定 innodb_lock_wait_timeout 值,請將以下行加入 /etc/my.cnf 檔案:

[mysqld]
innodb_lock_wait_timeout=120
登入後複製

重新啟動 MySQL 以套用變更。或者,您可以使用以下命令暫時修改目前會話的 innodb_lock_wait_timeout 值:

SET GLOBAL innodb_lock_wait_timeout = 120;
登入後複製

這將允許您執行查詢而不會遇到鎖定等待逾時超出錯誤。

以上是如何解決 MySQL 的「超過鎖定等待逾時」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板