DB2并發(fā)控制(鎖)_第1頁
DB2并發(fā)控制(鎖)_第2頁
DB2并發(fā)控制(鎖)_第3頁
DB2并發(fā)控制(鎖)_第4頁
DB2并發(fā)控制(鎖)_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、LOGODB2并發(fā)控制(鎖)質(zhì)量管理中心引言v在關(guān)系數(shù)據(jù)庫(DB2,Oracle,Sybase,Informix和SQL Server)中最小的恢復(fù)和交易單位為一個事務(wù)(Transactions),事務(wù)具有ACID(原子性,一致性,隔離性和永久性)特征。關(guān)系數(shù)據(jù)庫為了確保并發(fā)用戶在存取同一數(shù)據(jù)庫對象時的正確性(即無丟失更新、可重復(fù)讀、不讀臟數(shù)據(jù),無幻像讀),數(shù)據(jù)庫中引入了并發(fā)(鎖)機(jī)制Company Logo目錄目錄一、并發(fā)控制與鎖一、并發(fā)控制與鎖二、二、 DB2多粒度封鎖機(jī)制多粒度封鎖機(jī)制三、三、 DB2隔離級別隔離級別 四、四、 DB2注冊變量與注冊變量與CC五、五、 DB2鎖監(jiān)控與鎖分析

2、鎖監(jiān)控與鎖分析LOGO一、并發(fā)控制與鎖一、并發(fā)控制與鎖一、一、 并發(fā)控制與鎖并發(fā)控制與鎖v事務(wù)v并發(fā)與數(shù)據(jù)一致性v三級封鎖協(xié)議v鎖v死鎖并發(fā)v并發(fā)的含義:為了充分利用數(shù)據(jù)庫資源,很多時候數(shù)據(jù)庫用戶都是對數(shù)據(jù)庫系統(tǒng)并行存取數(shù)據(jù),這樣就會發(fā)生多個用戶并發(fā)存取同一數(shù)據(jù)塊的情況,如果對并發(fā)操作不加控制可能會產(chǎn)生不正確的數(shù)據(jù),破壞數(shù)據(jù)的完整性,并發(fā)控制就是解決這類問題,以保持?jǐn)?shù)據(jù)庫中數(shù)據(jù)的一致性,即在任何一個時刻數(shù)據(jù)庫都將以相同的形式給用戶提供數(shù)據(jù)。事務(wù)事務(wù)的定義n 是數(shù)據(jù)庫系統(tǒng)中執(zhí)行的一個工作單位,它是由用戶定義的一組操作序列。n 一個事務(wù)可以是一組SQL語句、一條SQL語句或整個程序,一個應(yīng)用程序可

3、以包括多個事務(wù)。事務(wù)事務(wù)的形式n 事務(wù)的開始與結(jié)束可以由用戶顯式控制。如果用戶沒有顯式地定義事務(wù),則由DBMS按照缺省規(guī)定自動劃分事務(wù)。在SQL語言中,定義事務(wù)的語句有三條: BEGIN TRANSACTION COMMIT ROLLBACK BEGIN TRANSACTION表示事務(wù)的開始; COMMIT表示事務(wù)的提交,即將事務(wù)中所有對數(shù)據(jù)庫的更新寫回到磁盤上的物理數(shù)據(jù)庫中去,此時事務(wù)正常結(jié)束; ROLLBACK表示事務(wù)的回滾,即在事務(wù)運(yùn)行的過程中發(fā)生了某種故障,事務(wù)不能繼續(xù)執(zhí)行,系統(tǒng)將事務(wù)中對數(shù)據(jù)庫的所有已完成的更新操作全部撤銷,再回滾到事務(wù)開始時的狀態(tài)。 事務(wù)事務(wù)的特征1.原子性(Ato

4、mic)n 一個事務(wù)是一個不可分割的工作單位,事務(wù)在執(zhí)行時,應(yīng)該遵守“要么不做,要么全做”(nothing or all)的原則,即不允許事務(wù)部分的完成。n 即使因?yàn)楣收隙故聞?wù)未能完成,它執(zhí)行的部分結(jié)果要被取消。事務(wù)事務(wù)的特征2.一致性(Consistency)n 事務(wù)對數(shù)據(jù)庫的作用是數(shù)據(jù)庫從一個一致狀態(tài)轉(zhuǎn)變到另一個一致狀態(tài)。例如,銀行企業(yè)中,“從帳號A轉(zhuǎn)移資金額R到帳號B”是一個典型的事務(wù),這個事務(wù)包括兩個操作,從帳號A中減去資金額R和在帳號B中增加資金額R,如果只執(zhí)行其中一個操作,則數(shù)據(jù)庫處于不一致狀態(tài),帳務(wù)會出現(xiàn)問題。也就是說,兩個操作要么全做,要么全不做,否則就不能成為事務(wù)。n 可見

5、事務(wù)的一致性與原子性是密切相關(guān)的。事務(wù)事務(wù)的特征3.隔離性(Isolation)n 如果多個事務(wù)并發(fā)地執(zhí)行,應(yīng)像各個事務(wù)獨(dú)立執(zhí)行一樣,一個事務(wù)的執(zhí)行不能被其他事務(wù)干擾。n 即一個事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對并發(fā)的其他事務(wù)是隔離的。n 并以控制就是為了保證事務(wù)間的隔離性。事務(wù)事務(wù)的特征4.持久性(Durability)n 指一個事務(wù)一旦提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就應(yīng)該是持久的,即使數(shù)據(jù)庫因故障而受到破壞,DBMS也應(yīng)該能夠恢復(fù)。并發(fā)與數(shù)據(jù)一致性 并發(fā)操作與數(shù)據(jù)的不一致性并發(fā)操作與數(shù)據(jù)的不一致性當(dāng)同一數(shù)據(jù)庫系統(tǒng)中有多個事務(wù)并發(fā)運(yùn)行時,如果不加以適當(dāng)控制,可能產(chǎn)生數(shù)據(jù)的不一致性。例1并發(fā)取款操作。

6、假設(shè)存款余額R=1000元,甲事務(wù)T1取走存款100元,乙事務(wù)T2取走存款200元,如果正常操作,即甲事務(wù)T1執(zhí)行完畢再執(zhí)行乙事務(wù)T2,存款余額更新后應(yīng)該是700元。但是如果按照如下順序操作,則會有不同的結(jié)果: 甲事務(wù)T1讀取存款余額R =1000元; 乙事務(wù)T2讀取存款余額R =1000元; 甲事務(wù)T1取走存款100元,修改存款余額R =R 100=900,把R =900寫回到數(shù)據(jù)庫; 乙事務(wù)T2取走存款200元,修改存款余額R =R 200=800,把R =800寫回到數(shù)據(jù)庫。 并發(fā)與數(shù)據(jù)一致性數(shù)據(jù)庫不一致性主要有以下四種:1.丟失更新(Lost Update)當(dāng)兩個事務(wù)T1和T2讀入同一

7、數(shù)據(jù)做修改,并發(fā)執(zhí)行時, T2把T1或T1把T2的修改結(jié)果覆蓋掉,造成了數(shù)據(jù)的丟失更新問題,導(dǎo)致數(shù)據(jù)的不一致。2.臟讀(Dirty Read)事務(wù)T1更新了數(shù)據(jù)R,事務(wù)T2讀取了更新后的數(shù)據(jù)R,事務(wù)T1由于某種原因被撤消,修改無效,數(shù)據(jù)R恢復(fù)原值。事務(wù)T2得到的數(shù)據(jù)與數(shù)據(jù)庫的內(nèi)容不一致,這種情況稱為“臟讀”并發(fā)與數(shù)據(jù)一致性3.不可重復(fù)的讀(Unrepeatable Read) 事務(wù)T1讀取了數(shù)據(jù)R,事務(wù)T2讀取并更新了數(shù)據(jù)R,當(dāng)事務(wù)T1再讀取數(shù)據(jù)R以進(jìn)行核對時,得到的兩次讀取值不一致,這種情況稱為“不可重讀”。4. 幻象讀(Phantom Read)事務(wù) 1 讀取滿足某個搜索條件的一組數(shù)據(jù)行,

8、而事務(wù) 2 插入了與事務(wù) 1 搜索條件匹配的新行。如果事務(wù) 1 再次執(zhí)行產(chǎn)生原先行集的查詢,則會檢索到不同的行集。并發(fā)與數(shù)據(jù)一致性n 產(chǎn)生上述四類數(shù)據(jù)不一致性的主要原因就是并發(fā)操作破壞了事務(wù)的隔離性。n 并發(fā)控制就是要求DBMS提供并發(fā)控制功能以正確的方式高度并發(fā)事務(wù),避免并發(fā)事務(wù)之間的相互干擾造成數(shù)據(jù)的不一致性,保證數(shù)據(jù)庫的完整性。鎖 鎖定義鎖就是當(dāng)一個事務(wù)在對某個數(shù)據(jù)對象(可以是數(shù)據(jù)項(xiàng)、記錄、數(shù)據(jù)集、以至整個數(shù)據(jù)庫)進(jìn)行操作之前,必須獲得相應(yīng)的鎖,以保證數(shù)據(jù)操作的正確性和一致性。 鎖類型1排它鎖(Exclusive Lock) 排它鎖又稱寫鎖,簡稱為X鎖,其采用的原理是禁止并發(fā)操作。 當(dāng)事

9、務(wù)T對某個數(shù)據(jù)對象R實(shí)現(xiàn)X封鎖后,其他事務(wù)要等T解除X封鎖以后,才能對R進(jìn)行封鎖。這就保證了其他事務(wù)在T釋放R上的鎖之前,不能再對R進(jìn)行操作。2共享鎖(Share Lock) 共享鎖又稱讀鎖,,簡稱為S鎖,其采用的原理是允許其他用戶對同一數(shù)據(jù)對象進(jìn)行查詢,但不能對該數(shù)據(jù)對象進(jìn)行修改。 當(dāng)事務(wù)T對某個數(shù)據(jù)對象R實(shí)現(xiàn)S封鎖后,其他事務(wù)只能對R加S鎖,而不能加X鎖,直到T釋放R上的S鎖。 這就保證了其他事務(wù)在T釋放R上的S鎖之前,只能讀取R,而不能再對R作任何修改。三級封鎖協(xié)議1.一級封鎖協(xié)議事務(wù)T在修改數(shù)據(jù)對象之前必須對其加X鎖,直到事務(wù)結(jié)束。一級封鎖協(xié)議可以防止丟失更新,并保證事務(wù)T是可恢復(fù)的。

10、但是不能防止臟讀、不可重復(fù)的讀和幻象讀。2.二級封鎖協(xié)議在一級封鎖協(xié)議的基礎(chǔ)上,另外加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對其加S鎖,讀完后立即釋放S鎖。二級封鎖協(xié)議可以防止丟失更新、臟讀,但是不能防止不可重復(fù)的讀和幻象讀。三級封鎖協(xié)議1.三級封鎖協(xié)議在一級封鎖協(xié)議的基礎(chǔ)上,另外加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對其加S鎖,讀完后并不釋放S鎖,而直到事務(wù)T結(jié)束才釋放。三級封鎖協(xié)議可以防止丟失更新、臟讀、不可重復(fù)的讀和幻象讀。鎖 鎖粒度n 根據(jù)對數(shù)據(jù)的不同處理,封鎖的對象可以是這樣一些邏輯單元:字段、記錄、表、數(shù)據(jù)庫等。n 封鎖粒度與系統(tǒng)的并發(fā)度和并發(fā)控制的開銷密切相關(guān)。封鎖粒度越小,系統(tǒng)中能夠被封鎖的

11、對象就越多,并發(fā)度越高,但封鎖機(jī)構(gòu)復(fù)雜,系統(tǒng)開銷也就越大。相反,封鎖粒度越大,系統(tǒng)中能夠被封鎖的對象就越少,并發(fā)度越小,封鎖機(jī)構(gòu)簡單,相應(yīng)系統(tǒng)開銷也就越小。因此,在實(shí)際應(yīng)用中,選擇封鎖粒度時應(yīng)同時考慮封鎖機(jī)構(gòu)和并發(fā)度兩個因素,對系統(tǒng)開銷與并發(fā)度進(jìn)行權(quán)衡,以求得最優(yōu)的效果。n 由于同時封鎖一個記錄的概率很小,一般數(shù)據(jù)庫系統(tǒng)都在記錄級上進(jìn)行封鎖,以獲得更高的并發(fā)度。死鎖死鎖在同時處于等待狀態(tài)的兩個或多個事務(wù)中,其中的每一個在它能夠進(jìn)行之前,都等待著對方釋放自己想要的鎖,這種狀態(tài)稱為死鎖。時間事務(wù)T1事務(wù)T2t0LOCK R1 t1 LOCK R2t2 t3LOCK R2 t4WAIT t5WAIT

12、LOCK R1t6WAITWAITt7WAITWAITLOGO二、二、DB2多粒度封鎖機(jī)制多粒度封鎖機(jī)制二、DB2多粒度鎖機(jī)制v鎖的對象v鎖的策略v表鎖的模式v行鎖的模式v表鎖的相容矩陣v行鎖的相容矩陣vSQL語句與鎖v鎖升級鎖的對象鎖的對象DB2支持對表空間、表、行和索引加鎖(大型機(jī)上的數(shù)據(jù)庫還可以支持對數(shù)據(jù)頁加鎖)來保證數(shù)據(jù)庫的并發(fā)完整性。不過在考慮用戶應(yīng)用程序的并發(fā)性的問題上,通常并不檢查用于表空間和索引的鎖。該類問題分析的焦點(diǎn)在于表鎖和行鎖。鎖的策略鎖的策略DB2可以只對表進(jìn)行加鎖,也可以對表和表中的行進(jìn)行加鎖。如果只對表進(jìn)行加鎖,則表中所有的行都受到同等程度的影響。如果加鎖的范圍針對

13、于表及下屬的行,則在對表加鎖后,相應(yīng)的數(shù)據(jù)行上還要加鎖。究竟應(yīng)用程序是對表加行鎖還是同時加表鎖和行鎖,是由應(yīng)用程序執(zhí)行的命令和系統(tǒng)的隔離級別確定。表鎖的模式表鎖的模式nIS、IX、SIX方式用于表一級并需要行鎖配合,他們可以阻止其他應(yīng)用程序?qū)υ摫砑由吓潘i。 如果一個應(yīng)用程序獲得某表的IS鎖,該應(yīng)用程序可獲得某一行上的S鎖,用于只讀操作,同時其他應(yīng)用程序也可以讀取該行,或是對表中的其他行進(jìn)行更改。 如果一個應(yīng)用程序獲得某表的IX鎖,該應(yīng)用程序可獲得某一行上的X鎖,用于更改操作,同時其他應(yīng)用程序可以讀取或更改表中的其他行。 如果一個應(yīng)用程序獲得某表的SIX鎖,該應(yīng)用程序可以獲得某一行上的X鎖,用

14、于更改操作,同時其他應(yīng)用程序只能對表中其他行進(jìn)行只讀操作。 nS、U、X和Z方式用于表一級,但并不需要行鎖配合,是比較嚴(yán)格的表加鎖策略。 如果一個應(yīng)用程序得到某表的S鎖。該應(yīng)用程序可以讀表中的任何數(shù)據(jù)。同時它允許其他應(yīng)用程序獲得該表上的只讀請求鎖。如果有應(yīng)用程序需要更改讀該表上的數(shù)據(jù),必須等S鎖被釋放。 如果一個應(yīng)用程序得到某表的U鎖,該應(yīng)用程序可以讀表中的任何數(shù)據(jù),并最終可以通過獲得表上的X鎖來得到對表中任何數(shù)據(jù)的修改權(quán)。其他應(yīng)用程序只能讀取該表中的數(shù)據(jù)。U鎖與S鎖的區(qū)別主要在于更改的意圖上。U鎖的設(shè)計主要是為了避免兩個應(yīng)用程序在擁有S鎖的情況下同時申請X鎖而造成死鎖的。 如果一個應(yīng)用程序得

15、到某表上的X鎖,該應(yīng)用程序可以讀或修改表中的任何數(shù)據(jù)。其他應(yīng)用程序不能對該表進(jìn)行讀或者更改操作。 如果一個應(yīng)用程序得到某表上的Z鎖,該應(yīng)用程序可以讀或修改表中的任何數(shù)據(jù)。其他應(yīng)用程序,包括未提交讀程序都不能對該表進(jìn)行讀或者更改操作。 nIN鎖用于表上以允許未提交讀這一概念。行鎖的模式DB2鎖的兼容性表鎖的相容矩陣常見的表鎖:IS/IXDB2鎖的兼容性行鎖的相容矩陣常見的行鎖:NS/XSQL語句與鎖 【假設(shè)缺省的隔離級別為CS】SQL語句表鎖模式行鎖模式Select id from table_name where id = ISNSInsert into table_nameIXX(W)Upd

16、ate table_name where id = IXXDelete from table_name where id = IXXAlter table t1 add column id intZDrop table t1ZCreate table t1Z鎖升級鎖升級數(shù)據(jù)庫管理器可以自動將鎖定從行級別升級為表級別。每個鎖在內(nèi)存中都需要一定的內(nèi)存空間,為了減少鎖需要的內(nèi)存開銷,DB2提供了鎖升級這一功能。鎖升級是通過對表加上非意圖性的表鎖,同時釋放行鎖來減少鎖的數(shù)目,從而達(dá)到減少鎖需要的內(nèi)存開銷的目的的。鎖升級由數(shù)據(jù)庫管理器自動完成,數(shù)據(jù)庫的配置參數(shù)鎖列表頁面數(shù)(LOCKLIST)和應(yīng)用程序占

17、有百分比(MAXLOCKS)直接影響鎖升級的處理。鎖升級是有可能失敗的。LOCKLIST和MAXLOCKS LOCKLIST配置參數(shù)的計算方法如下(操作系統(tǒng)為64位平臺):n (1) 計算鎖列表大小的下限:(512 * 56 * MAXAPPLS)/4096其中,512是每個應(yīng)用程序平均所含鎖數(shù)量的估計值,56是對象(已有一把鎖)上每把鎖所需的字節(jié)數(shù)。n (2) 計算鎖列表大小的上限:(512 * 112 * MAXAPPLS)/4096其中,112是某個對象上第一把鎖所需的字節(jié)數(shù)。n (3) 對于您的數(shù)據(jù),估計可能具有的并發(fā)數(shù),并根據(jù)您的預(yù)計為鎖列表選擇一個初始值,該值位于您計算出的上限和下

18、限之間。 MAXLOCKS配置參數(shù)的計算方法如下:MAXLOCKS = 100 * (512鎖/應(yīng)用程序 * 56字節(jié)/鎖 * 2)/(LOCKLIST * 4096字節(jié))LOGO三、三、 DB2隔離級別隔離級別三、DB2隔離級別v可重復(fù)讀(Repeatable Read) v讀穩(wěn)定性(Read Stability) v游標(biāo)穩(wěn)定性(Cursor Stability) v未提交讀(Uncommitted Read)v定義的隔離級別v設(shè)置隔離級別v監(jiān)視 DB2 中的隔離級別隔離級別 可重復(fù)讀(Repeatable Read)事務(wù)執(zhí)行期間會鎖定該事務(wù)以任何方式引用的所有行。在事務(wù)存在期間,不允許其他

19、事務(wù)執(zhí)行會影響這個事務(wù)正在訪問的任何行的插入、更新或刪除操作。為了確保這種行為不會發(fā)生,鎖定該事務(wù)所引用的每一行- 而不是僅鎖定被實(shí)際檢索或修改的那些行。因此,如果一個事務(wù)掃描了1000行,但只檢索10行,那么它所掃描的1000行(而不僅是被檢索的10行)都會被鎖定。 在使用可重復(fù)讀隔離級別時,一個事務(wù)中所有被讀取過的表(行,跟有無唯一索引有關(guān))上都會被加上S鎖,直到該事務(wù)被提交或回滾,行上的鎖才會被釋放。隔離級別 讀穩(wěn)定性(Read Stability) 事務(wù)執(zhí)行期間會鎖定只是鎖定事務(wù)實(shí)際檢索和修改的行如果一個事務(wù)掃描了1000行,但只檢索10行,則只有被檢索的10行(而不是所掃描的1000

20、行)被鎖定。在這個事務(wù)存在期間,其他事務(wù)不能執(zhí)行那些會影響這個事務(wù)檢索到的行集的更新或刪除操作;但是其他事務(wù)可以執(zhí)行插入操作。如果插入的行與第一個事務(wù)的查詢的選擇條件匹配,那么這些行可能作為幻像出現(xiàn)在后續(xù)產(chǎn)生的結(jié)果數(shù)據(jù)集中。在使用讀穩(wěn)定性隔離級別時,一個事務(wù)中所有被讀取過的行上都會被加上NS鎖,直到該事務(wù)被提交或回滾,行上的鎖才會被釋放。讀穩(wěn)定性隔離級別可以防止臟讀和不可重復(fù)讀,但是可能出現(xiàn)幻像讀。隔離級別 游標(biāo)穩(wěn)定性(CS-Cursor Stability) 只鎖定事務(wù)聲明并打開的游標(biāo)當(dāng)前所引用的行,是DB2默認(rèn)的隔離級別。當(dāng)使用游標(biāo)穩(wěn)定性隔離級別的事務(wù)通過游標(biāo)從表中檢索行時,其他事務(wù)不能更

21、新或刪除游標(biāo)所引用的行。但是,如果被鎖定的行本身不是用索引訪問的,那么其他事務(wù)可以將新的行添加到表中,以及對被鎖定行前后的行進(jìn)行更新和/或刪除操作。所獲取的鎖一直有效,直到游標(biāo)重定位或事務(wù)終止為止(如果游標(biāo)重定位,原來行上的鎖就被釋放,并獲得游標(biāo)現(xiàn)在所引用行上的鎖)。此外,如果事務(wù)修改了它檢索到的任何行,那么在事務(wù)終止之前,其他事務(wù)不能更新或刪除該行,即使游標(biāo)不再位于被修改的行。在使用游標(biāo)穩(wěn)定性隔離級別時,一個事務(wù)的結(jié)果集中只有正在被讀取的那一行(游標(biāo)指向的行)會被加上NS鎖,其他未被處理的行上不被加鎖。它可以防止臟讀,但有可能出現(xiàn)不可重復(fù)讀和幻像讀。建議在需要最大并行性,但只看到其他應(yīng)用程序

22、中已落實(shí)行的情況下才使用。隔離級別 未提交讀(UR-Uncommitted Read) 未提交讀隔離級別是最不嚴(yán)格的隔離級別。實(shí)際上,在使用這個隔離級別時,僅當(dāng)另一個事務(wù)試圖刪除或更改被檢索的行所在的表時,才會鎖定該檢索的行。因?yàn)樵谑褂眠@種隔離級別時,行通常保持未鎖定狀態(tài),所以臟讀、不可重復(fù)讀和幻像讀都可能會發(fā)生。因此,未提交讀隔離級別通常用于那些訪問只讀表和視圖的事務(wù),以及某些執(zhí)行SELECT語句的事務(wù)(只要其他事務(wù)的未提交數(shù)據(jù)對這些語句沒有負(fù)面效果)。隔離級別 DB2隔離級別與現(xiàn)象 隔離級別臟讀不可重復(fù)的讀幻象讀可重復(fù)讀(RR)不可能不可能不可能讀穩(wěn)定性(RS)不可能不可能可能游標(biāo)穩(wěn)定性(

23、CS)不可能可能可能未落實(shí)的讀(UR)可能可能可能定義的級別n 第一個級別是驅(qū)動程序級別,這是一組驅(qū)動程序函數(shù)和方法。這個隔離級別是在驅(qū)動程序及其庫載入的時候定義的。 n 下一個級別是連接級別。無論何時,只要分配了連接句柄,就會定義一個隔離級別。這種隔離級別將在連接打開時有效。 n DB2 中的下一個級別是包級別。如果使用靜態(tài) SQL,則將創(chuàng)建一個包,并可綁定特定的隔離級別。這種隔離級別將在包得到描述時有效。 n 最后一個級別是語句級別。無論何時,只要分配了一個語句句柄,即可定義一個隔離級別。這種隔離級別將在語句執(zhí)行時有效。 設(shè)置隔離級別在 DB2 中,隔離級別始終在客戶端定義。不存在可以在服

24、務(wù)器端定義的數(shù)據(jù)庫默認(rèn)隔離級別。API級別描述SQL驅(qū)動程序在當(dāng)前會話的 DB2 命令行(db2cmd/shell)中db2 SET CURRENT ISOLATION isolevel 例如:db2 SET CURRENT ISOLATION RSCLI連接在 CLI 應(yīng)用程序中設(shè)置 SQL_ATTR_TXN_ISOLATION 屬性JDBC連接通過 setTransactionIsolation 方法setTransactionIsolation(isolevel_constant) 例如:con.setTransactionIsolation( Connection.TRANSACTIO

25、N_READ_UNCOMMITTED )ODBC驅(qū)動程序通過 ODBC 設(shè)置在 db2cli.ini 文件中使用 TXNISOLATION 關(guān)鍵字例如:db2 update cli cfg at user level for section TESTDB using TXNISOLATION 4SQLJ包對于 SQLJ,使用 SQLJ 配置文件綁定選項(xiàng)db2sqljbind -url jdbc:db2:/host:port/db -bindoptions ISOLATION isolevel serialized-profile-name例如:db2sqljbind -url jdbc:db2

26、:/localhost:50001/TESTDB -bindoptions ISOLATION RS $_SJProfile0靜態(tài) SQL包在靜態(tài) SQL 中,使用綁定選項(xiàng)db2 BIND bindfile ISOLATION isolevel例如:db2 BIND client11.bnd ISOLATION RSSQL 過程包在 SQL 過程中,使用特殊注冊表參數(shù)db2set DB2_SQLROUTINE_PREPOPTS=ISOLATION isolevel 例如:db2set DB2_SQLROUTINE_PREPOPTS=ISOLATION UR設(shè)置隔離級別隔離級別屬性值:CLIJD

27、BC 4 類驅(qū)動程序ODBC、嵌入式 SQL、Cobol屬性TXNISOLATIONsetTransactionIsolation 方法SQL_ATTR_TXN_ISOLATIONUR1Connection.TRANSACTION_READ_UNCOMMITTEDSQL_TXN_READ_UNCOMMITTEDCS2Connection.TRANSACTION_READ_COMMITTEDSQL_TXN_READ_COMMITTEDRS4Connection.TRANSACTION_READ_COMMITTEDSQL_TXN_REPEATABLE_READRR8Connection.TRANS

28、ACTION_SERIALIZABLESQL_TXN_SERIALIZABLE設(shè)置隔離級別 ibm-web-ext.xmi SQLSQL語句表鎖模式行鎖模式SELECT * FROM LOCK_MONITOR FOR READ ONLY WITH rrS無SELECT * FROM LOCK_MONITOR FOR READ ONLY WITH rsISNSSELECT * FROM LOCK_MONITOR FOR READ ONLY WITH cs無無SELECT * FROM LOCK_MONITOR FOR READ ONLY WITH ur無無SELECT * FROM LOCK_M

29、ONITOR FOR UPDATE WITH rrU無SELECT * FROM LOCK_MONITOR FOR UPDATE WITH rsIXUSELECT * FROM LOCK_MONITOR FOR UPDATE WITH csIXUSELECT * FROM LOCK_MONITOR FOR UPDATE WITH urIXU監(jiān)視DB2中的隔離級別盡管可以在不同的級別上設(shè)置隔離級別,但有效的隔離級別只有一個。在級別層次結(jié)構(gòu)中,最后定義的級別總是有效隔離級別。換句話說,語句隔離級別會覆蓋包隔離級別,包隔離級別覆蓋連接隔離級別,連接隔離級別覆蓋驅(qū)動程序隔離級別。監(jiān)視DB2中的隔離級別

30、可用工具:工具報告的級別關(guān)鍵字值/字段示例動態(tài) sql 快照(或者 db2pd -dyn)。語句級別語句文本子句 WITH isolevelWITH UR應(yīng)用程序快照連接級別包名稱SYSSHxyySYSSH300 (3=RS)語句的事件監(jiān)視器連接級別包名稱SYSSHxyySYSSH300 (3=RS)動態(tài)緩存(db2pd -dyn)連接級別動態(tài) SQL 環(huán)境StmtUID EnvID Iso11 1 RR有效隔離級別(db2pd -act)語句級別活動語句列表:StmtUID EffISO11 0工作負(fù)載管理器(WLM)功能和事件監(jiān)視器語句級別STMT_ISOLATION0.41 (=UR)監(jiān)

31、視DB2中的隔離級別隔離級別編碼:N/A 表示未指定,NC 表示未提交工具01234包名稱NCURCSRSRRdb2pd EffIsoRRCSURRSEFFECTIVE_ISOLATION (WLM_GET_ACTIVITY_DETAILS)RRCSURRSSTMT_ISOLATIONNONEURCSRSRRLOGO四、四、 DB2注冊變量與注冊變量與CC四、四、 DB2注冊變量與注冊變量與CCvDB2_EVALUNCOMMITTEDvDB2_SKIPDELETEDvDB2_SKIPINSERTED DB2注冊變量是9.5之前版本用來降低鎖消耗,提高并行度的三個環(huán)境變量。注冊變量 DB2_EV

32、ALUNCOMMITTED DB2_EVALUNCOMMITTED變量影響DB2在游標(biāo)穩(wěn)定性(CS)和讀穩(wěn)定性(RS)隔離級別下的行鎖機(jī)制。當(dāng)你啟用該功能時,DB2可以對未提交的插入(INSERT)或者更新(UPDATE)數(shù)據(jù)進(jìn)行謂詞判斷,如果未提交數(shù)據(jù)不符合該條語句的謂詞(且該謂詞非索引)判斷條件,DB2將不對未提交數(shù)據(jù)加鎖,這樣避免了因?yàn)橐獙ξ刺峤粩?shù)據(jù)加鎖而引起的鎖等待狀態(tài),提高了應(yīng)用程序訪問的并發(fā)性。同時DB2會無條件(不管是否滿足謂詞條件)進(jìn)行表掃描時忽略刪除的行數(shù)據(jù)(不管是否提交)。注:謂詞字段上面未建索引情況下,未啟用此功能時,在未提交數(shù)據(jù)不符合查詢語句的謂詞判斷條件時,仍會進(jìn)行鎖

33、等待。如果有索引,則不進(jìn)行鎖等待。注冊變量 DB2_EVALUNCOMMITTED 啟用此功能后,當(dāng)未提交的數(shù)據(jù)不符合查詢語句的謂詞判斷條件,且該謂詞上面未建索引的情況下,DB2將不會再進(jìn)行鎖等待,而返回正確的查詢結(jié)果。注冊變量 DB2_SKIPDELETED 變量DB2_SKIPDELETED(被啟用時=ON),將允許使用CS或RS隔離級別的語句,在索引掃描期間無條件地跳過被刪除的鍵,而在表訪問期間則無條件地跳過被刪除的行。注:啟用該參數(shù)等同于使用UR隔離級別,需要結(jié)合實(shí)際業(yè)務(wù)邏輯使用。注冊變量 DB2_SKIPINSERTED 如果設(shè)置DB2_SKIPINSERTED=ON,DB2將把未提

34、交的INSERT(只對于CS和RS 隔離級別)看作它們還沒有被插入。該特性提高了并發(fā)性,同時又不犧牲隔離語義。DB2 為掃描器實(shí)現(xiàn)了這種能力,通過鎖屬性和鎖請求的反饋,使其忽略未提交的插入行,而不是等待。注:啟用該參數(shù)等同于使用UR隔離級別,需要結(jié)合實(shí)際業(yè)務(wù)邏輯使用。注冊變量原始啟用DB2_EVALUNCOMMITTED啟用DB2_SKIPINSERTED啟用DB2_SKIPDELETED滿足謂詞判斷條件不滿足滿足不滿足滿足不滿足滿足不滿足Insert鎖等待謂詞有索引,則不鎖等待;謂詞無索引,則鎖等待鎖等待不鎖等待不鎖等待不鎖等待NANAUpdate鎖等待謂詞有索引,則不鎖等待;謂詞無索引,則

35、鎖等待鎖等待不鎖等待NANANANADelete鎖等待謂詞有索引,則不鎖等待;謂詞無索引,則鎖等待謂詞有索引,則鎖等待,謂詞無索引,則不鎖等待不鎖等待NANA不鎖等待不鎖等待備注:不鎖等待時采用忽略的方式,即當(dāng)成不存在此數(shù)據(jù)的情況。注冊變量設(shè)置注冊變量db2set db2set DB2_EVALUNCOMMITTED=ON -i db2set DB2_SKIPINSERTED=ON -idb2set DB2_SKIPDELETED=ON -iCUR_COMMIT currently committed semanticsemp 表有 5 條記錄,其中第二行和第四行插入操作已經(jīng)完成,描述該插入操

36、作的日志記錄已經(jīng)存儲在使用 TSM 歸檔的帶庫中,具體如圖 1 中右下方紅色部分所示;第三行正處于更新狀態(tài)(還沒落實(shí)),記錄該行的日志記錄處于磁盤中的活動日志文件中,該日志記錄描述了第三行的首次更改情況,具體如圖 1 右邊中間黃色部分所示;第五行正處于插入狀態(tài)(還沒落實(shí)),記錄該行的日志記錄處于磁盤中的活動日志文件中,該日志記錄描述了第五行的首次插入情況,具體如圖 1 右邊中間黃色部分所示;第一行正處于刪除狀態(tài)(還沒落實(shí)),記錄該行的日志記錄處于日志緩沖區(qū)中,該日志記錄描述了第一行的首次更改情況,具體如圖 1 右邊上方綠色部分所示;CUR_COMMIT currently committed

37、semantics圖 1 中間的 Locklist 部分表示鎖管理器,在鎖管理器中描述了第一行、第三行、第五行處于 X 鎖狀態(tài),與這些行對應(yīng)的日志記錄也在該鎖管理器中,這就是 DB2 V9.7 對行級鎖定新增的反饋機(jī)制,來標(biāo)識哪些“日志記錄”描述了該行的首次修改,當(dāng)發(fā)生一個鎖沖突時鎖管理器將使用該反饋機(jī)制直接返回這些日志記錄編號,如黑色箭頭所示。當(dāng)其他應(yīng)用試圖讀取第一行或第三行時,將會直接從日志緩沖區(qū)或日志文件中返回該行的“已落實(shí)”版本數(shù)據(jù)。而對未提交的第五行,掃描將直接忽略或跳過該行。 ORACLE SNAPSHOT ORACLE Snapshot 隔離級別情況下的的堵塞情況 DB2 V9.

38、7 之前的版本中使用 CS 隔離級別情況下的堵塞情況先出現(xiàn)的工作負(fù)載 后出現(xiàn)的工作負(fù)載讀工作負(fù)載寫工作負(fù)載讀工作負(fù)載否(不堵塞)否(不堵塞)寫工作負(fù)載否(不堵塞)是(堵塞)先出現(xiàn)的工作負(fù)載 后出現(xiàn)的工作負(fù)載讀工作負(fù)載寫工作負(fù)載讀工作負(fù)載否(不堵塞)可能寫工作負(fù)載是(堵塞)是(堵塞)ORACLE SNAPSHOT DB2 V9.7 中啟用“當(dāng)前已落實(shí)”的 CS 隔離級別情況下的堵塞情況先出現(xiàn)的工作負(fù)載 后出現(xiàn)的工作負(fù)載讀工作負(fù)載寫工作負(fù)載讀工作負(fù)載否(不堵塞)否(不堵塞)寫工作負(fù)載否(不堵塞)是(堵塞)DB2 V9.7 CUR COMMIT與環(huán)境變量啟用三個環(huán)境變量CUR COMMIT滿足謂詞判

39、斷條件不滿足滿足謂詞判斷條件不滿足Insert不鎖等待(忽略)不鎖等待;不鎖等待(忽略)不鎖等待;Update鎖等待不鎖等待不鎖等待(返回更新前的值)不鎖等待;Delete不鎖等待(忽略)不鎖等待;不鎖等待(返回刪除前的值)不鎖等待;備注:LOGO五、五、 DB2鎖監(jiān)控與鎖分析鎖監(jiān)控與鎖分析五、DB2鎖監(jiān)控與死鎖定位v鎖相關(guān)參數(shù)vDB2 鎖事件監(jiān)控vDB2 9.7鎖監(jiān)控v常見死鎖場景鎖相關(guān)參數(shù)LOCKLIST鎖定列表的最大存儲量(4KB),默認(rèn)自動調(diào)整MAXLOCKS每個應(yīng)用程序的鎖定百分比列表,默認(rèn)自動調(diào)整DLCHKTIME檢查死鎖的時間間隔,默認(rèn)10秒LOCKTIMEOUT鎖定超時,默認(rèn)無

40、限等待,建議1015秒DB2 鎖事件監(jiān)控 DB2 鎖事件監(jiān)控-連接數(shù)據(jù)庫db2 connect to CELL-創(chuàng)建dlmon事件監(jiān)控db2 create event monitor dlmon for tables, deadlocks with details write to file /home/db2inst1/dlmon-創(chuàng)建事件監(jiān)控記錄目錄mkdir /home/db2inst/dlmon-開啟事件監(jiān)控db2 set event monitor dlmon state 1-待監(jiān)控完畢后,執(zhí)行以下命令以生成分析文件db2evmon -path /home/db2inst1/dlmo

41、n /home/db2inst1/dlmon/dllog1.txt -停止dlmon事件監(jiān)控db2 set event monitor dlmon state 0-刪除dlmon事件監(jiān)控db2 drop event monitor dlmon”DB2 鎖事件監(jiān)控DB2 鎖事件分析Deadlocked Connection . Deadlock ID: 1 . Appl Id: 10.188.180.234.17257.1212260744 .(這兩個Appl 互為死鎖) Appl Id of connection holding the lock: 10.188.180.234.9577.12

42、122607442 . Table of lock waited on : AW_INVENTORY .(發(fā)生死鎖的表) Type of lock: Row (請求級別為行鎖) Mode of lock: NS - Share (and Next Key Share) (當(dāng)前擁有NS鎖) Mode application requested on lock: X - Exclusive (請求X鎖) . Deadlocked Statement: .(產(chǎn)生X鎖的SQL語句) Text : update AW_INVENTORY set SEND_STATE=?, DATA_STATE=?, M

43、ODIFY_TIME=?, SEND_TIME=?, PACKAGE_TIME=?, LAST_TIME=?, ORGGB_CD=?, ORGGB_NAME=?, ORG_CD=?, ORG_NAME=?, COUNTRY_CD=?, COUNTRY_NAME=?, LEAF_YEAR=?, LEAF_ORIGIN_CD=?, LEAF_ORIGIN_NAME=?, LEAF_TYPE_CD=?, LEAF_TYPE_NAME=?, LEAF_FORM_CD=?, LEAF_FORM_NAME=?, LEAF_VARIETY_CD=?, LEAF_VARIETY_NAME=?, STOCK_A

44、REA_CD=?, STOCK_AREA_NAME=?, SUB_STORAGE_ID=?, SUB_STORAGE_NAME=?, LEAF_RANK_CD=?, LEAF_RANK_NAME=?, LEAF_LEVEL_CD=?, LEAF_LEVEL_NAME=?, LEAF_LEVEL_NO=?, QUANTITY=?, WEIGHT=?, CONFISCATE_FLAG=?, MIN_ORIGIN_CD=?, MIN_ORIGIN_NAME=?, BUY_ORG_CD=?, BUY_ORG_NAME=?, STORAGE_ID=?, STORAGE_NAME=?, STORAGE_S

45、ORT=?, IN_DATE=?, IF_BASE=?, IF_STOCK=?, BASE_CD=?, BASE_NAME=?, RESERVED=?, RESERVED3=? where INVENTORY_ID=? List of Locks: Table Name : AW_INVENTORY Mode : X - Exclusive Current Mode : NS - Share (and Next Key Share) .(在AW_INVENTORY表上有一個NS鎖)DB2 9.7鎖監(jiān)控1. 刪除默認(rèn)死鎖事件監(jiān)視SET EVENT MONITOR DB2DETAILDEADLOC

46、K state 0 DROP EVENT MONITOR DB2DETAILDEADLOCK 2. 與鎖事件監(jiān)控相關(guān)的配置參數(shù)MON_LOCKWAITMON_LOCKTIMEOUTMON_DEADLOCKMON_LW_THRESH3. 修改鎖事件監(jiān)控配置參數(shù) (MON_LW_THRESH以微妙為單位)db2 update db cfg using MON_LOCKTIMEOUT HIST_AND_VALUES MON_DEADLOCK HIST_AND_VALUES MON_LOCKWAIT HIST_AND_VALUES MON_LW_THRESH 8000000 DB2 9.7鎖監(jiān)控4. 創(chuàng)建鎖事件監(jiān)視(可以監(jiān)視鎖超時和死鎖)db2 create event monitor lockdead for locking WRITE TO UNFORMATTED EVENT TABLE5. 啟動停止監(jiān)聽事件db2 set event monitor lockdead state 1db2 set event monitor lockdead state 06. 獲取鎖等待事件數(shù)據(jù)call EVMON_FORMAT_UE_TO_TABLES ( LOCKING, NULL, NULL, NULL, NULL, NULL, RECREATE_FORCE, -1, SELEC

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論