Linux
什麼條件觸發表級鎖
在處理一些 vBulletin 性能問題時,我遇到了這種情況,所有東西都卡在等待表級鎖上:
Id Command Time State Info 83 Query 47 Writing to net SELECT /*!40001 SQL_NO_CACHE */ * FROM `post` 87 Query 117 Waiting for table level lock UPDATE session SET lastactivity = 1362132185, location = '/for 89 Query 116 Waiting for table level lock SELECT * FROM session WHERE userid = 0 AND host = '178.1 90 Query 113 Waiting for table level lock SELECT * FROM session WHERE userid = 0 AND host = '66.24 94 Query 108 Waiting for table level lock select userid from session where sessionhash = '2269de072969ab9d42 96 Query 102 Waiting for table level lock SELECT * FROM session WHERE sessionhash = 'b0e3d290e9f609160 129 Query 15 Waiting for table level lock SELECT * FROM session WHERE userid = 0 AND host = '65.55 130 Query 14 Waiting for table level lock SELECT * FROM session WHERE userid = 0 AND host = '71.19 132 Query 13 Waiting for table level lock SELECT * FROM session WHERE userid = 0 AND host = '178.1
通常診斷鎖定問題的模式是找出未鎖定的查詢,並且通常是你的罪魁禍首。但在這種情況下,它正在讀取一個不相關的表,並且執行時間最長的查詢(這肯定是問題的一部分,因為它是唯一的更新查詢)也被鎖定。
所以問題是,有哪些額外的條件會導致應用表級鎖,這是您可能從這裡看到的情況所期望的。
添加詳細資訊
這是關於標準 mysql 安裝的;不涉及分區或其他惡作劇
表
posts
是 MyISAM 類型表
session
是 MEMORY 類型其他問題(例如查詢 83 明顯的低效率或使用 MyISAM 的不明智)很有趣,但不是所問的問題。
查詢 87 的全文如下所示:
Query UPDATE session SET lastactivity = 1362132185, location = '/forums/forumdisplay.php?f=421', inforum = 421, inthread = 0, incalendar = 0, badlocation = 0 WHERE sessionhash = 'e6322935fe2df18106878473f310d91f'
mysqldump 是否在鎖定時執行?看起來執行緒 83 可能目前正在導出
post
,但可能已呼叫LOCK TABLES
數據庫以在所有表上獲得一致的位置。