我有一個關於mysql的嚴重性能問題。
存儲引擎是myisam。
我在慢日誌中發現這樣的模式:
如果更新命令較慢,則use database_name
將在它前面,並且鎖定時間將很長。在mysql中使用數據庫命令鎖定整個數據庫?
確實使用database_name命令鎖定整個數據庫?將database_name命令刷新緩存,然後在更新命令中有不良影響?
我有一個關於mysql的嚴重性能問題。
存儲引擎是myisam。
我在慢日誌中發現這樣的模式:
如果更新命令較慢,則use database_name
將在它前面,並且鎖定時間將很長。在mysql中使用數據庫命令鎖定整個數據庫?
確實使用database_name命令鎖定整個數據庫?將database_name命令刷新緩存,然後在更新命令中有不良影響?
不,使用數據庫命令沒有很高的成本。
但是,如果使用MyISAM,則UPDATE語句會鎖定整個表。你可能看到多個UPDATE語句相互排隊。
我建議對所有表使用InnoDB。不僅支持行級鎖定(實際上MVCC比行級鎖定更好),而且InnoDB在抵抗數據損壞方面優於MyISAM。
use database
確實不是鎖定數據庫。它只是提供一個默認的數據庫以供將來的查詢參考。
沒有該命令既不鎖定數據庫也不刷新,只是在有多個可供選擇的數據庫時更容易引用一個數據庫。你可能想看看documentation。
如果查詢時間較慢,可能需要查看是否正在對數據庫進行任何密集更新,因爲MyISAM會在更新時鎖定表(而不是像InnoDB那樣的行)。
我怎麼能識別多個更新語句彼此排隊upt。他們是否有相同的設置timestamp = \ d +? – tuesday 2011-12-20 20:47:36
使用'SHOW PROCESSLIST'。您可能會看到一個狀態爲「更新」並且其他狀態爲「已鎖定」的狀態。他們還會顯示每個進程已經運行的秒數,並且可能會按降序排列。 – 2011-12-20 21:03:58