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