這篇文章給大家介紹create index online 和create index不同及有哪些注意點(diǎn),內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
網(wǎng)頁設(shè)計(jì)是網(wǎng)站建設(shè)的前奏,好的網(wǎng)頁設(shè)計(jì)更深度的剖析產(chǎn)品和設(shè)計(jì)風(fēng)格定位,結(jié)合最新的網(wǎng)頁設(shè)計(jì)流行趨勢(shì),與WVI應(yīng)用標(biāo)準(zhǔn),設(shè)計(jì)出具企業(yè)表現(xiàn)力,大器而深穩(wěn)的網(wǎng)站界面設(shè)。成都創(chuàng)新互聯(lián)公司成立于2013年,是成都網(wǎng)站建設(shè)公司:提供企業(yè)網(wǎng)站設(shè)計(jì),品牌網(wǎng)站設(shè)計(jì),營(yíng)銷型企業(yè)網(wǎng)站建設(shè)方案,響應(yīng)式網(wǎng)站,小程序開發(fā),專業(yè)建站公司做網(wǎng)站。
CREATE INDEX ONLINE 鎖模式變化模擬
SESSION 139
SQL> insert into test123
2 select * from dba_objects;
50062 rows inserted
不提交
SESSION 148
SQL> create index test123_i on test123(owner) online;
回話148堵塞
SQL> select * from v$lock where sid in ('139','148') order by sid;
ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK
---------------- ---------------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
0000000096669B90 0000000096669BB8 139 TM 53479 0 3 0 66 1
00000000966E6578 00000000966E65B0 139 TX 589843 343 6 0 66 0
0000000096669DD0 0000000096669DF8 148 TM 53481 0 4 0 40 0
0000000096669CB0 0000000096669CD8 148 TM 53479 0 2 4 42 0
00000000978E54F0 00000000978E5510 148 DL 53479 0 3 0 42 0
00000000978E53A0 00000000978E53C0 148 DL 53479 0 3 0 42 0
堵塞正是由于
0000000096669CB0 0000000096669CD8 148 TM 53479 0 2 4 42 0
可以看到已經(jīng)以模式2也就是SS模式獲得TM鎖,但是期望以模式4獲得TM鎖也就是S模式,但是在OBJECTS 53479上被139會(huì)話以模式3也就是SX模式獲得
因?yàn)镾S和SX兼容所以可以獲得,但是如果想獲得S模式,S和SX是不兼容,所以堵塞
順便提一下OBJECT_ID=53479 就是表TEST123,而對(duì)象53481是對(duì)象SYS_JOURNAL_53480,就是為了保證在建立索引的同時(shí)把可能的更改記錄到所謂的日志表中
待索引建立完成后同步到日志中,這也是ONLINE建立索引所獨(dú)有的。
此時(shí)我們COMMIT回話139
SQL> select * from v$lock where sid in ('139','148') order by sid;
ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK
---------------- ---------------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
00000000978E53A0 00000000978E53C0 148 DL 53479 0 3 0 821 0
0000000096669DD0 0000000096669DF8 148 TM 53481 0 4 0 819 0
0000000096669CB0 0000000096669CD8 148 TM 53479 0 2 0 14 0
00000000978E54F0 00000000978E5510 148 DL 53479 0 3 0 821 0
一旦提交后期望的鎖即可獲得,而且獲得后會(huì)降級(jí)為2也就是SS模式而不是S模式
然后我們又在會(huì)話139進(jìn)行多次DML操作,看看CREATE INDEX ONLINE 是否堵塞 隨后的DML
SQL> select * from v$lock where sid in ('139','148') order by sid;
ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK
---------------- ---------------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
000000009666A250 000000009666A278 139 TM 53479 0 3 0 84 0
00000000966C0868 00000000966C08A0 139 TX 131088 311 6 0 80 0
0000000096669DD0 0000000096669DF8 148 TM 53481 0 4 0 562 0
00000000978E54F0 00000000978E5510 148 DL 53479 0 3 0 563 0
00000000978E53A0 00000000978E53C0 148 DL 53479 0 3 0 563 0
0000000096669CB0 0000000096669CD8 148 TM 53479 0 2 0 549 0
這里可以看到實(shí)際不會(huì)堵塞隨后的DML操作,因?yàn)榻导?jí)后只需要對(duì)TEST123獲得SS模式即可,SS模式是SX模式是兼容的。
所以CREATE INDEX ONLINE會(huì)
1、如果在本表上有DML沒有提交,那么CREATE INDEX ONLINE會(huì)等待其提交,因?yàn)槌跏嫉臅r(shí)候需要以S模式獲得表上TM鎖,S模式和SX模式不兼容
2、如果獲得了表上S模式鎖后,也就是進(jìn)行創(chuàng)建過程中,實(shí)際對(duì)表的TM S鎖已經(jīng)降級(jí)為SS,這個(gè)時(shí)候就不會(huì)堵塞隨后的DML了。這也是為什么
CREATE INDEX ONLINE優(yōu)于CREATE INDEX的地方,他不會(huì)堵塞隨后的DML,因?yàn)門M鎖是SS模式而不是S模式。
但是還是要注意第一點(diǎn),所以為了保險(xiǎn)還是關(guān)閉應(yīng)用建立索引吧,特別是大表,CREATE INDEX ONLINE也不一定保險(xiǎn)。
CREATE INDEX 鎖模式變化模擬
其實(shí)CREATE INDEX 沒什么好模擬的,
如果你還有DML操作在表上,那么一定有TX模式的TM鎖,建立索引會(huì)報(bào)錯(cuò)如下
SQL> create index test123_i
2 on test123(owner);
create index test123_i
on test123(owner)
ORA-00054: resource busy and acquire with NOWAIT specified
當(dāng)然如果可以建立索引的話你會(huì)看到如下
回話148建立索引,查看其鎖TM為模式4及模式S
SQL> select * from v$lock where sid in ('139','148') order by sid;
ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK
---------------- ---------------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
00000000978E53A0 00000000978E53C0 148 DL 53479 0 3 0 6 0
00000000978E54F0 00000000978E5510 148 DL 53479 0 3 0 6 0
00000000966F2BA8 00000000966F2BE0 148 TX 458790 367 6 0 6 0
0000000096669CB0 0000000096669CD8 148 TM 18 0 3 0 6 0
0000000096669B90 0000000096669BB8 148 TM 53479 0 4 0 6 0
回話139進(jìn)行操作
delete test123;
查看鎖模式如下
SQL> select * from v$lock where sid in ('139','148') order by sid;
ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK
---------------- ---------------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
0000000096669DD0 0000000096669DF8 139 TM 53479 0 0 3 15 0
00000000978E54F0 00000000978E5510 148 DL 53479 0 3 0 31 0
0000000096669B90 0000000096669BB8 148 TM 53479 0 4 0 31 1
00000000966F2BA8 00000000966F2BE0 148 TX 458790 367 6 0 31 0
0000000096668868 00000000966688C8 148 TS 4 18509883 6 0 17 0
00000000978E53A0 00000000978E53C0 148 DL 53479 0 3 0 31 0
0000000096669CB0 0000000096669CD8 148 TM 18 0 3 0 31 0
可以看到回話139想以模式3也就是SX模式獲得TM鎖,但是因?yàn)镃REATE INDEX 的TM模式是4也就是S模式,是不共享的,所以不能獲得,只能堵塞
等待create index 完成,所以CREATE INDEX一定不能再?zèng)]有確定這個(gè)表沒有DML操作的情況下使用,除非你確定沒有DML操作在這個(gè)表上
兼容矩陣
held/get null ss sx s ssx x
null 1 1 1 1 1 1
ss 1 1 1 1 1
sx 1 1 1
s 1 1 1
ssx 1 1
x 1
關(guān)于create index online 和create index不同及有哪些注意點(diǎn)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
標(biāo)題名稱:createindexonline和createindex不同及有哪些注意點(diǎn)
文章網(wǎng)址:http://aaarwkj.com/article24/peioce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站策劃、品牌網(wǎng)站建設(shè)、品牌網(wǎng)站制作、做網(wǎng)站、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)