基於v$lock.block及request及dba_waiters或dba_blockers學習lock鎖系列七
結論
1,v$lock.block=1表明為持鎖會話,而block=0,表示為被阻塞會話(當然前提是至少有2個會話,如果僅一個會話,block=0),也就是說至少要2個會話才有意義比較block的值
2,v$lock雖然可以透過block的值來區分持鎖會話或被阻塞會話,但並不直觀,並且不能建立持鎖會話與被阻塞會話的對應關係,當然,你可以對v$lock進行再加工,是可以滿足這個需求的
3,透過dba_waiters及dba_blockers可以顯示等待會話及持鎖會話的對應關係,非常直觀,是v$lock的有效補充
4,dba_blockers僅適用於單例項資料庫
5,基於v$lock,
持鎖會話的條件是,request為none,block=1
被阻塞會話的條件是,request為非none,block=0
測試
1,建立測試表並插入資料
SQL> select * from v$version where rownum=1;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
SQL> create table t_block(a int,b int);
Table created.
SQL> insert into t_block values(1,1);
1 row created.
SQL> commit;
Commit complete.
會話1
SQL> select * from v$mystat where rownum=1;
SID STATISTIC# VALUE
---------- ---------- ----------
234 0 0
SQL> update t_block set a=3 where a=1;
1 row updated.
會話2
SQL> select * from v$mystat where rownum=1;
SID STATISTIC# VALUE
---------- ---------- ----------
55 0 0
SQL> delete from t_block where a=1;
hang住
監控會話
---會話2 DELETE操作 HANG住,其BLOCK為0,而request為x,即它請求6級事務排它鎖,
SQL> l
1 select sid,type,id1,id2,
2 decode(lmode,0,'none',1,'null',2,'row-s',3,'row-x',4,'s',5,'ssx',6,'x') lmode,
3 decode(request,0,'none',1,'null',2,'row-s',3,'row-x',4,'s',5,'ssx',6,'x') request,
4 ctime,block
5* from v$lock where type in ('TM','TX') and sid in (234,55)
SQL> /
SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK
---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
55 TX 19857420 3159 none x 24 0 --被阻塞會話55,其block=0,request=x
234 TM 74772 0 row-x none 93 0
55 TM 74772 0 row-x none 25 0
234 TX 19857420 3159 x none 93 1 --阻塞會話即持鎖會話234,其block=1,
但是從v$lock是可以查詢持鎖會話及等待鎖會話的資訊,但不直觀,可以透過dba_waiters進行檢視
SQL> select waiting_session,holding_session,lock_type,mode_held,mode_requested,lock_id1,lock_id2 from dba_waiters where waiting_session=55;
WAITING_SESSION HOLDING_SESSION LOCK_TYPE MODE_HELD MODE_REQUESTED LOCK_ID1 LOCK_ID2
--------------- --------------- -------------------- ------------------------- -------------------- ---------- ----------
55 234 Transaction Exclusive Exclusive 19857420 3159
或者透過dba_blockers也可以查詢持鎖會話的SID,但注意此字典適用於單例項資料庫
SQL> select holding_session from dba_blockers;
HOLDING_SESSION
---------------
234
個人簡介:
8年oracle從業經驗,具備豐富的oracle技能,目前在國內北京某專業oracle服務公司從事高階技術顧問。
服務過的客戶:
中國電信
中國移動
中國聯通
中國電通
國家電網
四川達州商業銀行
湖南老百姓大藥房
山西省公安廳
中國郵政
北京302醫院
河北廊坊新奧集團公司
專案經驗:
中國電信3G專案AAA系統資料庫部署及最佳化
中國聯通CRM資料庫效能最佳化
中國移動10086電商平臺資料庫部署及最佳化
湖南老百姓大藥房ERR資料庫sql最佳化專案
四川達州商業銀行TCBS核心業務系統資料庫模型設計和RAC部署及最佳化
四川達州商業銀行TCBS核心業務系統後端批處理儲存過程功能模組編寫及最佳化
北京高鐵訊號監控系統RAC資料庫部署及最佳化
河南宇通客車資料庫效能最佳化
中國電信電商平臺核心採購模組表模型設計及最佳化
中國郵政儲蓄系統資料庫效能最佳化及sql最佳化
北京302醫院資料庫遷移實施
河北廊坊新奧data guard部署及最佳化
山西公安廳身份證審計資料庫系統故障評估
聯絡方式:
手機:18201115468
qq : 305076427
qq微博: wisdomone1
新浪微博:wisdomone9
qq群:275813900
itpub部落格名稱:wisdomone1 http://blog.itpub.net/9240380/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-1818526/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 深入學習Lock鎖(2)——LockSupport工具類
- MySQL-lock(鎖)-v2.0MySql
- 深度學習及pytorch基礎深度學習PyTorch
- 深入學習Lock鎖(1)——佇列同步器佇列
- Pytest學習(一)- 入門及基礎
- 基於Theano的深度學習框架keras及配合SVM訓練模型深度學習框架Keras模型
- Java多執行緒學習(六)Lock鎖的使用Java執行緒
- Lock 鎖
- mysql snapshot read快照讀及current read當前讀與鎖lock之一MySql
- 技術分享| 基於 Etcd 的分散式鎖實現原理及方案分散式
- java基礎學習:JavaWeb之request和responseJavaWeb
- 遷移學習系列---基於例項方法的遷移學習遷移學習
- PHP + MySQL 學習筆記(七)--- jQuery 及 jQuery Mobile 簡介 + 兩個 練習PHPMySql筆記jQuery
- Java NIO學習系列七:Path、Files、AsynchronousFileChannelJava
- 基於快取或zookeeper的分散式鎖實現快取分散式
- Request&Respond學習
- 圖神經網路七日打卡營學習筆記及心得神經網路筆記
- oracle事務transaction鎖lock一點兒小思考或總結Oracle
- Java命令學習系列(零)——常見命令及Java Dump介紹Java
- 機器學習導圖系列(5):機器學習模型及神經網路模型機器學習模型神經網路
- V$LOCK(zt)
- [擴充套件] Hyperf-redis-lock 基於hyperf的分散式鎖的實現套件Redis分散式
- 深度學習及深度強化學習研修深度學習強化學習
- Lock鎖之重入鎖與讀寫鎖
- 【JavaSE】Lock鎖和synchronized鎖的比較,lock鎖的特性,讀寫鎖的實現。Javasynchronized
- 關於 ReentrantLock 中鎖 lock() 和解鎖 unlock() 的底層原理淺析ReentrantLock
- ORACLE基礎之oracle鎖(oracle lock mode)詳解Oracle
- 零基礎Python學習路線及階段學習目標【乾貨】Python
- mysql innodb lock鎖之record lock之一MySql
- javaweb學習之路(1)requestJavaWeb
- 機器學習及深度學習的知識點及面試題總結機器學習深度學習面試題
- flutter不完全指南系列--(一)flutter特點及學習建議Flutter
- [Docker 系列]docker 學習十,Compose 編寫規則及wp 實戰Docker
- 快速學習nodejs系列:七、nodejs適合做什麼NodeJS
- Golang學習系列第七天:操作RedisGolangRedis
- ClickHouse學習系列之七【系統命令介紹】
- JAVA CDI 學習- @Produces及@DisposesJava
- DLL劫持學習及復現
- 深度學習及深度強化學習應用深度學習強化學習