我有一個大量的非常類似InnoDB數據庫的數據庫服務器。我運行的查詢通常只是在一個小表中的一行上更新時間戳。這大概需要1-2毫秒。偶爾在晚上,可能在備份和maatkit複製工具正在運行時,這些查詢中的一個或多個可能會在幾分鐘內顯示「正在更新」。在此期間,其他查詢(包括maatkit查詢)似乎正在正常進行,並且沒有其他查詢似乎正在執行。我一直無法解釋或解決這個問題。爲什麼簡單的MySQL更新查詢偶爾需要幾分鐘?
我們使用mysql 4.1.22和gentoo 2.6.21在一對4路至強處理器上安裝16g內存和RAID驅動器進行存儲。使用maatkit每晚確認複製,複製到位並運行良好。 InnoDB正在使用大部分RAM,並且CPU通常閒置70-80%。所討論的表格大約有100行,每行大約200字節。我已經試過,沒有WHERE子句的索引,沒有明顯的變化。沒有發現異常的日誌消息(檢查系統消息和mysql錯誤)。
有沒有人聽說過這個?解決這樣的事情?任何想法如何調查?
那麼過程列表不會顯示「鎖定」嗎?我有一個「顯示完整進程列表」,顯示maatkit在一個數據庫上工作,其中一個平凡的更新查詢在第二個數據庫上「更新」,另一個在第三個數據庫上進行同樣的更新查詢「更新」,以及沒有其他查詢正在運行。我沒有發佈過程列表,因爲它包含了我不得不編輯的客戶端名稱。 – PaulC 2010-02-12 16:08:05
@PaulC:'SHOW PROCESSLIST'不會爲'InnoDB'表顯示'Locked',僅對'MyISAM'顯示。即使針對'InnoDB'表的操作正在等待一個鎖,它仍然會顯示爲'Updating'。 – Quassnoi 2010-02-12 18:14:17
瞭解InnoDB在「鎖定」時會顯示「正在更新」是非常有用的。禁用maatkit的重新同步暫時解決了這個問題,所以看起來maatkit確實會鎖定某些內容。仍在調查...... – PaulC 2010-02-20 21:16:39