




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Oracle是一個多用戶并發處理系統,在同一個時間點上,可能會有多個1、這些用戶之間的操作不會互相破壞,比如兩個用戶同時在相同的物2、在滿足串行化的前提下,如何將并發性提升型的鎖控制對數據的并發,以防止用戶之間出現破壞性的交互操作。個進程同時資源,會造成資源的破壞,那么就需要給這種資源上一個鎖,如果這種資源很簡單,例如內存的分配和,那么就使用latch,如果這種資源相對復雜,有一定的邏輯判斷,那么就需要使用lock。閂鎖Oracle使用閂鎖來實現內存的分配和例某個用戶進程A發出一條update語句,要去58號數據塊里的某條出insert語句,要將某個新的記錄到58號數據塊中,如果沒有一定的保護機制,A正要寫入的空間可能被B搶先寫入,B要寫入的空間可能被A搶先寫入,不管哪個用戶先搶先寫入,造成的結果就是,58號數據塊的數據都了在寫入過程中,一直持有latch,寫完以后,latch。B嘗試latch,發現latchA持有,B進入等待狀態,直Alatch,Blatch以后,才能在58號數據塊中寫入數據。凡是涉及內存的讀和寫,就需要通過latch來實現,一次只能有一Oracle在實例管理中,不管是buffercache、sharedpoollogbuffer,都引入了各種各樣的latch。可以這樣來理解latch,通過某個變量值的變化來實現,變0則說明latch沒有被其它進程獲取,變量值為非0則說明latch被其他進程獲取Latch分為兩種類這種類latch都是test-and-set的方式獲得的,也就是說,如果當前進程不能獲latch的時候CPU旋轉,而不放CPU,這就占用著CPU。latch,為什么還要占用CPUlatch本身是但是沒有獲得latchCPU,那么需要進行上下文的切換,下次再次嘗試獲得latch時,又要進行上下文切換,可能消耗的時間,因此,會通過執行一段空代碼繞著CPU轉,然后再次嘗試獲得latch。如果仍然不能夠獲latch,繼續旋轉,當反復旋轉CPU并嘗試獲得latch的次數超過某個上限時(該上限由隱藏參數控制,這時進程會CPUsleep狀態,進程一旦進入sleep狀態,就會拋出一個等待事件,并記錄v$session_wait里,進程正在等latch的信息會出現一個進程會睡眠0.01秒,然后醒來,并再次嘗試獲得latch,如果旋轉CPU的次數達到上限值,仍然不能獲得latch,則再次進入睡眠,這時會睡眠兩倍的時間,以此類推,直到達到睡眠的最大值:0.2秒。上面的情況是數據庫服務器具有CPU的情況,如果只有CPU,就不存在旋轉CPU的情況,一旦獲得不了latch,就進入睡眠。2、不等待(no-這種類型的latch較少,對于這種類型latch來說,都會有很多個可用的latch。當一個進程請求其中的一個latch時no-wait模式開始請求,如果有當所有的latch都不能獲得的時候,才會進入等待。源很緊張,利用率總是在90%以上,甚至總是在100%,主要原因如下時隨意性過大,比如大小寫混用、則OracleSQL語句都要進行解析,也就是非常頻繁地讀寫sharedpool里的內存塊,從而導致與解析SQL相關的latch爭用。sqlSQL語句寫的比較低一旦發生latch資源爭用,就會導致CPU繁假設進程A執行一條SQL語句需要10000個數據塊,那么該進掃描數據塊的過程中,一直持有latch,而另一個進程B也要執行SQL得latch,直到睡眠才CPU,接下來C進程也要執行SQL,同樣的,由于A持有了latchC無法獲得,于是旋CPU,再去獲latch,直到進入睡眠才CPU,如果類似進程很多的話,CPU總是在旋轉,也就是在做空的循環,而無法做其他的事情,因此體現出CPU使用率過鎖定Lock用來控制多個用戶對表里相同數據如果沒有使用鎖定來管理事務,則在9:04的時候,用戶A檢索id=1列值時,顯示為20,用戶A的修改被B覆蓋使用鎖定以后的情況在鎖定中,存在下面的兩種基1、排他鎖(X鎖,一旦用戶對某個資源添加了排他鎖,則其他用戶都不能再對該資源添加任何類型的鎖,直到該用戶了資源上的X鎖在該資源上添加X鎖,只能添加S鎖,直到該用戶了S鎖為止DML事務鎖定機制行級鎖(TX鎖updateemployeesetlast_name=‘xkj’where1、OracleSQL語句進行解析,找exployee_id100的記錄所在的列上被更新前的舊值放入該undoSCN號、所使用的undo數據塊的地址,以及未提交的標記等信息358號數據塊中,找到被更新的數據行,在數據行頭部設置一個鎖定標記,并在頭部記錄當前使用的ITL槽號,做完這些工作X鎖如果這時,另一個用B也對exployee_id100的記錄進行修改,則其過上面描述一樣B在對數據行的頭部設置鎖定標記的時候,發現該數據行頭部已經有一個鎖定標記了,說明該記錄已經添加X鎖,于是用戶B必須等待,等待X鎖被。鎖定一條記錄,并不影響其他用戶對該記錄的,例如果用戶發出一SQLexployee_id100的記錄信這時服了,但是還沒有提交。于是根據數據行頭部ITL槽的號碼,在數據塊頭部ITL槽,并根據其中記錄undo數據塊的地址,找到undo讀一致性)塊,根據CR塊的內容,將用戶所需要的信息進行返回。表級A已經發出了更新exployee_id100的記錄的SQL語句,當A還沒有提交之前,另外一個用戶D發出下面的語句droptable由于A還沒有提交所做的事務,該事務還沒有結束,其他用戶不能刪除該表,否則A所發出的事務就無法正常結束,為了用戶D的刪除操作,能夠想到的最直觀的方法是顯然這樣存在很大的性能問表級鎖共5種模1、行級排他鎖(Rowexclusive)RX當進行DML時,會自動在被更新的表上添加RX鎖,可以執允許其他事務通過DML語句修改相同表里的其他數據行允許使用lock命令對表添加RX鎖定不允許其他事務對表添加XSYS@orcl>createtabletestx(idnumber);SYS@orcl>insertintotestxvalues(1);在Sess1中數據,不提交,再打開Sess2,添加XSYS@orcl>locktabletestxinexclusive不能添加X中可以添加X鎖。SYS@orcl>locktabletestxinexclusivemode;Table(s)Locked.成功添加XSYS@orcl>createtabletest1(idnumber);SYS@orcl>insertintotest1values(1);務使用lock添加一個行級排他鎖SYS@orcl>locktabletest1inrowexclusivemode;Table(s)Locked.在Sess1中無法XSYS@orcl>locktabletest1inexclusive不成在sess2中rollbacksess1可以添加X鎖,Sess2中無XSYS@orcl>SYS@orcl>locktabletest1inexclusivemode;Sess1成功SYS@orcl>locktabletest1inexclusiveSess2不成行級共享鎖(rowsharedRS鎖這些命令。查詢完成以后,發出rollback命令表上添加RS鎖以后,不允許其他事務對相同的表添X鎖,但是允許SYS@orcl>createtabletest2(idnumber,namevarchar2(10));SYS@orcl>insertintotest2values(1,'aa');SYS@orcl>insertintotest2values(2,'bb');SYS@orcl>commit;SYS@orcl>select*fromtest2whereid=1forupdate;Sess2,不允許對鎖定的數據進行修改SYS@orcl>deletefromtest2;SYS@orcl>deletefromtest2whereid=2;SYS@orcl>commit;在對表進行DML的時候,已經在表上添加了行級排他鎖,因此在有行級共SYS@orcl>locktabletest2inrowexclusivemode;SYS@orcl>locktabletest2inexclusive不成Sess2,rollback后,sess1可以添加排他鎖SYS@orcl>locktabletest2inexclusivemode;共享鎖(shared)SSYS@orcl>createtabletest3(idnumber);SYS@orcl>insertintotest3values(1);SYS@orcl>insertintotest3values(2);SYS@orcl>commit;SYS@orcl>locktabletest3insharemode;Sess2,不允許進行DML操作SYS@orcl>insertintotest3values(5);Sess1,rollback后,sess2可以數據Sess2,允許進行RSSYS@orcl>locktabletest3inrowshare注:共享鎖和排他鎖的區別是可以允許排他鎖(exclusive)X其他事務不能對表進行任何的DMLDDL操作,只能進行查SYS@orcl>locktabletest3inexclusive共享行級排他鎖(sharedrowexclusive)SRX不能對相同的表進行DML操作,也不能添加共鎖之間的兼容性,有了這個鎖,能不能有另外一 exclusive][exclusive]mode;可以通過DML進行自動的加鎖,也可以使用LOCK手工共享鎖(ShareTableLockS加鎖語ockTableTableNameInShare表。一個有效的共享鎖明確地SelectForupdate形式鎖定行,或執行LOCKTABLETableNameINSHAREROWEXCLUSIVEMODE;LOCKTABLETableNameINROWEXCLUSIVEMODE;排它鎖(ExclusiveTableLockX加鎖語ockTableTableNameInExclusive定義排它鎖的語法LOCKTABLETableNameINEXCLUSIVE行級鎖(RowShareTableLock,RS一個行級鎖(有時SubshareTableLock,簡SS,子共享鎖)需要該事務在被鎖定行的表update的形式加鎖。當有下面語句被執行的時候SELECT...FROMTableName...FORUPDATEOF...;LOCKTABLETableNameINROWSHAREMODE;行級鎖(RowShareTableLock)在鎖類型中是限制最少的,也是在表的并允許的操作:行級共享鎖由一個事務控制,允許其它事務查詢、、更的操作:擁有行級鎖的事務不允許其它事務執行排它鎖,即LockTableTableNameInExclusive行級排它鎖(RowExclusiveTableLock,RXINSERTINTOTableName...;UPDATETableName...;DELETEFROMTableName...;LOCKTABLETableNameINROWEXCLUSIVE行級排它鎖比行級鎖稍微多一些限制LOCKTABLEtableINSHARELOCKTABLEtableINSHAREEXCLUSIVEMODE;LOCKTABLEtableINEXCLUSIVEMODE共享行級排它鎖(ShareRowExclusiveTableLock,SRX共享行級排它鎖有時也稱共享子排它鎖(ShareSubexclusiveTableLock,SSX,它比共享鎖有限制。定義共享行級排它鎖的語法為:LockTableTableNameInShareRowExclusive鎖事務允許其它事務在被鎖定的表上執行查詢或使用SelectFromTableNameForupdate…來準確在鎖定行而不能更新行。LOCKTABLETableNameINSHAREMODE;LOCKTABLETableNameINSHAREROWEXCLUSIVEMODE;LOCKTABLETableNameINROWEXCLUSIVEMODE;LOCKTABLETableNameINEXCLUSIVE據庫掛起,或導致死鎖的發生,產生ORA-60的錯誤。解決DML事務鎖定的兼容的鎖定,就會發生鎖定的現象。鎖定相關視其中比較重要的字段包括XIDUSN表示當前事務使用的回滾段的、做槽號、XIDSQN說明序列號、STATUS說明該事務是否為活動的。記錄了當session已經獲得的鎖定以及正在請求的鎖定的信息。其中比較TX和TM、LMODE說明已經獲得的鎖定的模式,以數字編碼表示、REQUEST說明正在請求的鎖定的模式,以數字編碼表示。BLOCK說明是否了其他用戶獲得鎖定,大于0說明是,等于0說明否。該視圖中包含的字段以及字段含義v$lock中的字段一模一樣。只不過該錄按照申請鎖定的時間先后順序排列,先申請鎖定的session排面,排面的session將會先獲得鎖定。記錄了當前已經被鎖定的對象的信息。其中比較重要的字段包括XIDUSN表示當前事務使用的回滾段的、XIDSLOT說明該事務在回滾段頭部的事務表中對應的記錄、XIDSQN說明序列號、OBJECT_ID說明當前被鎖定的對象的ID號,可以IDdba_objects里查找被鎖定的對象名稱、LOCKED_MODE說明鎖定模式的數字編碼。記錄了當前session的相關信息。其中比較重要的字段包SID表示sessionSYS@orcl>createtabletest5(idnumber,namevarchar(10),salarynumber);SYS@orcl>insertintotest5values(1,'a',12000);SYS@orcl>insertintotest5values(1,'a',3000);SYS@orcl>insertintotest5values(1,'a',20000);SYS@orcl>insertintotest5values(2,'b',11000);SYS@orcl>commit;SYS@orcl>updatetest5setname='wl'whereid=1;SYS@orcl>selectsidfromv$mystatwhererownum=1;Sess1的sessionIDSYS@orcl>selectxidusn,xidslot,xidsqn,statusfromv$transaction; XIDSQNSTATUS 該會話使用了5號回該會話在回滾段事務表中的槽號是事務是活動的,也就是沒有提SYS@orcl>selectsid,type,id1,id2,decode(lmode,0,'none',1,'null',2,'rowsharee',3,'rowexclusive',4,'share',5,'sharerowexclusive',6,'exclusive') exclusive',4,'share',5,'sharerowexclusive',6,'exclusive')request_mode,blockfromv$lockwheresid=31;SIDTYID1ID2LOCK_MODEREQUEST_MODE row ID1:對于TM鎖來說,被鎖定對象的IDSYS@orcl>selectobject_namefromdba_objectswhereobject_id=88622;被鎖定對象是另外啟動一個sessionSYS@orcl>selectsidfromv$mystatwhererownum=1;SessionIDSYS@orcl>updatetest5setname='ww'where這個會話被鎖定了回到session1,查看一下會話的鎖的情況SYS@orcl>selectsid,type,id1,id2,decode(lmode,0,'none',1,'null',2,'rowsharee',3,'rowexclusive',4,'share',5,'sharerowexclusive',6,'exclusive') exclusive',4,'share',5,'sharerowexclusive',6,'exclusive')request_mode,blockfromv$lockwheresidin(31,34);SIDTYID1ID2LOCK_MODEREQUEST_MODE000000row00row0134請求的鎖是行級排他鎖,但是該記錄31會話鎖定,因此鎖定模式為NONE34在TM上獲得了行級排他鎖,因為這個鎖和已有的鎖并不,31的鎖再次啟動一個sessionSYS@orcl>selectsidfromv$mystatwhererownum=1;SYS@orcl>updatetest5setname='ww'where事務也被鎖定回到session1執行這個命SYS@orcl>selectsid,type,decode(request,0,'none',1,'null',2,'rowshare',3,'rowexclusive',4,'share',5,'sharerowexclusive',6,'exclusive')request_modefromv$enqueue_lockwheresidin(31,34,56); TY TX TX AE AE AE exclusive',4,'share',5,'sharerowexclusive',6,'exclusive')lock_mode,b.ctimeas request_mode,c.ctimetime_waitedfromv$lockb,v$enqueue_lockc,v$sessionawherea.sid=b.sidandb.id1=c.id1(+)andb.id2=c.id2(+)andc.type(+)='TX'andb.type='TX'andBLOCKER_SIDSERIAL#BLOCKER_USERNAMETYLOCK_MODTIME_HELDWAITER_SIDREQUEST_MODE切換sess1會話,在31會話中,提交事務。再次運行查SYS@orcl> exclusive',4,'share',5,'sharerowexclusive',6,'exclusive')lock_mode,b.ctimeas request_mode,c.ctimetime_waitedfromv$lockb,v$enqueue_lockc,v$sessionawherea.sid=b.sidandb.id1=c.id1(+)andb.id2=c.id2(+)andc.type(+)='TX'andb.type='TX'andBLOCKER_SIDSERIAL#BLOCKER_USERNAMETYLOCK_MODTIME_HELDWAITER_SIDREQUEST_MODE SYS@orcl>altersystemkillsession'34,2657';再次查詢,發現已經沒有了鎖SYS@orcl> exclusive',4,'share',5,'sharerowexclusive',6,'exclusive')lock_mode,b.ctimeas request_mode,c.ctimetime_waitedfromv$lockb,v$enqueue_lockc,v$sessionawherea.sid=b.sidandb.id1=c.id1(+)andb.id2=c.id2(+)andc.type(+)='TX'andb.type='TX'andb.block=1;norows2/*selectsid,id1,id2,lmode,request,typefromv$lockwhereid1in(selectid1fromv$lockwherelmode=0)orderbyid1,request;--TMTXselectsid,type,id1,id2, reqtime,blockfromv$lockwheretypein('TM','TX');--TMTX decode(request,0,'NONE',1,'NULL',2,'RS',3,'RX',4,'S',5,'RSX',6,'X')request, ctime,blockfromv$lockwheretypein('TM','TX');3IDselectl.os_user_name,s.username, o.object_name,o.object_type,s.logon_timefromv$locked_objectl,v$sessions,dba_objectsowherel.session_id=orderbys.logon_time;或selectl.oracle_usernameo_name,l.session_idsid,o.object_name,o.object_type,l.xidusn,l.xidslot,l.xidsqnfromv$locked_objectl,all_objectsowherel.object_id=o.object_idorderby或SELECTp.spid,a.serial#,c.object_name,b.session_id,b.oracle_username,b.os_user_nameFROMv$processp,v$sessiona,v$locked_objectb,all_objectscWHEREp.addr=a.paddrANDcess=cessANDc.object_id=b.object_id;如何查找引起鎖的S
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫療數據可視化與智慧醫療應用-洞察闡釋
- 2024年中國塑料助劑市場調查報告
- 2025年中國藏成藥行業市場發展前景及發展趨勢與投資戰略研究報告
- 半硬性鐵絲項目投資可行性研究分析報告(2024-2030版)
- 2025年中國發熱盤行業市場供需格局及投資規劃建議報告
- 2025年中國集裝箱船行業發展運行現狀及投資策略研究報告
- 雙股紙繩行業深度研究分析報告(2024-2030版)
- 2025至2030國內廢舊金屬回收行業市場發展現狀及前景趨勢與投資機會報告
- 2025至2030中國溶劑型醫藥油墨行業發展趨勢分析與未來投資戰略咨詢研究報告
- 2025至2030中國溫泉旅游行業產業運行態勢及投資規劃深度研究報告
- 荊州中學2024-2025學年高二下學期6月月考歷史試卷
- 2025-2030年中國婚慶產業行業市場現狀供需分析及投資評估規劃分析研究報告
- 2024-2025學年蘇教版四年級下學期期末測試數學試卷(含答案)
- 2025年新高考2卷(新課標Ⅱ卷)英語試卷
- 2025年中考化學必考要點知識歸納
- 2024年湖北省初中學業水平考試地理試卷含答案
- 2024年認證行業法律法規及認證基礎知識 CCAA年度確認 試題與答案
- 地方病防治技能理論考核試題
- 2022更新國家開放大學電大本科《計算方法(本)》2023-2024期末試題及答案(試卷代號:1084)
- GB∕T 40278-2021 紙和紙板 加速老化(光照條件下)
- 懸挑式腳手架驗收表范本
評論
0/150
提交評論