enq: TX - row lock contention事件測(cè)試與跟蹤

enq: TX - row lock contention事件:表的行鎖等待事件围辙。

查詢資料獲鹊簟:row lock contention事件產(chǎn)生的原因有以下五種:

1恭陡、第一種情況:當(dāng)兩個(gè)會(huì)話對(duì)同一行進(jìn)行更新時(shí)对雪,ORACLE為了保證數(shù)據(jù)庫(kù)的一致性乔夯,加了一個(gè)TX鎖,這時(shí)另一個(gè)或多個(gè)會(huì)話必須等待第一個(gè)會(huì)話commit或rollback征椒,否則會(huì)一等待下去踊淳,這是最為常見(jiàn)的一種模式!

2陕靠、第二種情況:兩個(gè)或多個(gè)會(huì)話向具有唯一主健索引的表中插入或更新相同的數(shù)據(jù)行迂尝,既然是唯一主健索引,那么先獲得插入的session以TX排它鎖模式進(jìn)行添加剪芥,此時(shí)其它session只能等待垄开,也是常見(jiàn)的一種情況

3、第三種情況:兩個(gè)或多個(gè)會(huì)話插入或更新具有位圖索引的列税肪,跟據(jù)位圖索引的特性溉躲,一個(gè)索引鍵值對(duì)應(yīng)多個(gè)數(shù)據(jù)行的rowid值榜田,此種情況下也是以TX模式訪問(wèn),一般在OLTP系統(tǒng)中很少有位圖索引锻梳,但不排除個(gè)別系統(tǒng)箭券,本例中不存在位圖索引。

4疑枯、第四種情況:調(diào)用dbms_repair包時(shí)也會(huì)產(chǎn)生TX--在網(wǎng)上看到的辩块,具體怎么個(gè)原理,后面有空再研究該包

5荆永、第五種情況:由ORACLE BUG引起的

? ? Bug 3159414 ? ?documents another case where we might see?a TX request in mode 4 when constraints?are involved.

? ? Bug 5849679 ? ?documents an undetected deadlock case with RAC.

產(chǎn)生該等待事件的原因基本上就是上面五種情況废亭,前三種優(yōu)為常見(jiàn)。

一具钥、創(chuàng)建一個(gè)enq: TX - row lock contention 鎖(使用行操作的方式)

? ? 創(chuàng)建臨時(shí)表bd_ma


臨時(shí)表bd_ma

? ? 然后打開(kāi)一個(gè)sql窗口(創(chuàng)建一個(gè)session)執(zhí)行delete命令豆村,但不提交


delete不提交

再打開(kāi)一個(gè)sql窗口(再創(chuàng)建一個(gè)session)也執(zhí)行delete命令


新session執(zhí)行delete

此時(shí)就可以發(fā)現(xiàn)該命令一直等待上一個(gè)delete結(jié)束,此時(shí)即創(chuàng)造了一個(gè)enq: TX - row lock contention事件骂删。


二掌动、被用戶創(chuàng)建后,如何在當(dāng)時(shí)找到該事件宁玫,并處理

1粗恢、視圖v$session中事件等于enq: TX - row lock contention的

v$session視圖

sid = 37的session在等待


2、同樣通過(guò)v$session找到處理的對(duì)象

找到對(duì)應(yīng)的對(duì)象

obj_id = 91674撬统,該對(duì)象可能是表也可能是索引或者其他的

3、看下該對(duì)象是什么查找dba_object表敦迄,中id = 91674的

發(fā)現(xiàn)該對(duì)象是表恋追,名稱(chēng)是bd_ma.

到此知道發(fā)生行鎖等待事件的對(duì)象是bd_ma這個(gè)表造成的。

4罚屋、繼續(xù)找到是哪個(gè)用戶在執(zhí)行什么操作造成:

同樣通過(guò)v$session去找苦囱,發(fā)現(xiàn)osuser是derek,即客戶端是derek這臺(tái)客戶端造成的脾猛,信息部可以追蹤到該客戶端的使用用戶撕彤。

找客戶端


5、找到是哪個(gè)語(yǔ)句造成的猛拴,通過(guò)v$session和v$sql找到sqltext羹铅。

找sqltext

到此就可發(fā)現(xiàn)是因?yàn)閐elete命令一直沒(méi)有提交造成。


三愉昆、若是歷史AWR中如何找到線索职员?

1、通過(guò)dba_hist_active_sess_history找到發(fā)生過(guò)enq: TX - row lock contention事件的session_id.sql_id

dba_hist_active_sess_history

發(fā)現(xiàn)歷史有兩個(gè)跛溉,分別是session = 40和session = 15焊切。
2扮授、找到對(duì)應(yīng)的session具體信息,是哪個(gè)machine

v$active_session_history

3专肪、找到當(dāng)時(shí)發(fā)生時(shí)候的語(yǔ)句刹勃。

v$sql v$active_session_history


附當(dāng)時(shí)發(fā)生時(shí)候跟蹤的所有sql

--找到發(fā)生enq: TX - row lock contention的等待事件

select event,sid,p1,p2,p3 from v$session_wait where event = 'enq: TX - row lock contention';

--1 enq: TX - row lock contention 37 1415053318 589833 1934

--看這些session在等什么對(duì)象

select event, ROW_WAIT_OBJ#,ROW_WAIT_FILE#,ROW_WAIT_BLOCK#,ROW_WAIT_ROW# from v$session

where event='enq: TX - row lock contention';

--1 enq: TX - row lock contention 91674 5 10441 0

--說(shuō)明在等91674這個(gè)對(duì)象

--看91674這個(gè)對(duì)象是什么

select object_name,object_id,owner,object_type from dba_objects where object_id='91674';

--1 BD_MA 91674 NC633 TABLE? ? ? ? ? ? ? ? 原來(lái)是table

--另,查看是什么語(yǔ)句造成的等待事件嚎尤,填入等待事件的sid

select sid,sql_text from v$session a,v$sql b where sid in('37')

and (b.sql_id=a.sql_id );

--看下是哪里的客戶端造成的

select sid,serial#,username,status,osuser,machine,port,terminal,program,sql_id,sql_exec_start,prev_sql_id, type from v$session where sid = '37'

--1 37 162 NC633 ACTIVE derek WORKGROUP\DEREKPC 60452 DEREKPC plsqldev.exe 8tzau2c2gbdtr 2015/8/12 13:45:58 9m7787camwh4m USER

select * from v$lock where type = 'TX';

select s.sid, q.sql_id,q.SQL_FULLTEXT

from v$session s, v$sql q

where sid in

(select sid

from v$session

where state in ('WAITING')

and wait_class != 'Idle'

and event = 'enq: TX - row lock contention'

and (q.sql_id = s.sql_id or q.sql_id = s.prev_sql_id));


附歷史發(fā)生時(shí)候查找的sql

--查找歷史發(fā)生過(guò)enq: TX - row lock contention事件的記錄

select session_id,session_serial#,sql_id from dba_hist_active_sess_history

where event = 'enq: TX - row lock contention' order by sample_time;

--找到session_id 和sql_id是1 40 298 8tzau2c2gbdtr

-- 77 15 680 8tzau2c2gbdtr

--查看對(duì)應(yīng)session_id的信息

select distinct session_id,sql_id,sql_opname,program,module,action,machine from v$active_session_history where session_id in ('40','15')

and event = 'enq: TX - row lock contention'

and is_awr_sample = 'Y'

--查看對(duì)應(yīng)session執(zhí)行的語(yǔ)句

select -- s.SAMPLE_TIME,

distinct s.SESSION_ID,

sq.SQL_TEXT,

--sq.SQL_FULLTEXT,

sq.SQL_ID

from v$sql sq, v$active_session_history s

where s.SQL_ID = sq.SQL_ID

and s.SESSION_ID in ('15','40')

and sq.SQL_ID = '8tzau2c2gbdtr'


附參考:

enq: TX - row lock contention等待事件http://blog.csdn.net/songyang_oracle/article/details/6433753

解決一則enq: TX - row lock contention的性能故障http://www.oracleonlinux.cn/2012/11/resolve-row-lock-contention/

oracle的TM鎖荔仁、TX鎖
http://blog.sina.com.cn/s/blog_95b5eb8c0101i22x.html?


結(jié)語(yǔ):簡(jiǎn)書(shū)不適合寫(xiě)這種文章……以后不寫(xiě)了。字體都太大了~~~看起來(lái)好累

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末诺苹,一起剝皮案震驚了整個(gè)濱河市咕晋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌收奔,老刑警劉巖掌呜,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異坪哄,居然都是意外死亡质蕉,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)翩肌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)模暗,“玉大人,你說(shuō)我怎么就攤上這事念祭《矣睿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵粱坤,是天一觀的道長(zhǎng)隶糕。 經(jīng)常有香客問(wèn)我,道長(zhǎng)站玄,這世上最難降的妖魔是什么枚驻? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮株旷,結(jié)果婚禮上再登,老公的妹妹穿的比我還像新娘。我一直安慰自己晾剖,他們只是感情好锉矢,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著齿尽,像睡著了一般沈撞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上雕什,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天缠俺,我揣著相機(jī)與錄音显晶,去河邊找鬼。 笑死壹士,一個(gè)胖子當(dāng)著我的面吹牛磷雇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播躏救,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼唯笙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了盒使?” 一聲冷哼從身側(cè)響起崩掘,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎少办,沒(méi)想到半個(gè)月后苞慢,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡英妓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年挽放,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔓纠。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辑畦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出腿倚,到底是詐尸還是另有隱情纯出,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布敷燎,位于F島的核電站暂筝,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏懈叹。R本人自食惡果不足惜乖杠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一分扎、第九天 我趴在偏房一處隱蔽的房頂上張望澄成。 院中可真熱鬧,春花似錦畏吓、人聲如沸墨状。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)肾砂。三九已至,卻和暖如春宏悦,著一層夾襖步出監(jiān)牢的瞬間镐确,已是汗流浹背包吝。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留源葫,地道東北人诗越。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像息堂,于是被迫代替她去往敵國(guó)和親嚷狞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容