




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 關(guān)于外鍵列上的索引yangtingkun在“外鍵列上是否需要索引”這篇文章里介紹了對(duì)于在外鍵列上建索引的必要性,這篇文章里有提到:這時(shí)會(huì)話(huà)被鎖住,因?yàn)槿鄙倭送怄I索引后,主表刪除或更新記錄會(huì)導(dǎo)致子表整個(gè)表被鎖,而這會(huì)導(dǎo)致嚴(yán)重的系統(tǒng)并發(fā)問(wèn)題。這里怎樣理解“主表刪除或更新記錄會(huì)導(dǎo)致子表整個(gè)表被鎖”?其實(shí)他這里的含義就是lock the entire table in shared mode。從我隨后的測(cè)試中可以看到,這個(gè)是不一定的,在外鍵列上沒(méi)有索引的情況下,是否鎖子表跟子表上是否有mode為3的TM enqueue有關(guān)。我們來(lái)做一個(gè)測(cè)試,我這里沿用他文章里的建表語(yǔ)句:SQL> CREATE
2、 TABLE T_P (ID NUMBER, NAME VARCHAR2(30);Table createdSQL> ALTER TABLE T_P ADD PRIMARY KEY (ID);Table alteredSQL> CREATE TABLE T_C (ID NUMBER, FID NUMBER, NAME VARCHAR2(30);Table createdSQL> ALTER TABLE T_C ADD CONSTRAINT FK_T_C FOREIGN KEY (FID) REFERENCES T_P (ID);Table alteredSQL> ins
3、ert into t_p values(1,'A');1 row insertedSQL> insert into t_c values(1,1,'A');1 row insertedSQL> commit;Commit complete現(xiàn)在我們開(kāi)兩個(gè)session,分別是session 1和session 2。Session 1:SQL> select object_id from dba_objects where object_name='T_P' OBJECT_ID- 86351SQL> select sid fr
4、om v$mystat where rownum<2; SID- 20SQL> insert into t_p values(2,'A');1 row insertedSQL> select sid,type,id1,id2,lmode,request,block from v$lock where sid=20; SID TYPE ID1 ID2 LMODE REQUEST BLOCK- - - - - - - 20 TX 131113 101077 6 0 0 20 TM 86353 0 2 0 0 20 TM 86351 0 3 0 0SQL> d
5、elete from t_p where id=2;1 row deletedSQL> select sid,type,id1,id2,lmode,request,block from v$lock where sid=20; SID TYPE ID1 ID2 LMODE REQUEST BLOCK- - - - - - - 20 TX 131113 101077 6 0 0 20 TM 86353 0 2 0 0 20 TM 86351 0 3 0 0執(zhí)行完上述語(yǔ)句后我們轉(zhuǎn)到session 2:Session 2:SQL> select object_id from dba_ob
6、jects where object_name='T_C' OBJECT_ID- 86353SQL> select sid from v$mystat where rownum<2; SID- 18SQL> delete from t_c where id=1;1 row deletedSQL> select sid,type,id1,id2,lmode,request,block from v$lock where sid in (18,20); SID TYPE ID1 ID2 LMODE REQUEST BLOCK- - - - - - - 18
7、TX 65543 67674 6 0 0 18 TM 86353 0 3 0 0 18 TM 86351 0 2 0 0 20 TX 131113 101077 6 0 0 20 TM 86353 0 2 0 0 20 TM 86351 0 3 0 06 rows selected這里所有的操作都順暢的執(zhí)行,因?yàn)樵趀nqueue mode里,2和3是兼容的。我們現(xiàn)在來(lái)看yangtingkun提到的那個(gè)堵塞的例子:在上述session中分別執(zhí)行rollback,然后我們這次先轉(zhuǎn)到session 2:Session 2:SQL> delete from t_c where id=1;1 ro
8、w deletedSQL> select sid,type,id1,id2,lmode,request,block from v$lock where sid in (18,20); SID TYPE ID1 ID2 LMODE REQUEST BLOCK- - - - - - - 18 TX 458759 99739 6 0 0 18 TM 86353 0 3 0 0 18 TM 86351 0 2 0 0再轉(zhuǎn)到session 1:Session 1:SQL> insert into t_p values(2,'A');1 row insertedSQL>
9、select sid,type,id1,id2,lmode,request,block from v$lock where sid in (18,20); SID TYPE ID1 ID2 LMODE REQUEST BLOCK- - - - - - - 18 TX 458759 99739 6 0 0 18 TM 86353 0 3 0 0 18 TM 86351 0 2 0 0 20 TX 65551 68357 6 0 0 20 TM 86353 0 2 0 0 20 TM 86351 0 3 0 06 rows selectedSQL> delete from t_p where
10、 id=2;執(zhí)行到這里就hang住了我們現(xiàn)在再次轉(zhuǎn)到session 2:Session 2:SQL> select sid,type,id1,id2,lmode,request,block from v$lock where sid in (18,20); SID TYPE ID1 ID2 LMODE REQUEST BLOCK- - - - - - - 18 TX 458759 99739 6 0 0 18 TM 86353 0 3 0 1 18 TM 86351 0 2 0 0 20 TX 65551 68357 6 0 0 20 TM 86353 0 2 4 0 20 TM 863
11、51 0 3 0 0從結(jié)果里我們可以清晰的看到,session 1在執(zhí)行delete from t_p where id=2時(shí)會(huì)被hang住的原因是因?yàn)楝F(xiàn)在oracle想把原來(lái)子表上的TM enqueue由2變成4,而t_c上已經(jīng)有了3,enqueue mode里3和4不兼容,所以就hang住了。DSI405這樣解釋oracle為啥要convert:Instead of releasing the SS lock and acquiring the S one, the lock is converted because the session cannot release the SS lo
12、ck even momentarily in case there is need to roll back.如法炮制,你就可以很容易的觀察到子表的外鍵列上建了索引后以及是否執(zhí)行alter table XXX disable table lock對(duì)上述TM enqueue的影響。Session 1:SQL> CREATE INDEX IND_T_C_FID ON T_C (FID);Index createdSQL> insert into t_p values(2,'A');1 row insertedSQL> select sid,type,id1,id2
13、,lmode,request,block from v$lock where sid in (18,20); SID TYPE ID1 ID2 LMODE REQUEST BLOCK- - - - - - - 20 TX 196619 77630 6 0 0 20 TM 86353 0 2 0 0 20 TM 86351 0 3 0 0SQL> delete from t_p where id=2;1 row deletedSQL> select sid,type,id1,id2,lmode,request,block from v$lock where sid in (18,20
14、); SID TYPE ID1 ID2 LMODE REQUEST BLOCK- - - - - - - 20 TX 196619 77630 6 0 0 20 TM 86353 0 2 0 0 20 TM 86351 0 3 0 0轉(zhuǎn)到session 2:Session 2:SQL> delete from t_c where id=1;1 row deletedSQL> select sid,type,id1,id2,lmode,request,block from v$lock where sid in (18,20); SID TYPE ID1 ID2 LMODE REQU
15、EST BLOCK- - - - - - - 18 TX 524303 53353 6 0 0 18 TM 86353 0 3 0 0 18 TM 86351 0 2 0 0 20 TX 196619 77630 6 0 0 20 TM 86353 0 2 0 0 20 TM 86351 0 3 0 06 rows selected從結(jié)果里看到,這種模式下建了索引跟沒(méi)建沒(méi)有區(qū)別。全部rollback后先轉(zhuǎn)到session 2:Session 2:SQL> delete from t_c where id=1;1 row deletedSQL> select sid,type,id1
16、,id2,lmode,request,block from v$lock where sid in (18,20); SID TYPE ID1 ID2 LMODE REQUEST BLOCK- - - - - - - 18 TX 327682 113645 6 0 0 18 TM 86353 0 3 0 0 18 TM 86351 0 2 0 0再轉(zhuǎn)到session 1:Session 1:SQL> insert into t_p values(2,'A');1 row insertedSQL> select sid,type,id1,id2,lmode,reque
17、st,block from v$lock where sid in (18,20); SID TYPE ID1 ID2 LMODE REQUEST BLOCK- - - - - - - 18 TX 327682 113645 6 0 0 18 TM 86353 0 3 0 0 18 TM 86351 0 2 0 0 20 TX 458764 98619 6 0 0 20 TM 86353 0 2 0 0 20 TM 86351 0 3 0 06 rows selectedSQL> delete from t_p where id=2;1 row deletedSQL> select
18、 sid,type,id1,id2,lmode,request,block from v$lock where sid in (18,20); SID TYPE ID1 ID2 LMODE REQUEST BLOCK- - - - - - - 18 TX 327682 113645 6 0 0 18 TM 86353 0 3 0 0 18 TM 86351 0 2 0 0 20 TX 458764 98619 6 0 0 20 TM 86353 0 2 0 0 20 TM 86351 0 3 0 06 rows selected從結(jié)果里我們可以清晰的看到,session 1在執(zhí)行delete
19、from t_p where id=2時(shí)沒(méi)有hang住,因?yàn)楝F(xiàn)在oracle在子表的外鍵列上有索引的情況下并沒(méi)有想把原來(lái)的TM enqueue由2變成4,oracle這里還是保持了2不變。全部rollback后我們現(xiàn)在來(lái)測(cè)試alter table XXX disable table lock對(duì)上述TM enqueue的影響:先轉(zhuǎn)到session 2:Session 2:SQL> drop index IND_T_C_FID;Index droppedSQL> alter table t_c disable table lock;Table alteredSQL> delete
20、 from t_c where id=1;1 row deletedSQL> select sid,type,id1,id2,lmode,request,block from v$lock where sid in (18,20); SID TYPE ID1 ID2 LMODE REQUEST BLOCK- - - - - - - 18 TX 524323 53706 6 0 0 18 TM 86351 0 2 0 0從結(jié)果里我們可以看到現(xiàn)在子表T_C上沒(méi)有TM enqueue了。再轉(zhuǎn)到session 1:Session 1:SQL> insert into t_p values(
21、2,'A');1 row insertedSQL> select sid,type,id1,id2,lmode,request,block from v$lock where sid in (18,20); SID TYPE ID1 ID2 LMODE REQUEST BLOCK- - - - - - - 18 TX 524323 53706 6 0 0 18 TM 86351 0 2 0 0 20 TX 655386 48160 6 0 0SQL> delete from t_p where id=2;delete from t_p where id=2ORA-0
22、0069: cannot acquire lock - table locks disabled for T_C從結(jié)果里我們可以看到,對(duì)子表做disable table lock是不行的。全部rollback后我們?cè)俅无D(zhuǎn)到session 2:Session 2:SQL> alter table t_c enable table lock;Table alteredSQL> alter table t_p disable table lock;Table alteredSQL> delete from t_c where id=1;1 row deletedSQL> se
23、lect sid,type,id1,id2,lmode,request,block from v$lock where sid in (18,20); SID TYPE ID1 ID2 LMODE REQUEST BLOCK- - - - - - - 18 TX 65546 65739 6 0 0 18 TM 86353 0 3 0 0再轉(zhuǎn)到session 1:Session 1:SQL> insert into t_p values(2,'A');1 row insertedSQL> select sid,type,id1,id2,lmode,request,bl
24、ock from v$lock where sid in (18,20); SID TYPE ID1 ID2 LMODE REQUEST BLOCK- - - - - - - 18 TX 65546 65739 6 0 0 18 TM 86353 0 3 0 0 20 TX 196632 77830 6 0 0 20 TM 86353 0 2 0 0SQL> delete from t_p where id=2;執(zhí)行到這里就hang住了我們現(xiàn)在再次轉(zhuǎn)到session 2:Session 2:SQL> select sid,type,id1,id2,lmode,request,block from v$lock where sid in (18,20); SID TYPE ID1 ID2 LMODE REQUEST BLOCK- - - - - - - 18 TX 65546 65739 6 0 0
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 七方胃痛顆粒對(duì)幽門(mén)螺桿菌感染性胃病NOS影響的實(shí)驗(yàn)探究
- FeNiAlC雙相鋼非均勻變形行為與納米析出強(qiáng)化機(jī)制的深入探究
- 中國(guó)地震預(yù)警行業(yè)發(fā)展現(xiàn)狀、市場(chǎng)前景、投資方向分析報(bào)告智研咨詢(xún)發(fā)布
- 2025年環(huán)境監(jiān)測(cè)物聯(lián)網(wǎng)技術(shù)在環(huán)境監(jiān)測(cè)設(shè)備產(chǎn)業(yè)市場(chǎng)分析框架報(bào)告
- 基于人工智能的2025年城市軌道交通智慧運(yùn)維系統(tǒng)智能診斷報(bào)告
- 2025年煤炭清潔燃燒技術(shù)產(chǎn)業(yè)發(fā)展趨勢(shì)分析報(bào)告
- 中國(guó)阻燃纖維板行業(yè)盈利現(xiàn)狀深度分析及未來(lái)發(fā)展規(guī)劃咨詢(xún)報(bào)告
- 深淵線(xiàn)蟲(chóng)極端抗壓分子機(jī)制-洞察及研究
- 等離子體脫硝工藝-洞察及研究
- 超快光譜動(dòng)力學(xué)-第1篇-洞察及研究
- 2025年新高考1卷(新課標(biāo)Ⅰ卷)語(yǔ)文試卷(含答案)
- 2025年小學(xué)一年級(jí)數(shù)學(xué)下冊(cè)奧數(shù)競(jìng)賽測(cè)試考試卷(含答案解析)
- 2023-2024年福建高中物理會(huì)考試卷(福建會(huì)考卷)
- 人體發(fā)育學(xué)智慧樹(shù)知到期末考試答案章節(jié)答案2024年溫州醫(yī)科大學(xué)
- JT-T 1495-2024 公路水運(yùn)危險(xiǎn)性較大工程專(zhuān)項(xiàng)施工方案編制審查規(guī)程
- 《民族傳統(tǒng)體育項(xiàng)目》教學(xué)大綱
- 供應(yīng)商質(zhì)量處罰單
- 東北大學(xué)編譯原理課程設(shè)計(jì)報(bào)告
- 《谷氨酸的生產(chǎn)工藝》PPT課件.ppt
- 電壓測(cè)量裝置課程設(shè)計(jì)
- 基于PSSE的電力系統(tǒng)仿真計(jì)算及分析
評(píng)論
0/150
提交評(píng)論