學(xué)習(xí)動(dòng)態(tài)性能表第八篇-(1)-V$LOCK
本視圖列出Oracle 服務(wù)器當(dāng)前擁有的鎖以及未完成的鎖或栓鎖請求。如果你覺著session在等待等待事件隊(duì)列那你應(yīng)該檢查本視圖。如果你發(fā)現(xiàn)session在等待一個(gè)鎖。那么按如下先后順序:
1.使用V$LOCK找出session持有的鎖。
2.使用V$SESSION找出持有鎖或等待鎖的session執(zhí)行的sql語句。
3.使用V$SESSION_WAIT找出什么原因?qū)е聅ession持有鎖堵塞。
4.使用V$SESSION獲取關(guān)于持有鎖的程序和用戶的更多信息。
V$LOCK中的常用列
·SID:表示持有鎖的會(huì)話信息。
·TYPE:表示鎖的類型。值包括TM和TX等。
·LMODE:表示會(huì)話等待的鎖模式的信息。用數(shù)字0-6表示,和表1相對應(yīng)。
·REQUEST:表示session請求的鎖模式的信息。
·ID1,ID2:表示鎖的對象標(biāo)識。
公共鎖類型
在Oracle數(shù)據(jù)庫中,DML鎖主要包括TM鎖和TX鎖,其中TM鎖稱為表級鎖,TX鎖稱為事務(wù)鎖或行級鎖。
當(dāng)Oracle執(zhí)行DML語句時(shí),系統(tǒng)自動(dòng)在所要操作的表上申請TM類型的鎖。當(dāng)TM鎖獲得后,系統(tǒng)再自動(dòng)申請TX類型的鎖,并將實(shí)際鎖定的數(shù)據(jù)行的鎖標(biāo)志位進(jìn)行置位。這樣在事務(wù)加鎖前檢查TX鎖相容性時(shí)就不用再逐行檢查鎖標(biāo)志,而只需檢查TM鎖模式的相容性即可,大大提高了系統(tǒng)的效率。TM鎖包括了SS、SX、S、X等多種模式,在數(shù)據(jù)庫中用0-6來表示。不同的SQL操作產(chǎn)生不同類型的TM鎖,如下表1。
TX:行級鎖,事務(wù)鎖
·在改變數(shù)據(jù)時(shí)必須是排它模式(mode 6)。
·每一個(gè)活動(dòng)事務(wù)都擁有一個(gè)鎖。它將在事務(wù)結(jié)束(commit/rollback)時(shí)釋放。
·如果一個(gè)塊包括的列被改變而沒有ITL(interested transaction list)槽位(entries),那么session將鎖置于共享模式(mode 4)。當(dāng)session獲得塊的ITL槽位時(shí)釋放。
·當(dāng)一個(gè)事務(wù)首次發(fā)起一個(gè)DML語句時(shí)就獲得一個(gè)TX鎖,該鎖保持到事務(wù)被提交或回滾。當(dāng)兩個(gè)或多個(gè)會(huì)話在表的同一條記錄上執(zhí)行DML語句時(shí),第一個(gè)會(huì)話在該條記錄上加鎖,其他的會(huì)話處于等待狀態(tài)。當(dāng)?shù)谝粋€(gè)會(huì)話提交后,TX鎖被釋放,其他會(huì)話才可以加鎖。
·指出回滾段和事務(wù)表項(xiàng)
按下列項(xiàng)以避免競爭:
·避免TX-6類型競爭,需要根據(jù)您的應(yīng)用而定。
·避免TX-4類型競爭,可以考慮增加對象INITRANS參數(shù)值。
TM:表級鎖
·數(shù)據(jù)庫執(zhí)行任何DDL語句時(shí)必須是排它模式;例如,alter table,drop table。
·執(zhí)行像insert,update,delete這類DML語句時(shí)處于共享模式。它防止其它session對同一個(gè)對象同時(shí)執(zhí)行ddl語句。
·任何對象擁有正被改變的數(shù)據(jù),TM鎖都將必須存在。
·鎖指向?qū)ο蟆?/p>
在TM隊(duì)列避免競爭,可以考慮屏蔽對象表級鎖,屏蔽表級鎖防止對象執(zhí)行任何ddl語句。
ST:空間事務(wù)鎖
·每個(gè)數(shù)據(jù)庫(非實(shí)例)擁有一個(gè)ST鎖。
·除了本地管理表空間,在space管理操作(新建或刪除extents)時(shí)必須是排它模式。
·對象creation, dropping, extension, 以及truncation都處于這種鎖
·多數(shù)公共原因的爭奪,是在磁盤排序(并非使用真正的臨時(shí)表空間)或回滾段擴(kuò)展或收縮。
按如下項(xiàng)以避免競爭:
·使用真正的臨時(shí)表空間(true temporary tablespaces),利用臨時(shí)文件。臨時(shí)段在磁盤排序之后并不創(chuàng)建或刪除。
·使用本地管理表空間。
·指定回滾段避免動(dòng)態(tài)擴(kuò)展和收縮,或使用自動(dòng)undo management。
·避免應(yīng)用執(zhí)行創(chuàng)建或刪除數(shù)據(jù)庫對象。
UL:用戶定義鎖用戶可以自定義鎖。內(nèi)容較多并與此節(jié)關(guān)系不大,略過。