MySQL鎖(鎖升級)


  鎖升級(Lock Escalation)是指將當前鎖的粒度降低。舉個例子:數據庫可以把一個表的1000個行鎖升級為一個頁鎖,或者將頁鎖升級為表鎖。

  如果在數據庫的設計中認為鎖是一種稀有資源,而且想避免鎖的開銷,那數據庫中會頻繁出現鎖升級現象。

  SQL Server 數據庫的設計認為鎖是一種稀有的資源,在適合的時候會自動地將行、鍵或分頁鎖升級為更粗粒度地表級鎖,這種升級保護了系統資源,防止系統使用太多地內存來維護鎖,在一定程度上提高了效率。

  即使在SQL Server 2005版本后,SQL Server數據庫支持了行鎖,但是其設計和InnoDB存儲引擎完全不同,在以下情況下依然可能發生鎖升級:

    由一句單獨的SQL語句在一個對象上持有的鎖的數量超過了閥值,默認這個閥值為5000。值得注意的是,如果是不同對象,則不會發生鎖升級;

    鎖資源占用的內存超過了激活內存的40%時就會發生鎖升級;

  InnoDB存儲引擎不存在鎖升級的問題。因為其不是根據每個記錄來產生行鎖的,相反,其根據每個事務訪問的每個頁對鎖進行管理,采用的是位圖的方式。因此不管一個事務鎖住頁中一個記錄還是多個記錄,其開銷通常都是一致的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM