(1)概念:
資料庫是乙個多使用者使用的共享資源。當多個使用者併發地訪問資料時,在資料庫中就會產生多個事務同時訪問同一資料的情況。若對併發操作不加控制就可能會讀取和儲存不正確的資料,破壞資料庫的一致性。
加鎖是實現資料庫併發控制的乙個非常重要的技術。當事務在對某個資料物件進行操作前,先向系統發出請求,對其加鎖。加鎖後事務就對該資料物件有了一定的控制,在該事務釋放鎖之前,其他的事務不能對此資料物件進行更新操作。
(2)鎖的分類:
共享(s)鎖:多個事務可封鎖乙個共享頁;任何事務都不能修改該頁; 通常是該頁被讀取完畢,s鎖立即被釋放。
排它(x)鎖:僅允許乙個事務封鎖此頁;其他任何事務必須等到x鎖被釋放才能對該頁進行訪問;x鎖一直到事務結束才能被釋放。
更新(u)鎖:更新鎖在修改操作的初始化階段用來鎖定可能要被修改的資源,這樣可以避免使用共享鎖造成的死鎖現象。因為使用共享鎖時,修改資料的操作分為兩步,首先獲得乙個共享鎖,讀取資料,然後將共享鎖公升級為排它鎖,然後再執行修改操作。這樣如果同時有兩個或多個事務同時對乙個事務申請了共享鎖,在修改資料的時候,這些事務都要將共享鎖公升級為排它鎖。這時,這些事務都不會釋放共享鎖而是一直等待對方釋放,這樣就造成了死鎖。如果乙個資料在修改前直接申請更新鎖,在資料修改的時候再公升級為排它鎖,就可以避免死鎖。
(3)鎖的粒度:
在sql server2000中鎖是具有粒度的,即可以對不同的資源加鎖。鎖定在較小的粒度的資源(例如行)上可以增加系統的併發量但需要較大的系統開銷,從而也會影響系統的效能,因為鎖定的粒度較小則操作可能產生的鎖的數量會增加;鎖定在較大的粒度(例如表)就併發而言是相當昂貴的,因為鎖定整個表限制了其它事務對錶中任意部分進行訪問,但要求的開銷較低,因為需要維護的鎖較少,所以在這裡是一種互相制約的關係。
在sql server 2000 每個頁 8kb,擴充套件盤區是指8個領接的頁(64kb),sql server 2000 資料庫每兆位元組有 16 個擴充套件盤區。
sql server2000中鎖定的粒度包括 行、頁、擴充套件盤區、表、庫等資源。
關於資料庫的鎖粒度
一種提高共享資源併發性的方式就是讓鎖定物件更具有選擇性。盡量只鎖定需要修改的部分資料,而不是所有資源。更理想的方式是,只對會修改的資料片進行精確鎖定。任何時候,在給定的資源上,鎖定的資料量越少,則系統的併發程度越高,只要互相之間不發生衝突就可以了。問題是加鎖也需要消耗資源。鎖的各種操作,包括獲得鎖,...
資料庫的鎖分類
鎖是網路資料庫中的乙個非常重要的概念,當多個使用者同時對資料庫併發操作時,會帶來資料不一致的問題,所以,鎖主要用於多使用者環境下保證資料庫完整性和一致性 資料庫鎖出現的目的 處理併發問題 併發控制的主要採用的技術手段 樂觀鎖 悲觀鎖和時間戳 鎖分類從資料庫系統角度分為三種 排他鎖 共享鎖 更新鎖。從...
資料庫鎖分類和總結
鎖是網路資料庫中的乙個非常重要的概念,當多個使用者同時對資料庫併發操作時,會帶來資料不一致的問題,所以,鎖主要用於多使用者環境下保證資料庫完整性和一致性。幫助理解 以商場的試衣間為例,每個試衣間都可供多個消費者使用,因此,可能出現多個消費者同時需要使用試衣間試衣服。為了避免衝突,試衣間裝了鎖,某乙個...