




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)庫原理與應(yīng)用教程―SQL
Server第12章事務(wù)與并發(fā)控制第12章
事務(wù)與并發(fā)控制?數(shù)據(jù)庫的安全性就是要保證數(shù)據(jù)庫中數(shù)據(jù)的安全,防止
未授權(quán)用戶隨意修改數(shù)據(jù)庫中的數(shù)據(jù),確保數(shù)據(jù)的安全。在大多數(shù)數(shù)據(jù)庫管理系統(tǒng)中,主要是通過許可來保證數(shù)
據(jù)庫的安全性。?監(jiān)測性:對任何系統(tǒng)都可以這樣說,沒有監(jiān)測,就沒有優(yōu)化。這句話用在數(shù)據(jù)庫管理系統(tǒng)方面,也是切合實(shí)際的。只有通過對數(shù)據(jù)庫進(jìn)行全面的性能監(jiān)測,也才能發(fā)現(xiàn)影響系統(tǒng)性能的因素和瓶頸,才能針對瓶頸因素,采取切合實(shí)際策略,解決問題,提高系統(tǒng)的性能。第12章事務(wù)與并發(fā)控制?
并發(fā)控制機(jī)制的好壞是衡量一個(gè)數(shù)據(jù)庫管理系統(tǒng)性能的重要標(biāo)志之一。?
SQL
Server
以事務(wù)為單位通常使用鎖來實(shí)現(xiàn)并發(fā)控制。當(dāng)用戶對數(shù)據(jù)庫并發(fā)訪問時(shí),為了確保事務(wù)完整性和數(shù)據(jù)庫一致性,需要使用鎖定。這樣,就可以保證任何時(shí)候都可以有多個(gè)正在運(yùn)行的用戶程序,但是所有用戶程序都在彼此完全隔離的環(huán)境中運(yùn)行。第12章
事務(wù)與并發(fā)控制?12.1事務(wù)概述?利用事務(wù)可以解決上面的問題,即把這些操作放在一個(gè)容器里,強(qiáng)制用戶執(zhí)行完所有的操作或者不執(zhí)行任何一條語句。事務(wù)就是作為單個(gè)邏輯工作單元執(zhí)行的一系列操作,這一系列的操作或者都被執(zhí)行或者都不被執(zhí)行。?在SQL
Server
2005中,事務(wù)要求處理時(shí)必須滿足四個(gè)原則,即原子性、一致性、隔離性和持久性。第12章
事務(wù)與并發(fā)控制?12.1事務(wù)概述?(1)原子性:事務(wù)必須是原子工作單元,對于其數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行。這一性質(zhì)即使在系統(tǒng)崩潰之后仍能得到保證,在系統(tǒng)崩潰之后將進(jìn)行數(shù)據(jù)庫恢復(fù),用來恢復(fù)和撤銷系統(tǒng)崩潰處于活動狀態(tài)的事務(wù)對數(shù)據(jù)庫的影響,從而保證事務(wù)的原子性。系統(tǒng)對磁盤上的任何實(shí)際數(shù)據(jù)的修改之前都會將修改操作信息本身的信息記錄到磁盤上。當(dāng)發(fā)生崩潰時(shí),系統(tǒng)能根據(jù)這些操作記錄當(dāng)時(shí)該事務(wù)處于何種狀態(tài),以此確定是撤銷該事務(wù)所做出的所有修改操作,還是將修改的操作重新執(zhí)行。第12章
事務(wù)與并發(fā)控制?12.1事務(wù)概述?(3)隔離性:也稱為獨(dú)立性,是指并行事務(wù)的修改必須與其他并行事務(wù)的修改相互獨(dú)立。隔離性意味著一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾。即一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對并發(fā)的其他事務(wù)是隔離的,并發(fā)執(zhí)行的各個(gè)事務(wù)之間不能互相干擾。它要求即使有多個(gè)事務(wù)并發(fā)執(zhí)行,看上去每個(gè)成功事務(wù)按串行調(diào)度執(zhí)行一樣。第12章
事務(wù)與并發(fā)控制?12.1事務(wù)概述?(4)持久性:在事務(wù)完成提交之后,就對系統(tǒng)產(chǎn)生持久的影響,即事務(wù)的操作將寫入數(shù)據(jù)庫中,無論發(fā)生何種機(jī)器和系統(tǒng)故障都不應(yīng)該對其有任何影響。例如,自動柜員機(jī)(
ATM
)在向客戶支付一筆錢時(shí),就不用擔(dān)心丟失客戶的取款記錄。事務(wù)的持久性保證事務(wù)對數(shù)據(jù)庫的影響是持久的,即使系統(tǒng)崩潰。第12章
事務(wù)與并發(fā)控制?12.2.1根據(jù)系統(tǒng)的設(shè)置分類?1.系統(tǒng)事務(wù)?系統(tǒng)提供的事務(wù)是指在執(zhí)行某些語句時(shí),一條語句就是一個(gè)事務(wù)。但是要明確,一條語句的對象既可能是表中的一行數(shù)據(jù),也可能是表中的多行數(shù)據(jù),甚至是表中的全部數(shù)據(jù)。因此,只有一條語句構(gòu)成的事務(wù)也可能包含了多行數(shù)據(jù)的處理。?
系統(tǒng)提供的事務(wù)語句如下:ALTER
TABLE
、CREATE
、DELETE
、DROP
、FETCH
、GRANT
、INSERT、????????
OPEN
、?
REBOKE
、?
SELECT
、?
UPDATE
、?
TRUNCATE
TABLE
,?
這些語句本身就構(gòu)成了一個(gè)事務(wù)。第12章
事務(wù)與并發(fā)控制?12.2.1根據(jù)系統(tǒng)的設(shè)置分類?1.系統(tǒng)事務(wù)?[例12-1]使用CREATE
TABLE創(chuàng)建一個(gè)表。Name
CHAR(6),Sex
CHAR(2)?
CREATE
TABLE
student?
(
Id
CHAR(10),???
)?這條語句本身就構(gòu)成了一個(gè)事務(wù)。?這條語句由于沒有使用條件限制,那么這條語句就是創(chuàng)建包含3個(gè)列的表。要么創(chuàng)建全部成功,要么全部失敗。第12章
事務(wù)與并發(fā)控制?12.2.1根據(jù)系統(tǒng)的設(shè)置分類?2.用戶定義事務(wù)?在實(shí)際應(yīng)用中,大多數(shù)的事務(wù)處理采用了用戶定義的事務(wù)來處理。在開發(fā)應(yīng)用程序時(shí),可以使用BEGINTRANSACTION
語句來定義明確的用戶定義的事務(wù)。在使用用戶定義的事務(wù)時(shí),一定要注意事務(wù)必須有明確的結(jié)束語句來結(jié)束。如果不使用明確的結(jié)束語句來結(jié)束,那么系統(tǒng)可能把從事務(wù)開始到用戶關(guān)閉連接之間的全部操作都作為一個(gè)事務(wù)來對待。事務(wù)的明確結(jié)束可以使用兩個(gè)語句中的一個(gè):COMMIT
語句和ROLLBACK
語句。COMMIT
語句是提交語句,將全部完成的語句明確地提交到數(shù)據(jù)庫中。ROLLBACK
語句是取消語句,該語句將事務(wù)的操作全部取消,即表示事務(wù)操作失敗。第12章
事務(wù)與并發(fā)控制?12.2.2根據(jù)運(yùn)行模式分類?
根據(jù)運(yùn)行模式的不同,
SQL
Server
2005
將事務(wù)分為4
種類型:顯示事務(wù)、隱式事務(wù)、自動提交事務(wù)和批處理級事務(wù)。?1.自動提交事務(wù)?自動提交事務(wù)是指每條單獨(dú)的T-SQL語句都是一個(gè)事務(wù)。如果沒有通過任何T-SQL語句設(shè)置事務(wù),一條T-SQL語句就是一個(gè)事務(wù),語句執(zhí)行完事務(wù)就結(jié)束。以前我們使用的每一條T-SQL語句都可以叫做一個(gè)自動提交事務(wù)。第12章
事務(wù)與并發(fā)控制?12.2.2根據(jù)運(yùn)行模式分類?2.顯式事務(wù)?
顯式事務(wù)指每個(gè)事務(wù)均以BEGIN
TRANSACTION
語句、COMMIT
TRANSACTION
或ROLLBACK
TRANSACTION語句明確地定義了什么時(shí)候啟動事務(wù)、什么時(shí)候結(jié)束事務(wù)的事務(wù)。?3.隱式事務(wù)?隱式事務(wù)指在前一個(gè)事務(wù)完成時(shí)新事務(wù)隱式啟動,但每個(gè)事務(wù)仍以COMMIT
TRANSACTION
或ROLLBACKTRANSACTION
語句顯式結(jié)束。?4.批處理級事務(wù)?批處理級事務(wù)是SQL
Server
2005的新增功能,該事務(wù)只能應(yīng)用于多個(gè)活動結(jié)果集(MARS
),在MARS會話中啟動的T-SQL顯式或隱式事務(wù)變?yōu)榕幚砑壥聞?wù)。第12章
事務(wù)與并發(fā)控制?12.3事務(wù)處理語句語句?
1.BEGIN
TRANSACTION?
BEGIN
TRANSACTION語句定義一個(gè)顯式本地事務(wù)的起始點(diǎn),即事務(wù)的開始。其語法格式為:?
BEGIN
{
TRAN
|
TRANSACTION
}?
[
transaction
name
|
@tran
name
va?
[WITH
MARK
[‘description"]]?其中:?
(1)TRANSACTION
關(guān)鍵字可以縮寫為TRAN
。?(2)transaction
name是給事務(wù)分配的名稱,事務(wù)可以定義名稱,也可以不定義名稱,但是只能使用符合標(biāo)識符規(guī)則的名字。?(3)@tran_name_variable是含有效事務(wù)名稱的變量的名稱,必須用數(shù)據(jù)類型聲明這個(gè)變量。?(4)WITH
MARK
用于指定在日志中標(biāo)記事務(wù),description是描述該標(biāo)記的字符串。第12章
事務(wù)與并發(fā)控制?12.3事務(wù)處理語句?
2.
COMMIT
TRANSACTION?
COMMIT
TRANSACTION語句語句為提交一個(gè)事務(wù),標(biāo)志一個(gè)成功的隱式事務(wù)或顯式事務(wù)的結(jié)束。其語法格式為:?
COMMIT
[{
TRAN
|
TRANSACTION
}?
[
transaction
name
|
@tran
name
va?
對于COMMIT
TRANSACTION
語句需要注意以下幾點(diǎn):?
(1)因?yàn)閿?shù)據(jù)已經(jīng)永久修改,所以在COMMITTRANSACTION
語句后不能回滾事務(wù)。?
(2)在嵌套事務(wù)中使用COMMIT
TRANSACTION
時(shí),內(nèi)部事務(wù)的提交并不釋放資源,也沒有執(zhí)行永久修改,只有在提交了外部事務(wù)時(shí),數(shù)據(jù)修改才具有永久性而且資源才會被釋放。第12章
事務(wù)與并發(fā)控制?12.3事務(wù)處理語句??3.
ROLLBACK
TRANSACTIONROLLBACK
TRANSACTION語句語句將顯式事務(wù)或隱式事務(wù)回滾到事務(wù)的起點(diǎn)或事務(wù)內(nèi)的某個(gè)保存點(diǎn),它也標(biāo)志一個(gè)事務(wù)的結(jié)束。其語法格式為:?
ROLLBACK
[
{
TRAN
|
TRANSACTION
}?
[
transaction
name
|
@tran
name
va?
|
savepoint_name
|
@savepoint_variable
]
]?
對于ROLLBACK
TRANSACTION
語句需要注意以下幾點(diǎn):?(1)如果不指定回滾的事務(wù)名稱或保存點(diǎn),則ROLLBACKTRANSACTION
命令會將事務(wù)回滾到事務(wù)的起點(diǎn)。?
(2)在嵌套事務(wù)時(shí),該語句將所有內(nèi)層事務(wù)回滾到最遠(yuǎn)的BEGIN
TRANSACTION 語句,transaction_name 也只能語句的名稱。語句后不能回滾事務(wù)。是來自最遠(yuǎn)的BEGIN
TRANSACTION?(3)在執(zhí)行COMMIT
TRANSACTION?(4)如果在觸發(fā)器中發(fā)出ROLLBACK
TRANSACITON 命令,將回滾對當(dāng)前事務(wù)中所做的所有數(shù)據(jù)修改,包括觸發(fā)器所做的修改。?(5)事務(wù)在執(zhí)行過程中出現(xiàn)任何錯(cuò)誤,SQL
Server都將自動回滾事務(wù)。第12章
事務(wù)與并發(fā)控制?12.3事務(wù)處理語句語句語句用于在事務(wù)內(nèi)設(shè)置保存點(diǎn)。?
4.
SAVE
TRANSACTION?
SAVE
TRANSACTION其語法格式為:?
SAVE
{
TRAN
|
TRANSACTION
}?
{
savepoint_name
|
@savepoint_variable
}?在事務(wù)內(nèi)的某個(gè)位置建立一個(gè)保存點(diǎn),使用戶可以將事務(wù)回滾到該保存點(diǎn)的狀態(tài),而不回滾整個(gè)事務(wù)。第12章
事務(wù)與并發(fā)控制[?12.3事務(wù)處理語句?
例12-3]定義一個(gè)事務(wù),向教學(xué)庫的學(xué)生表中插入一行USE
教學(xué)庫INSERT
INTO
學(xué)生(學(xué)生號,姓名,性別,專業(yè))VALUES("0501001","朱一虹",女"",計(jì)"算機(jī)")SAVE
TRAN
savepointDELETE
FROM
學(xué)生WHERE
姓名="朱一虹"數(shù)據(jù),然后再刪除該行。執(zhí)行后,新插入的數(shù)據(jù)行并沒有被刪除。?
BEGIN
TRANSACTION????????ROLLBACK
TRAN
savepointCOMMIT第12章
事務(wù)與并發(fā)控制?12.4事務(wù)的并發(fā)控制?并發(fā)控制指的是當(dāng)多個(gè)用戶同時(shí)更新行時(shí),用于保護(hù)數(shù)據(jù)庫完整性的各種技術(shù),目的是保證一個(gè)用戶的工作不會對另一個(gè)用戶的工作產(chǎn)生不合理的影響。?鎖是實(shí)現(xiàn)并發(fā)控制的主要方法,是多個(gè)用戶能夠同時(shí)操
縱同一個(gè)數(shù)據(jù)庫中的數(shù)據(jù)而不發(fā)生數(shù)據(jù)不一致現(xiàn)象的重
要保障。如果沒有鎖定且多個(gè)用戶同時(shí)訪問一個(gè)數(shù)據(jù)庫,則當(dāng)他們的事務(wù)同時(shí)使用相同的數(shù)據(jù)時(shí)就可能會發(fā)生問
題,這些問題包括以下幾種情況:第12章
事務(wù)與并發(fā)控制?12.4.1并發(fā)帶來的問題?
(1)丟失修改:指在一個(gè)事務(wù)讀取一個(gè)數(shù)據(jù)時(shí),另外一個(gè)事務(wù)也訪問該同一數(shù)據(jù)。那么,在第一個(gè)事務(wù)中修改了這個(gè)數(shù)據(jù)后,第二個(gè)事務(wù)也修改了這個(gè)數(shù)據(jù)。這樣第一個(gè)事務(wù)內(nèi)的修改結(jié)果就被丟失,因此稱為丟失修改。?例如:事務(wù)T1讀取某表中數(shù)據(jù)A=20,事務(wù)T2也讀取
A=20,事務(wù)T1修改A=A-1,事務(wù)T2也修改A=A-1;最終結(jié)果A=19,事務(wù)T1的修改被丟失。第12章
事務(wù)與并發(fā)控制?12.4.1并發(fā)帶來的問題?
(3)不可重復(fù)讀:指在一個(gè)事務(wù)內(nèi),多次讀同一數(shù)據(jù)。在這個(gè)事務(wù)還沒有結(jié)束時(shí),另外一個(gè)事務(wù)也訪問該同一數(shù)據(jù)。那么,在第一個(gè)事務(wù)中的兩次讀數(shù)據(jù)之間,由于第二個(gè)事務(wù)的修改,那么第一個(gè)事務(wù)兩次讀到的數(shù)據(jù)可能是不一樣的。這樣就發(fā)生了在一個(gè)事務(wù)內(nèi)兩次讀到的數(shù)據(jù)是不一樣的,因此稱為是不可重復(fù)讀。?例如:事務(wù)T1讀取某表中數(shù)據(jù)A=20,并修改A=A-1,寫回?cái)?shù)據(jù)庫,事務(wù)T2讀取A=19,事務(wù)T1回滾了前面的操作,事務(wù)T2也修改A=A-1;最終結(jié)果A=18,事務(wù)T2讀取的就是“臟數(shù)據(jù)”。第12章
事務(wù)與并發(fā)控制?12.4.1并發(fā)帶來的問題?
(4)幻讀:與不可重復(fù)讀相似,是指當(dāng)事務(wù)不是獨(dú)立執(zhí)行時(shí)發(fā)生的一種現(xiàn)象。例如,第一個(gè)事務(wù)對一個(gè)表中的數(shù)據(jù)進(jìn)行了修改,這種修改涉及到表中的全部數(shù)據(jù)行。同時(shí),第二個(gè)事務(wù)也修改這個(gè)表中的數(shù)據(jù),這種修改是向表中插入一行新數(shù)據(jù)。那么,以后就會發(fā)生操作第一個(gè)事務(wù)的用戶發(fā)現(xiàn)表中還有沒有修改的數(shù)據(jù)行,就好像發(fā)生了幻覺一樣。當(dāng)對某條記錄執(zhí)行插入或刪除操作而該記錄屬于某個(gè)事務(wù)正在讀取的行的范圍時(shí),會發(fā)生幻讀問題。?(3)簇和簇級鎖?頁之上的空間管理單位是簇,一個(gè)簇有8個(gè)連續(xù)的頁。?簇級鎖指事務(wù)占用一個(gè)簇,這個(gè)簇不能被其他事務(wù)占用。簇級鎖是一種特殊類型的鎖,只用在一些特殊的情況下。例如在創(chuàng)建數(shù)據(jù)庫和表時(shí),系統(tǒng)用簇級鎖分配物理空間。由于系統(tǒng)是按照簇分配空間的,系統(tǒng)分配空間時(shí)使用簇級鎖,可防止其他事務(wù)同時(shí)使用一個(gè)簇。?(4)表級鎖?表級鎖是一種主要的鎖。表級鎖是指事務(wù)在操縱某一個(gè)表的數(shù)據(jù)時(shí)鎖定了這些數(shù)據(jù)所在的整個(gè)表,其他事務(wù)不能訪問該表中的數(shù)據(jù)。當(dāng)事務(wù)處理的數(shù)量比較大時(shí),一般使用表級鎖。?(5)數(shù)據(jù)庫級鎖?數(shù)據(jù)庫級鎖是指鎖定整個(gè)數(shù)據(jù)庫,防止其他任何用戶或者事務(wù)對鎖定的數(shù)據(jù)庫進(jìn)行訪問。?這種鎖的等級最高,因?yàn)樗刂普麄€(gè)數(shù)據(jù)庫的操作。數(shù)據(jù)庫級鎖是一種非常特殊的鎖,它只用于數(shù)據(jù)庫的恢復(fù)操作。只要對數(shù)據(jù)庫進(jìn)行恢復(fù)操作,就需要將數(shù)據(jù)庫設(shè)置為單用戶模式,防止其他用戶對該數(shù)據(jù)庫進(jìn)行各種操作。行頁簇表數(shù)據(jù)庫第12章
事務(wù)與并發(fā)控制?12.4.3鎖的類型?數(shù)據(jù)庫引擎使用不同類型的鎖鎖定資源,這些鎖確定了并發(fā)事務(wù)訪問資源的方式。?SQL
Server
2005
中常見的鎖有以下幾種:?(1)共享鎖(Shared
Lock
)?共享(S)鎖允許并發(fā)事務(wù)讀取(SELECT
)一個(gè)資源。資源上存在共享(S)鎖時(shí),任何其它事務(wù)都不能修改數(shù)據(jù)。一旦已經(jīng)讀取數(shù)據(jù),便立即釋放資源上的共享(S)鎖,除非將事務(wù)隔離級別設(shè)置為可重復(fù)讀或更高級別,或者在事務(wù)生存周期內(nèi)用鎖定提示保留共享(S)鎖。第12章
事務(wù)與并發(fā)控制?12.4.3鎖的類型?(3)更新鎖(Update
Lock
)?更新(U)鎖可以防止通常形式的死鎖。一般更新模式由一個(gè)事務(wù)組成,此事務(wù)讀取記錄,獲取資源(頁或行)的共享鎖,然后修改行,此操作要求鎖轉(zhuǎn)換為排它鎖。?
如果兩個(gè)事務(wù)獲得了資源上的共享鎖,然后試圖同時(shí)更新數(shù)據(jù),則一個(gè)
事務(wù)嘗試將鎖轉(zhuǎn)換為排它鎖。共享鎖到排它鎖的轉(zhuǎn)換必須等待一段時(shí)間,因?yàn)橐粋€(gè)事務(wù)的排它鎖與其它事務(wù)的共享鎖不兼容,此時(shí)發(fā)生鎖等待,
而第二個(gè)事務(wù)也試圖獲取排它鎖以進(jìn)行更新;由于兩個(gè)事務(wù)都要轉(zhuǎn)換為
排它鎖,并且每個(gè)事務(wù)都等待另一個(gè)事務(wù)釋放共享模式鎖,因此發(fā)生死
鎖。?
更新鎖就是為了防止這種死鎖而設(shè)立的。當(dāng)SQL
Server準(zhǔn)備更新數(shù)據(jù)時(shí),它首先對數(shù)據(jù)、對象作更新鎖,鎖定這樣數(shù)據(jù)將不能被修改,但可以讀取,等到SQL
Server確定要進(jìn)行更新數(shù)據(jù)操作時(shí),它會自動將更新鎖換為排它鎖,但當(dāng)對象上有其它鎖存在時(shí)無法對其作更新鎖鎖定。第12章
事務(wù)與并發(fā)控制?12.4.3鎖的類型?(4)意向鎖(Intent
Lock)?意向鎖建立一個(gè)鎖機(jī)制的分層結(jié)構(gòu)。如果對一個(gè)資源加意向鎖,則說明該資源的下層資源正在被加鎖(S鎖或X鎖);對任一資源加鎖時(shí),必須先對它的上層資源加意向鎖。?系統(tǒng)使用意向鎖來最小化鎖之間的沖突。這種結(jié)構(gòu)依據(jù)鎖定的資源范圍從低到高依次是行級鎖層、頁級鎖層和表級鎖層。第12章
事務(wù)與并發(fā)控制?意向鎖表示SQL
Server
需要在層次結(jié)構(gòu)中的某些底層資源上獲取共享(S)鎖或排它(X)鎖。例如,放置在表級的共享意向鎖表示事務(wù)打算在表中的頁或行上放置共享(S)鎖。在表級設(shè)置意向鎖可防止另一個(gè)事務(wù)隨后在包含那一頁的表上獲取排它(X)鎖。意向鎖可以提高性能,因?yàn)镾QL
Server
僅在表級檢查意向鎖來確定事務(wù)是否可以安全地獲取該表上的鎖。而無須檢查表中的每行或每頁上的鎖以確定事務(wù)是否可以鎖定整個(gè)表。?常用的意向鎖有三種類型:意向共享鎖,簡記為IS鎖;意向排它鎖,簡記為IX鎖;共享意向排它鎖,簡記為SIX鎖。第12章
事務(wù)與并發(fā)控制?①意向共享鎖(IS鎖):意向共享鎖表示讀低層次資源的
事務(wù)的意向,把共享鎖放在這些單個(gè)的資源上。也就是說,如果對一個(gè)數(shù)據(jù)對象加IS鎖,表示它的下層資源擬(意向)加S鎖。例如,要對某個(gè)元組加S鎖,則要首先對表加IS鎖。?②意向排它鎖(IX鎖):意向排它鎖表示修改低層次的事務(wù)的意向,把排它鎖放在這些單個(gè)資源上。也就是說,如果對一個(gè)數(shù)據(jù)對象加IX鎖,表示它的下層資源擬(意向)加X鎖。例如,要對某個(gè)元組加X鎖,則要首先對他上層的表加IX鎖。第12章
事務(wù)與并發(fā)控制?12.4.3鎖的類型?③共享意向排它鎖(SIX鎖):共享意向排它鎖是共享鎖
和意向排它鎖的組合。使用共享意向排它鎖表示允許并行
讀取頂層資源的事務(wù)的意向,并且修改一些低層次的資源,把意向排它鎖放在這些單個(gè)資源上。也就是說,如果對一
個(gè)數(shù)據(jù)對象加SIX鎖,表示對它加S鎖,再加IX鎖,即SIX=S+IX。例如對某個(gè)表加SIX鎖,則表示該事務(wù)要讀整個(gè)表(所以要對該表加S鎖),同時(shí)會更新個(gè)別元組(所以要對該表加IX鎖)。第12章
事務(wù)與并發(fā)控制?12.4.3鎖的類型?(6)大容量更新鎖(Bulk
Update
Lock)?
當(dāng)將數(shù)據(jù)大容量復(fù)制到表,且指定了TABLOCK
提示或者使用
sp_tableoption
設(shè)置了
table_lock_on_bulk
表選項(xiàng)時(shí),將使用大容量更新鎖。大容量更新鎖允許進(jìn)程將數(shù)據(jù)并發(fā)地大容量復(fù)制到同一表,同時(shí)防止其它不進(jìn)行大容量復(fù)制數(shù)據(jù)的進(jìn)程訪問該表。第12章
事務(wù)與并發(fā)控制?資源鎖模式有一個(gè)兼容性矩陣,顯示了與在同一資源上可獲取的其它鎖相兼容的鎖。見表。鎖A鎖BISSIXSIXUXIS是是是是是否S是是否否是否IX是否是否否否SIX是否否否否否U是是否否否否X否否否否否否第12章
事務(wù)與并發(fā)控制?關(guān)于鎖的兼容性的一些說明:?(1)意向排它(IX)鎖與意向排它(IX)鎖模式兼容,因?yàn)镮X鎖表示打算更新一些行而不是所有行,還允許其它事務(wù)讀取或更新部分行,只要這些行不是其它事務(wù)當(dāng)前所更新的行即可。?(2)架構(gòu)穩(wěn)定性(Sch-S)鎖與除了架構(gòu)修改(Sch-M)鎖模式之外的所有鎖模式相兼容。?(3)架構(gòu)修改(Sch-M)鎖與所有鎖模式都不兼容。?(4)大容量更新(BU)鎖只與架構(gòu)穩(wěn)定性(Sch-S)鎖及其它大容量更新(BU)鎖相兼容。第12章
事務(wù)與并發(fā)控制?12.4.4鎖的信息?2.查看鎖的信息?
Exec
sp_lock第12章
事務(wù)與并發(fā)控制?12.4.5死鎖的產(chǎn)生及解決辦法?封鎖機(jī)制的引入能解決并發(fā)用戶的數(shù)據(jù)不一致性問題,但也會引起事務(wù)間的死鎖問題。在事務(wù)和鎖的使用過程中,死鎖是一個(gè)不可避免的現(xiàn)象。在數(shù)據(jù)庫系統(tǒng)中,死鎖是指多個(gè)用戶分別鎖定了一個(gè)資源,并又試圖請求鎖定對方已經(jīng)鎖定的資源,這就產(chǎn)生了一個(gè)鎖定請求環(huán),導(dǎo)致多個(gè)用戶都處于等待對方釋放所鎖定資源的狀態(tài)。通常,根據(jù)使用不同的鎖類型鎖定資源,然而當(dāng)某組資源的兩個(gè)或多個(gè)事務(wù)之間有循環(huán)相關(guān)性時(shí),就會發(fā)生死鎖現(xiàn)象。第12章
事務(wù)與并發(fā)控制?12.4.5死鎖的產(chǎn)生及解決辦法?
在數(shù)據(jù)庫中如何避免死鎖?1使用事務(wù)時(shí),盡量縮短事務(wù)的邏輯處理過程,及早提交或回滾事務(wù);?2設(shè)置死鎖超時(shí)參數(shù)為合理范圍,如:3分鐘-10分種;超過時(shí)間,自動放棄本次操作,避免進(jìn)程懸掛;?3優(yōu)化程序,檢查并避免死鎖現(xiàn)象出現(xiàn);?4.對所有的腳本和SP都要仔細(xì)測試。?5所有的SP都要有錯(cuò)誤處理(通過@error
)?
6
一般不要修改SQL Server事務(wù)的默認(rèn)級別。不推薦強(qiáng)行加鎖。第12章
事務(wù)與并發(fā)控制?12.4.6手工加鎖?SQL
Server系統(tǒng)中建議讓系統(tǒng)自動管理鎖,該系統(tǒng)會分析用戶的SQL語句要求,自動為該請求加上合適的鎖,而且在鎖的數(shù)目太多時(shí),系統(tǒng)會自動進(jìn)行鎖升級。如前所述,升級的門限由系統(tǒng)自動配置,并不需要用戶配置。?在實(shí)際應(yīng)用中,有時(shí)為了應(yīng)用程序正確運(yùn)行和保
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 肢體離斷應(yīng)急處理
- 請求帳篷報(bào)告范文
- 欠費(fèi)報(bào)告范文
- 二零二五年度未婚父母放棄撫養(yǎng)權(quán)及子女撫養(yǎng)費(fèi)支付協(xié)議
- 2025年度車輛報(bào)廢回收抵押借款合同
- 二零二五年度夫妻離婚協(xié)議書及財(cái)產(chǎn)分割及子女撫養(yǎng)權(quán)及撫養(yǎng)金及贍養(yǎng)費(fèi)及債務(wù)處理及子女教育及共同財(cái)產(chǎn)及子女撫養(yǎng)協(xié)議書
- 2025年度旅游酒店委托經(jīng)營管理協(xié)議
- 2025年度汽車行業(yè)信息化建設(shè)與系統(tǒng)集成服務(wù)合同模板
- 二零二五年度魚塘承包與漁業(yè)生態(tài)補(bǔ)償協(xié)議
- 二零二五年度醫(yī)藥行業(yè)員工競業(yè)禁止補(bǔ)償金及解約合同
- 2025年黑龍江交通職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫必考題
- 個(gè)人畫協(xié)議合同范本
- 2024-2025學(xué)年高一下學(xué)期開學(xué)第一節(jié)課(哪吒精神)主題班會課件
- 人教版2025-初中物理實(shí)驗(yàn)室實(shí)驗(yàn)課程安排
- 南京市江寧區(qū)2023-2024六年級數(shù)學(xué)下冊第一二單元練習(xí)及答案
- 2024年無錫科技職業(yè)學(xué)院高職單招語文歷年參考題庫含答案解析
- 舞蹈藝術(shù)賞析課件
- 2025江蘇泰州興化市陳堡鎮(zhèn)村級后備干部招聘10人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 重慶市2025屆高三第一次學(xué)業(yè)質(zhì)量調(diào)研抽測化學(xué)試題 (含答案)
- 成人腦室外引流護(hù)理-中華護(hù)理學(xué)會團(tuán)體 標(biāo)準(zhǔn)
- 2024年甘肅省公務(wù)員考試《行測》真題及答案解析
評論
0/150
提交評論