鎖公升級(lock escalation)是指將當前鎖的粒度降低。舉例來說,資料庫可以把乙個表的1000個行鎖公升級為乙個頁鎖,或者將頁鎖公升級為表鎖。如果在資料庫的設計中認為鎖是一種稀有資源,而且想避免鎖的開銷,那資料庫中會頻繁出現鎖公升級現象。
microsoft sql server資料庫的設計認為鎖是一種稀有的資源,在適合的時候會自動地將行、鍵或分頁鎖公升級為更粗粒度的表級鎖。這種公升級保護了系統資源,防止系統使用太多的記憶體來維護鎖,在一定程度上提高了效率。
即使在 microsoft sql server2005版本之後, sql server資料庫支援了行鎖,但是其設計和 innodb儲存引擎完全不同,在以下情況下依然可能發生鎖公升級:
在 microsoft sql server資料庫中,由於鎖是一種稀有的資源,因此鎖公升級會帶來一定的效率提高。但是鎖公升級帶來的乙個問題卻是因為鎖粒度的降低而導致併發效能的降低。
innodb儲存引擎不存在鎖公升級的問題。因為其不是根據每個記錄來產生行鎖的,相反,其根據每個事務訪問的每個頁對鎖進行管理的,採用的是點陣圖的方式。因此不管個事務鎖住頁中乙個記錄還是多個記錄,其開銷通常都是一致的。
假設一張表有3000000個資料頁,每個頁大約有100條記錄,那麼總共有300000000條記錄。若有乙個事務執行全表更新的sql語句,則需要對所有記錄加鎖。若根據每行記錄產生鎖物件進行加鎖,並且每個鎖占用10位元組,則僅對鎖管理就需要差不多需要3gb的記憶體。而 innodb儲存引擎根據頁進行加鎖,並採用位圖方式,假設每個頁儲存的鎖資訊占用30個位元組,則鎖物件僅需90mb的記憶體。由此可見兩者對於鎖資源開銷的差距之大。
MySQL 技術內幕 鎖模組
資料庫鎖按照鎖的粒度劃分,可分為表級鎖 行級鎖 頁級鎖 按照鎖級別劃分,可分為共享鎖 排他鎖 按照加鎖方式劃分,可分為自動鎖 顯式鎖 按照操作劃分,可分為dml 鎖 ddl 鎖 按照使用方式劃分,可分為樂觀鎖 悲觀鎖。1 myisam 與 innodb 關於鎖方面的區別是什麼?myisam 預設用的...
MySQL技術內幕
innodb儲存引擎是事物安全的儲存引擎。innodb儲存引擎有多個記憶體塊,這些記憶體塊組成乙個很大的記憶體池,負責如下的工作 後台執行緒 innodb儲存引擎是多執行緒模型,因此他有多個不同的後台執行緒,負責處理不同的任務。記憶體日誌檔案 記錄mysql對某種條件做出響應時的檔案,如錯誤日誌檔案...
MySQL技術內幕(一)
1.mysql是一種可移植的資料庫,可在多種平台下使用,如linux,solaris,freebsd,mac,windows 2.資料庫和資料庫例項的區別 資料庫是指物理上儲存的檔案的集合 資料庫例項是由後台的執行緒 程序和共享記憶體區組成,操縱資料庫檔案。3.mysql區別於其他資料庫的最重要的特...