ppstream 2012-1-27 10:46
什麼是 table_locks_waited 和 table_locks_immediate?
一般情況下,MYSQL在更新操作(INSERT、DELETE、UPDATE)會自動加表鎖(table lock)。 不需要顯式加鎖。 除非是數據要求嚴格的邏輯寫順序。 <br><br>執行查詢語句(SELECT)前,會自動給涉及的所有表加讀鎖,在執行更新操作前,會自動給相關的表加寫鎖,這個過程並不需要用戶干預,因此,用戶一般不需要直接用LOCK TABLE命令給MyISAM表顯式加鎖。 <br><br>MyISAM存儲引擎只支持表鎖,這也是MySQL開始幾個版本中唯一支持的鎖類型。 隨著應用對事務完整性和並發性要求的不斷提高,MySQL才開始開發基於事務的存儲引擎,後來慢慢出現了支持 <b>頁鎖</b> 的BDB存儲引擎和支持 <b>行鎖</b> 的InnoDB存儲引擎(實際InnoDB是單獨的一個公司,現在已經被Oracle公司收購)。 但是MyISAM的表鎖依然是使用最為廣泛的鎖類型。 本節將詳細介紹MyISAM表鎖的使用。 <br><br>如果要檢查 table_locks_waited 和 table_locks_immediate 的狀態,可以使用底下指令查看:<br><blockquote>mysql>show status like ‘table%’;<br></blockquote><span style="color: SeaGreen;">如果 table_locks_waited 的值比較高,表示有嚴重的爭鎖情況。</span><br><br>MySQL 表鎖模式MySQL的表鎖有兩種模式:讀鎖(Table Read Lock)和寫鎖(Table Write Lock)。<br><br>對MyISAM表的讀取操作(READ),不會阻塞其他用戶對同一個表的讀取請求,但是會阻塞對同一個表的寫入請求;對MyISAM表的寫入操作(WRITE),則會阻塞其他用戶對同一個表的讀取和寫入操作。<br><br>更詳細的 MySQL表鎖可以參考:<a href="http://xgbjmxn.iteye.com/blog/976124" target="_blank">http://xgbjmxn.iteye.com/blog/976124</a>