來(lái)自社區(qū)專(zhuān)欄“平臺(tái)人生”

http://www.talkwithtrend.com/Column/detail/id/11

來(lái)自社區(qū)專(zhuān)欄“平臺(tái)人生”

http://www.talkwithtrend.com/Column/detail/id/11

說(shuō)起Lob字段,不少人都被坑過(guò),這不,小編就遇到了這樣的麻煩。

系統(tǒng)突然交易緩慢了,作為DBA,根據(jù)以往經(jīng)驗(yàn),數(shù)據(jù)庫(kù)方面如果有問(wèn)題,很可能是有等待事件,趕緊用如下語(yǔ)句驗(yàn)證一下:

select sql_id, event,count(*)

from dba_hist_active_sess_history

group by sql_id, event

order by 3;

果然,發(fā)現(xiàn)存在大量的enq: CF - contention等待事件,而且等待該事件的SQLID基本都是163ydjrbgxxxx,查看該SQL的具體內(nèi)容:

select sql_text

from v$sql

where sql_id=’ 163ydjrbgxxxx’;

查詢(xún)到的語(yǔ)句如下:

update plat_yyyyy_xxx

set a=:1 , b=:2 , c=:3 , d=:4 , e=:5 , f=:6 , pox=:7 , gex=:8 , f=:9

where g=:10

and h=:11

and i=:12

and j = :13

and k=:14

而阻塞它的是什么呢?我們用如下語(yǔ)句找到了阻塞源頭的信息,發(fā)現(xiàn)源頭會(huì)話執(zhí)行的SQL也是類(lèi)似的DML語(yǔ)句,等待事件是control file parallel write,多次執(zhí)行如下語(yǔ)句會(huì)發(fā)現(xiàn),源頭會(huì)話在不斷變化。

為什么會(huì)產(chǎn)生enq: CF - contention事件?我們先來(lái)看看enq: CF - contention等待事件是什么?

任何需要更新控制文件的動(dòng)作都需要拿到CF鎖,用于保證控制文件事務(wù)一致性,enq: CF - contention等待事件就是在多個(gè)會(huì)話同時(shí)更新控制文件時(shí)在獲得CF鎖的過(guò)程中發(fā)生的。根據(jù)oracle官方對(duì)該等待事件的描述,當(dāng)nologging屬性對(duì)象的DML操作并發(fā)時(shí)就會(huì)等待enq: CF – contention事件,而LOB字段上的UPDATE操作是一個(gè)典型的nologging模式的問(wèn)題場(chǎng)景,該SQL是一個(gè)UPDATE操作,于是查看表上是否存在LOB字段,并查看LOB字段的logging屬性:

果然LOB字段的logging屬性為nologging,中招了!

我們不禁會(huì)問(wèn):logging/nologging屬性之間有什么區(qū)別,為什么會(huì)產(chǎn)生問(wèn)題?

LOB字段在創(chuàng)建時(shí)可以設(shè)置為logging/nologging屬性,設(shè)置為logging時(shí)會(huì)把對(duì)LOB字段的修改記錄到redo log中,定期由后臺(tái)進(jìn)程完成與控制文件同步,從而降低控制文件訪問(wèn),避免大面積的CF-contention沖突。若設(shè)置為nologging,雖然可以減少產(chǎn)生redo log的日志量,但是oracle會(huì)在控制文件中記錄不可恢復(fù)SCN號(hào),需要拿到CF鎖,如果有大量的DML并發(fā),就會(huì)帶來(lái)enq: CF-contention的問(wèn)題。

而該系統(tǒng)LOB字段在設(shè)置為nologging屬性的同時(shí),對(duì)應(yīng)表有大量DML操作,從而引起大量enq: CF-contention等待事件爭(zhēng)用,導(dǎo)致了業(yè)務(wù)緩慢。因此,緊急將LOB字段設(shè)置為logging模式,之后等待事件消失了,系統(tǒng)恢復(fù)正常。

alter table NXXXXYYY. plat_yyyyy_xxx modify lob(PXXXYYY) (nocache logging);

在此提醒各位:您的LOB字段會(huì)不會(huì)有這樣的隱患呢?不妨去檢查一下nologging的LOB對(duì)象吧!

1.《Lob字段,您用對(duì)了嗎?》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。

2.《Lob字段,您用對(duì)了嗎?》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。

3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/guoji/16988.html