[鎖機制] 鎖相關查詢
1. 事務鎖查詢
1.1 每個事務只能有一個TX鎖
select
username,
v$lock.sid,
trunc(id1/power(2,16)) rbs,
bitand(id1,to_number('ffff','xxxx'))+0 slot,
id2 seq,
lmode,
request,
block,
v$lock.type
from
v$lock,
v$session
where
v$lock.type = 'TX'
and v$lock.sid = v$session.sid
and v$session.username = USER
/
2. 事務查詢
select XIDUSN, XIDSLOT, XIDSQN from v$transaction;
3. 鎖定會話與被鎖定會話
column blocker format a20
column blockee format a20
column isblocking format a10
select
(
select
username
from
v$session
where
sid=a.sid
) blocker,
a.sid,
' is blocking ',
(
select
username
from
v$session
where sid=b.sid
) blockee,
b.sid
from
v$lock a,
v$lock b
where
a.block = 1
and b.request > 0
and a.id1 = b.id1
and a.id2 = b.id2
/
4. 檢視TX與TM鎖資訊
4.1 一個事務只有一個TX鎖,但修改了多少了物件就有多少個TM鎖
4.2 ID1列就是物件的ID
select
(
select
username
from
v$session
where
sid = v$lock.sid
) username,
sid,
id1,
id2,
lmode,
request,
block,
v$lock.type
from
v$lock
where sid = (
select
sid
from
v$mystat
where
rownum=1
)
/
5. 查詢DDL鎖資訊
5.1 排他DDL鎖,DDL執行期間,其他會話只能查詢,不能修改物件和資料
5.2 共享DDL鎖,DDL執行期間,其他會話可以查詢和修改資料
5.3 可中斷解析鎖
5.4 建立檢視
@D:\oracle\product\10.2.0\db\RDBMS\ADMIN\catblock.sql
select
session_id sid,
owner, -- owner不是鎖的擁有者,而是被鎖定物件的擁有者
name,
type,
mode_held held,
mode_requested request
from
dba_ddl_locks
where
wner = 'GO';
/
6. 關於阻塞
6.1 insert
有一個帶主鍵的表,或者表上有惟一的約束,但有兩個會話試圖用同樣的值插入一行
多個表透過引用完整性約束相互連結,如果父表正在建立或刪除,對子表的插入可能會阻塞
如果應用允許終端使用者生成主鍵/惟一列值,往往就會發生INSERT阻塞
最好使用序列生成主鍵或唯一鍵的值
6.2 merge update delete
如果發生此類阻塞,說明應用中同時存在更新丟失的bug
可以採用select for update nowait來防止更新丟失和阻塞
1.1 每個事務只能有一個TX鎖
select
username,
v$lock.sid,
trunc(id1/power(2,16)) rbs,
bitand(id1,to_number('ffff','xxxx'))+0 slot,
id2 seq,
lmode,
request,
block,
v$lock.type
from
v$lock,
v$session
where
v$lock.type = 'TX'
and v$lock.sid = v$session.sid
and v$session.username = USER
/
2. 事務查詢
select XIDUSN, XIDSLOT, XIDSQN from v$transaction;
3. 鎖定會話與被鎖定會話
column blocker format a20
column blockee format a20
column isblocking format a10
select
(
select
username
from
v$session
where
sid=a.sid
) blocker,
a.sid,
' is blocking ',
(
select
username
from
v$session
where sid=b.sid
) blockee,
b.sid
from
v$lock a,
v$lock b
where
a.block = 1
and b.request > 0
and a.id1 = b.id1
and a.id2 = b.id2
/
4. 檢視TX與TM鎖資訊
4.1 一個事務只有一個TX鎖,但修改了多少了物件就有多少個TM鎖
4.2 ID1列就是物件的ID
select
(
select
username
from
v$session
where
sid = v$lock.sid
) username,
sid,
id1,
id2,
lmode,
request,
block,
v$lock.type
from
v$lock
where sid = (
select
sid
from
v$mystat
where
rownum=1
)
/
5. 查詢DDL鎖資訊
5.1 排他DDL鎖,DDL執行期間,其他會話只能查詢,不能修改物件和資料
5.2 共享DDL鎖,DDL執行期間,其他會話可以查詢和修改資料
5.3 可中斷解析鎖
5.4 建立檢視
@D:\oracle\product\10.2.0\db\RDBMS\ADMIN\catblock.sql
select
session_id sid,
owner, -- owner不是鎖的擁有者,而是被鎖定物件的擁有者
name,
type,
mode_held held,
mode_requested request
from
dba_ddl_locks
where
wner = 'GO';
/
6. 關於阻塞
6.1 insert
有一個帶主鍵的表,或者表上有惟一的約束,但有兩個會話試圖用同樣的值插入一行
多個表透過引用完整性約束相互連結,如果父表正在建立或刪除,對子表的插入可能會阻塞
如果應用允許終端使用者生成主鍵/惟一列值,往往就會發生INSERT阻塞
最好使用序列生成主鍵或唯一鍵的值
6.2 merge update delete
如果發生此類阻塞,說明應用中同時存在更新丟失的bug
可以採用select for update nowait來防止更新丟失和阻塞
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22558114/viewspace-772909/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 查詢鎖 && 解鎖Oracle
- Oracle查詢鎖、解鎖Oracle
- SQL SERVER死鎖查詢,死鎖分析,解鎖,查詢佔用SQLServer
- 殺會話之查詢鎖表的物件及相關操作會話物件
- MySQL鎖相關MySql
- MySQL鎖表相關問題查詢思路MySql
- mysql鎖表查詢MySql
- PHP 鎖機制PHP
- SQLite鎖機制SQLite
- PostgreSQL死鎖相關SQL
- synchronized鎖機制 之 程式碼塊鎖synchronized
- Mysql中的鎖機制——MyISAM表鎖MySql
- Mysql鎖機制分析MySql
- 分散式鎖機制分散式
- Lock鎖相關以及AQSAQS
- MySQL效能優化(九)-- 鎖機制之行鎖MySql優化
- 鎖機制到加鎖的必要性
- 資料庫鎖機制資料庫
- mysql myisam的鎖機制MySql
- Mysql各種鎖機制MySql
- 從自旋鎖、睡眠鎖、讀寫鎖到 Linux RCU 機制講解Linux
- sql 開發篇一 之 表鎖查詢及解鎖SQL
- [轉帖]SQL Server 鎖機制 悲觀鎖 樂觀鎖 實測解析SQLServer
- 圖解Janusgraph系列-併發安全:鎖機制(本地鎖+分散式鎖)分析圖解分散式
- InnoDB儲存引擎鎖機制(二、 鎖的型別)儲存引擎型別
- 再談mysql鎖機制及原理—鎖的詮釋MySql
- oracle鎖級別相關測試Oracle
- CAS 無鎖式同步機制
- 【MySQL】MySQL中的鎖機制MySql
- MySQL InnoDB 中的鎖機制MySql
- MySQL 相關子查詢MySql
- CURL查詢ES相關
- InnoDB儲存引擎鎖機制(三、鎖的演算法)儲存引擎演算法
- mysql慢查詢,死鎖解決方案MySql
- MySQL中鎖的相關問題DTQUMySql
- 什麼是SQL 語句中相關子查詢與非相關子查詢SQL
- 執行緒鎖 -賣票機制執行緒
- MySql(三) MySql中的鎖機制MySql
- iOS——Objective C都有哪些鎖機制iOSObject