2009-11-15 26 views
0

我有一個select查詢,它在具有400多萬條記錄的事務表上執行。每當我執行這個查詢時,我都會觀察到對該特定事務表的所有寫入和更新操作都被暫停,並且我們開始從java端獲取超出鎖等待超時的異常,嘗試重新啓動事務。當前鎖定等待超時設置爲200秒。我無法理解爲什麼select語句可以在表上創建這種鎖並阻止所有插入/更新語句。表存儲引擎是InnoDb,主鍵是自動遞增鍵。 MySQL版本是5.1.40。 另外,我不會在執行select語句之前啓動任何事務。Select語句阻止InnoDB表上的讀/寫操作

任何想法?

+0

您是否嘗試過在查詢的解釋?它說了什麼? – 2009-11-15 20:12:03

+0

是的,我試過解釋。它顯示所有指標都在觸及。 – Anees 2009-11-15 20:20:50

回答

0

所以,是的,您的SELECT在一個事務中讀取鎖定該表的記錄,並且寫入觸及相同記錄的操作必須等到讀取事務完成(如果它遵循兩個階段鎖定)。

This document可能有助於瞭解InnoDB的鎖模型