锁的一些概念
我來抄一段書吧,來自《Microsoft SQL Server 2000寶典》
1、鎖爭用
在SQL SERVER中,鎖的相互作用與兼容性對事務完整性和性能都有很重要的影響。一些
鎖模式會排斥一些鎖模式
? ? ? ? ? ? ? ? ? ? ? ? ? 鎖的兼容性
------------------------------------------------------------------------------
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? T2請求
------------------------------------------------------------------------------
T1持有 ? ? ? ? ? |IS鎖 ? | ?S鎖 ?| ? U鎖 ? | ? IX鎖 ?| ? SIX鎖 ? | ? ?X鎖
------------------------------------------------------------------------------
意向共享(IS)鎖 | ?是 ? | ? 是 ?| ? ?是 ? | ? ? 是 ?| ? ? 是 ? ?| ? ? 是
-----------------------------------------------------------------------------
共享(S)鎖 ? ? ?| ?是 ? | ? 是 ?| ? ?是 ? | ? ? 否 ?| ? ? 否 ? ?| ? ? 否
------------------------------------------------------------------------------
更新(U)鎖 ? ? ?| ?是 ? | ? 是 ?| ? ?否 ? | ? ? 否 ?| ? ? 否 ? ?| ? ? 否
------------------------------------------------------------------------------
意向排它(IX)鎖 | ?是 ? | ? 否 ?| ? ?否 ? | ? ? 是 ?| ? ? 否 ? ?| ? ? 否
------------------------------------------------------------------------------
意向排它共享 ? ? | ?是 ? | ? 否 ?| ? ?否 ? | ? ? 否 ?| ? ? 否 ? ?| ? ? 否
(SIX)鎖 ? ? ? ?| ? ? ? | ? ? ? | ? ? ? ? | ? ? ? ? | ? ? ? ? ? |
------------------------------------------------------------------------------
排它(X)鎖 ? ? ?| ?否 ? | ? 否 ?| ? ?否 ? | ? ? 否 ?| ? ? 否 ? ?| ? ? 否
------------------------------------------------------------------------------
2、共享鎖(S)
到目前為止,最常用也最為人們所濫用的鎖就是共享鎖,它是一個簡單的“讀鎖”。事務
得到了共享就好比是在宣稱“我正在查看這個數據”。通常多個事務可以同時查看同一組
數據,當然這最張還是要取決于隔良模式。
3、排它鎖(X)
使用排它鎖意味著事務正在寫數據。顧名思義,對于同一數據,在同一時間只能有一個事
務持有排它鎖,其他事務在排它鎖持續期間不能查看該數據。
4、更新鎖(U)
更新鎖的名字容易引起誤解。它并不是事務執行更新時所使用的鎖——那應該使用排它鎖
。相反,更新鎖意味著事務即將要使用排它鎖,它不前正在掃描數據,以確定要使用排它
鎖鎖定的那些行。可以將更新鎖當作即將轉化為排它鎖的共享鎖。
5、意向鎖
意向鎖是一種用于警示的鎖,它警告其他事務即將要發生一些事情。意向鎖的主要目的是
提高性能。國為所有類型和粒度的鎖都可以使用意向鎖,所以SQL SERVER就具有了各種各
樣的意向鎖。下面是給出了幾個意向鎖的例子:
●意向共享鎖(IS)
●共享意向排它鎖(SIX)
●意向排它鎖(IX)
意向鎖是對共享或排它鎖的一個預先請求,它并沒有實際對數據進行鎖定。通過這種方法
,它解決了兩個性能問題:層次鎖定和永久鎖阻塞。
如果沒有意向鎖,假設事務一持有一行數據的共享鎖,而事務二想對整個表加上排它鎖,
那它必須檢查是否存在已有的表鎖、擴展務區鎖、頁鎖、行鎖和鍵鎖。
而有了意向鎖,SQL SERVER就可以使用意向鎖在更高的數據層次上申明鎖。所以,當事務
一得到了一個行鎖,它就會同時在頁和表上安置意向鎖。
允許獲得鎖的事務在更大的范圍內設置意向鎖的方法把原來由檢查鎖的事務所完成的一部
工作交由建立鎖的事務來完成。這樣,雖然建立鎖的事務需要一次加上三個鎖,但是在今
后其他事務在檢查鎖時就可以少做數百次的搜索工作。
意向鎖還避免了一個嚴重的共享鎖爭用的問題,筆者稱之為永久鎖阻塞。一旦一個事務得
到了共享鎖,其他事務不可以得到排它鎖。試想一下這樣的情形,有某個事務每隔5s加一
個共享鎖,然后持有10s,而此時有另一個事務正在等待加排它鎖,這將會導致什么情況
的出現呢?理論上這個修改事務將會永久的等待下去。但是,一旦一個事務得到了意向排
他鎖(IX),別的進程就不可能再得到共享鎖了。意向排它鎖還不是一個完全的排它鎖,
但它表示即將獲得排它鎖。
6、架構鎖(Sch-M,Sch-S)
架構鎖用于保護數據庫的模式。在任何查詢的執行期間,SQL SERVER 都會用架構穩定鎖
(Sch-S)來防止數據定義語言(DDL)命令修改數據庫結構。
只有在SQL SERVER 調整數據庫的物理模式時才會使用架構修改鎖(Sch-M)。
當SQL SERVER 向一個表中增加一列時,在模式修改操作的整個執行過程中,架構鎖將會
防止所有其他的事務查看或者修改相應的數據。
總結
- 上一篇: opencv获取mat的指针_数字图像处
- 下一篇: Develop Internationa