SlideShare a Scribd company logo
1 of 31
Enqueue Lock 介绍 [email_address] http://www.dbthink.com/
内容介绍 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Enqueue Lock 类型 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
锁资源标识符 Enqueue Resource Identifier ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Enqueue Lock 模式 模式 内部编号 模式值 描述 ( 以 DML 为例来说明 ) Null KSQMNull 1 Null 模式 , 不妨碍任何并发访问 , 主要用来作为 Cache Invalidate 的通知机制存在 SS KSQMSS 2 SubShare 模式 , 使用共享模式锁住一条记录 SX KSQMSX 3 SubExclusive 模式 , 使用独占模式锁住一条记录 S KSQMS 4 共享模式 SSX KSQMSSX 5 Share,SubExclusive, 对表持有共享锁 , 对其中的记录持独占模式 X KSQMX 6 Exclusive 模式 , 对全表持独占模式
Enqueue  模式兼容性 请求 / 占用 Null SS SX S SSX X Null Yes Yes Yes Yes Yes Yes SS Yes Yes Yes Yes Yes No SX Yes Yes Yes No No No S Yes Yes No Yes No No SSX Yes Yes No No No No X Yes No No No No No
Enqueue Resource & Enqueue Lock ,[object Object],[object Object],[object Object],[object Object]
Enqueue Resource  结构
Enqueue Hash 与 Latch ,[object Object],[object Object],[object Object],[object Object]
获取 Enqueue Lock 的步骤 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
获取 Enqueue Lock 的步骤 (2)
释放 Enqueue Lock 的步骤 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
死锁的检测 (dead-lock)
Enqueue Lock  转储 ,[object Object],[object Object],[object Object],[object Object]
Enqueue Lock 的事件跟踪 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
相关动态视图介绍 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
相关视图介绍 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TM  锁 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TM  锁 - 相关锁 mode 对应的操作 ,[object Object],[object Object],[object Object],[object Object]
TM  锁 -online create/rebuild index ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TX  锁 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TX-mode 6 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TX  锁 -index Contention ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TX  锁 -itl contention ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
HW  锁 ,[object Object],[object Object],[object Object],[object Object]
US- 锁 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TO- 锁 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
CF  锁 - 说明 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
CF 锁 - 使用场景 ,[object Object],[object Object],[object Object],[object Object],[object Object]
JQ  锁 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
SQ- 锁 ,[object Object],[object Object],[object Object],[object Object],[object Object]

More Related Content

What's hot

Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训longhao
 
Essential oracle security internal for dba
Essential oracle security internal for dbaEssential oracle security internal for dba
Essential oracle security internal for dbamaclean liu
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训dcshi
 
NHibernate分享(1) share
NHibernate分享(1) shareNHibernate分享(1) share
NHibernate分享(1) shareXu Huang
 
为10g rac cluster添加节点
为10g rac cluster添加节点为10g rac cluster添加节点
为10g rac cluster添加节点maclean liu
 
Row Set初步学习V1.1
Row Set初步学习V1.1Row Set初步学习V1.1
Row Set初步学习V1.1Zianed Hou
 
Java多线程:驾驭Synchronize的方法
Java多线程:驾驭Synchronize的方法Java多线程:驾驭Synchronize的方法
Java多线程:驾驭Synchronize的方法yiditushe
 
并发编程实践
并发编程实践并发编程实践
并发编程实践longhao
 
线程编程方面
线程编程方面线程编程方面
线程编程方面yiditushe
 
Strace debug
Strace debugStrace debug
Strace debugluo jing
 
台南好想工作室-想知道講座-ES6 進入天堂的窄門Promise
台南好想工作室-想知道講座-ES6 進入天堂的窄門Promise台南好想工作室-想知道講座-ES6 進入天堂的窄門Promise
台南好想工作室-想知道講座-ES6 進入天堂的窄門PromiseZenChou2
 
分布式系统缓存设计
分布式系统缓存设计分布式系统缓存设计
分布式系统缓存设计zhujiadun
 
分布式系统缓存设计
分布式系统缓存设计分布式系统缓存设计
分布式系统缓存设计aleafs
 
180518 ntut js and node
180518 ntut js and node180518 ntut js and node
180518 ntut js and nodePeter Yi
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题yiditushe
 
Android 源码分析 -- (一) Android启动过程
Android 源码分析 -- (一) Android启动过程Android 源码分析 -- (一) Android启动过程
Android 源码分析 -- (一) Android启动过程manateew
 
由一个简单的程序谈起――之二
由一个简单的程序谈起――之二由一个简单的程序谈起――之二
由一个简单的程序谈起――之二yiditushe
 

What's hot (20)

Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训
 
Essential oracle security internal for dba
Essential oracle security internal for dbaEssential oracle security internal for dba
Essential oracle security internal for dba
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训
 
NHibernate分享(1) share
NHibernate分享(1) shareNHibernate分享(1) share
NHibernate分享(1) share
 
为10g rac cluster添加节点
为10g rac cluster添加节点为10g rac cluster添加节点
为10g rac cluster添加节点
 
Row Set初步学习V1.1
Row Set初步学习V1.1Row Set初步学习V1.1
Row Set初步学习V1.1
 
Java多线程:驾驭Synchronize的方法
Java多线程:驾驭Synchronize的方法Java多线程:驾驭Synchronize的方法
Java多线程:驾驭Synchronize的方法
 
并发编程实践
并发编程实践并发编程实践
并发编程实践
 
线程编程方面
线程编程方面线程编程方面
线程编程方面
 
Closure
ClosureClosure
Closure
 
Strace debug
Strace debugStrace debug
Strace debug
 
台南好想工作室-想知道講座-ES6 進入天堂的窄門Promise
台南好想工作室-想知道講座-ES6 進入天堂的窄門Promise台南好想工作室-想知道講座-ES6 進入天堂的窄門Promise
台南好想工作室-想知道講座-ES6 進入天堂的窄門Promise
 
分布式系统缓存设计
分布式系统缓存设计分布式系统缓存设计
分布式系统缓存设计
 
分布式系统缓存设计
分布式系统缓存设计分布式系统缓存设计
分布式系统缓存设计
 
180518 ntut js and node
180518 ntut js and node180518 ntut js and node
180518 ntut js and node
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题
 
Android 源码分析 -- (一) Android启动过程
Android 源码分析 -- (一) Android启动过程Android 源码分析 -- (一) Android启动过程
Android 源码分析 -- (一) Android启动过程
 
Java Thread
Java ThreadJava Thread
Java Thread
 
簡單介紹JavaScript計時器
簡單介紹JavaScript計時器簡單介紹JavaScript計時器
簡單介紹JavaScript計時器
 
由一个简单的程序谈起――之二
由一个简单的程序谈起――之二由一个简单的程序谈起――之二
由一个简单的程序谈起――之二
 

Viewers also liked

The right read optimization is actually write optimization
The right read optimization is actually write optimizationThe right read optimization is actually write optimization
The right read optimization is actually write optimizationjames tong
 
My sql ssd-mysqluc-2012
My sql ssd-mysqluc-2012My sql ssd-mysqluc-2012
My sql ssd-mysqluc-2012james tong
 
Evaluating ha alternatives my sql tutorial2
Evaluating ha alternatives my sql tutorial2Evaluating ha alternatives my sql tutorial2
Evaluating ha alternatives my sql tutorial2james tong
 
Understanding performance through_measurement
Understanding performance through_measurementUnderstanding performance through_measurement
Understanding performance through_measurementjames tong
 
我对后端优化的一点想法 (2012)
我对后端优化的一点想法 (2012)我对后端优化的一点想法 (2012)
我对后端优化的一点想法 (2012)james tong
 
我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptxjames tong
 
数据库系统设计漫谈
数据库系统设计漫谈数据库系统设计漫谈
数据库系统设计漫谈james tong
 

Viewers also liked (7)

The right read optimization is actually write optimization
The right read optimization is actually write optimizationThe right read optimization is actually write optimization
The right read optimization is actually write optimization
 
My sql ssd-mysqluc-2012
My sql ssd-mysqluc-2012My sql ssd-mysqluc-2012
My sql ssd-mysqluc-2012
 
Evaluating ha alternatives my sql tutorial2
Evaluating ha alternatives my sql tutorial2Evaluating ha alternatives my sql tutorial2
Evaluating ha alternatives my sql tutorial2
 
Understanding performance through_measurement
Understanding performance through_measurementUnderstanding performance through_measurement
Understanding performance through_measurement
 
我对后端优化的一点想法 (2012)
我对后端优化的一点想法 (2012)我对后端优化的一点想法 (2012)
我对后端优化的一点想法 (2012)
 
我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx
 
数据库系统设计漫谈
数据库系统设计漫谈数据库系统设计漫谈
数据库系统设计漫谈
 

Similar to Enqueue Lock介绍.ppt

4, OCP - oracle networking
4, OCP - oracle networking4, OCP - oracle networking
4, OCP - oracle networkingted-xu
 
4 hibernate对象管理和缓存结构
4 hibernate对象管理和缓存结构4 hibernate对象管理和缓存结构
4 hibernate对象管理和缓存结构Zelin Wang
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture introted-xu
 
Mysql 101014202926-phpapp01
Mysql 101014202926-phpapp01Mysql 101014202926-phpapp01
Mysql 101014202926-phpapp01Bob Huang
 
IOS入门分享
IOS入门分享IOS入门分享
IOS入门分享zenyuhao
 
最新Java技术内存模型
最新Java技术内存模型最新Java技术内存模型
最新Java技术内存模型yiditushe
 
10, OCP - flashback
10, OCP - flashback10, OCP - flashback
10, OCP - flashbackted-xu
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a databaseted-xu
 
下一代虚拟存储解决方案:Vaai
下一代虚拟存储解决方案:Vaai下一代虚拟存储解决方案:Vaai
下一代虚拟存储解决方案:VaaiITband
 
redis实现分布式锁.pptx
redis实现分布式锁.pptxredis实现分布式锁.pptx
redis实现分布式锁.pptxrocx1231
 
基于Lucene的站内搜索
基于Lucene的站内搜索基于Lucene的站内搜索
基于Lucene的站内搜索fulin tang
 
基于Lucene的站内搜索
基于Lucene的站内搜索基于Lucene的站内搜索
基于Lucene的站内搜索fulin tang
 
網站設計100步
網站設計100步網站設計100步
網站設計100步evercislide
 
数据库性能诊断的七种武器
数据库性能诊断的七种武器数据库性能诊断的七种武器
数据库性能诊断的七种武器Leyi (Kamus) Zhang
 
丁原:海量数据迁移方案
丁原:海量数据迁移方案丁原:海量数据迁移方案
丁原:海量数据迁移方案YANGL *
 
第8章 运行时的存储管理
第8章 运行时的存储管理第8章 运行时的存储管理
第8章 运行时的存储管理tjpucompiler
 
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recoveryted-xu
 
Head first in xmemcached yanf4j
Head first in xmemcached yanf4jHead first in xmemcached yanf4j
Head first in xmemcached yanf4jwavefly
 

Similar to Enqueue Lock介绍.ppt (20)

4, OCP - oracle networking
4, OCP - oracle networking4, OCP - oracle networking
4, OCP - oracle networking
 
4 hibernate对象管理和缓存结构
4 hibernate对象管理和缓存结构4 hibernate对象管理和缓存结构
4 hibernate对象管理和缓存结构
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture intro
 
Mysql 101014202926-phpapp01
Mysql 101014202926-phpapp01Mysql 101014202926-phpapp01
Mysql 101014202926-phpapp01
 
IOS入门分享
IOS入门分享IOS入门分享
IOS入门分享
 
最新Java技术内存模型
最新Java技术内存模型最新Java技术内存模型
最新Java技术内存模型
 
10, OCP - flashback
10, OCP - flashback10, OCP - flashback
10, OCP - flashback
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a database
 
下一代虚拟存储解决方案:Vaai
下一代虚拟存储解决方案:Vaai下一代虚拟存储解决方案:Vaai
下一代虚拟存储解决方案:Vaai
 
redis实现分布式锁.pptx
redis实现分布式锁.pptxredis实现分布式锁.pptx
redis实现分布式锁.pptx
 
基于Lucene的站内搜索
基于Lucene的站内搜索基于Lucene的站内搜索
基于Lucene的站内搜索
 
基于Lucene的站内搜索
基于Lucene的站内搜索基于Lucene的站内搜索
基于Lucene的站内搜索
 
網站設計100步
網站設計100步網站設計100步
網站設計100步
 
数据库性能诊断的七种武器
数据库性能诊断的七种武器数据库性能诊断的七种武器
数据库性能诊断的七种武器
 
Linux chapt3
Linux chapt3Linux chapt3
Linux chapt3
 
丁原:海量数据迁移方案
丁原:海量数据迁移方案丁原:海量数据迁移方案
丁原:海量数据迁移方案
 
Javascript 闭包
Javascript 闭包Javascript 闭包
Javascript 闭包
 
第8章 运行时的存储管理
第8章 运行时的存储管理第8章 运行时的存储管理
第8章 运行时的存储管理
 
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery
 
Head first in xmemcached yanf4j
Head first in xmemcached yanf4jHead first in xmemcached yanf4j
Head first in xmemcached yanf4j
 

More from james tong

Migrating from MySQL to PostgreSQL
Migrating from MySQL to PostgreSQLMigrating from MySQL to PostgreSQL
Migrating from MySQL to PostgreSQLjames tong
 
Oracle 性能优化
Oracle 性能优化Oracle 性能优化
Oracle 性能优化james tong
 
Cap 理论与实践
Cap 理论与实践Cap 理论与实践
Cap 理论与实践james tong
 
Scalable system operations presentation
Scalable system operations presentationScalable system operations presentation
Scalable system operations presentationjames tong
 
Benchmarks, performance, scalability, and capacity what s behind the numbers...
Benchmarks, performance, scalability, and capacity  what s behind the numbers...Benchmarks, performance, scalability, and capacity  what s behind the numbers...
Benchmarks, performance, scalability, and capacity what s behind the numbers...james tong
 
Stability patterns presentation
Stability patterns presentationStability patterns presentation
Stability patterns presentationjames tong
 
Troubleshooting mysql-tutorial
Troubleshooting mysql-tutorialTroubleshooting mysql-tutorial
Troubleshooting mysql-tutorialjames tong
 
设计可扩展的Oracle应用
设计可扩展的Oracle应用设计可扩展的Oracle应用
设计可扩展的Oracle应用james tong
 
Oracle数据库体系结构简介.ppt
Oracle数据库体系结构简介.pptOracle数据库体系结构简介.ppt
Oracle数据库体系结构简介.pptjames tong
 
Cassandra简介.ppt
Cassandra简介.pptCassandra简介.ppt
Cassandra简介.pptjames tong
 

More from james tong (10)

Migrating from MySQL to PostgreSQL
Migrating from MySQL to PostgreSQLMigrating from MySQL to PostgreSQL
Migrating from MySQL to PostgreSQL
 
Oracle 性能优化
Oracle 性能优化Oracle 性能优化
Oracle 性能优化
 
Cap 理论与实践
Cap 理论与实践Cap 理论与实践
Cap 理论与实践
 
Scalable system operations presentation
Scalable system operations presentationScalable system operations presentation
Scalable system operations presentation
 
Benchmarks, performance, scalability, and capacity what s behind the numbers...
Benchmarks, performance, scalability, and capacity  what s behind the numbers...Benchmarks, performance, scalability, and capacity  what s behind the numbers...
Benchmarks, performance, scalability, and capacity what s behind the numbers...
 
Stability patterns presentation
Stability patterns presentationStability patterns presentation
Stability patterns presentation
 
Troubleshooting mysql-tutorial
Troubleshooting mysql-tutorialTroubleshooting mysql-tutorial
Troubleshooting mysql-tutorial
 
设计可扩展的Oracle应用
设计可扩展的Oracle应用设计可扩展的Oracle应用
设计可扩展的Oracle应用
 
Oracle数据库体系结构简介.ppt
Oracle数据库体系结构简介.pptOracle数据库体系结构简介.ppt
Oracle数据库体系结构简介.ppt
 
Cassandra简介.ppt
Cassandra简介.pptCassandra简介.ppt
Cassandra简介.ppt
 

Enqueue Lock介绍.ppt

  • 1. Enqueue Lock 介绍 [email_address] http://www.dbthink.com/
  • 2.
  • 3.
  • 4.
  • 5. Enqueue Lock 模式 模式 内部编号 模式值 描述 ( 以 DML 为例来说明 ) Null KSQMNull 1 Null 模式 , 不妨碍任何并发访问 , 主要用来作为 Cache Invalidate 的通知机制存在 SS KSQMSS 2 SubShare 模式 , 使用共享模式锁住一条记录 SX KSQMSX 3 SubExclusive 模式 , 使用独占模式锁住一条记录 S KSQMS 4 共享模式 SSX KSQMSSX 5 Share,SubExclusive, 对表持有共享锁 , 对其中的记录持独占模式 X KSQMX 6 Exclusive 模式 , 对全表持独占模式
  • 6. Enqueue 模式兼容性 请求 / 占用 Null SS SX S SSX X Null Yes Yes Yes Yes Yes Yes SS Yes Yes Yes Yes Yes No SX Yes Yes Yes No No No S Yes Yes No Yes No No SSX Yes Yes No No No No X Yes No No No No No
  • 7.
  • 9.
  • 10.
  • 11. 获取 Enqueue Lock 的步骤 (2)
  • 12.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.

Editor's Notes

  1. 其他锁的类型 , 可参考 www.akadia.com/download/documents/session_ wait _ events .pdf 如果数据库版本为 11g 及以上 , 可以查询试图 v$lock_type 来得到 .
  2. Enqueue resource 结构由参数 enqueue_resources 确定 , 此值为一个初始值 , 其内容可通过 x$ksqrs (Kernel Service enQueue ReSource) 或者 v$resource 来查询 Enqueue lock 结构由隐含参数 _enqueue_locks 确定 , 此值在系统启动后不可更改 , 其内容可通过 x$ksqlk (Kernel Service enQueue LocK) 或 v$enqueue_lock 来查询 . Enqueue Resource 的资源结构由 Latch “enqueue hash chain” 来控制访问 . Enqueue Lock 的锁结构由 Latch “enqueues” 来控制访问 这两种资源的使用情况以及数量限制可通过查询 v$resource_limit 来获得 .
  3. Hash Bucket 的数量由参数 _enqueue_hash 控制 , 默认根据文件数 ,session 数据计算而来 . _enqueue_hash = 45 + 2 * ( PROCESSES + trunc(PROCESSES/10) ) 摘自 Steve Adams (Oracle 8i Internal Service,Page 50). 管理此 Hash Chain 的 Latch 为 enqueue hash chains,child latch 的数量由参数 _enqueue_hash_chain_latches 控制 , 默认值为 CPU 个数
  4. 操作 Enqueue Resource 都需要获取 enqueue hash chains latch. 操作 Enqueue Lock 都需要获取 enqueues latch
  5. 在释放完毕 Enqueue Lock 之后 , 如果有 converter , 则先通知 converter, 否则通知最早等待的那个 waiter.
  6. 我自己测试一般都是 Alter session set events ‘10704 trace name context forever , level 10’;
  7. 内容摘自 www.dbthink.com/?p=452 相关过程我自己做了测试 . 下面是持有锁的时间顺序 Lock table in SubShare mode Lock table in Share mode (very short time if not been blocked by others) Lock table in subShare mode Processing index rebuild Lock table in Share mode (very short time if not been blocked by others) Lock journal table in Exclusive mode (drop the journal table)
  8. select * from v$lock where sid in (10,14); ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK 173D44A8 173D45B4 10 TX 262174 5398 6 0 37 1 17377074 17377088 10 TM 6279 0 3 0 37 0 173770F8 1737710C 14 TM 6279 0 3 0 22 0 17AE7288 17AE7298 14 TX 262174 5398 0 6 22 0 select sid,seq#,event,p1text,p1raw,p2text,p2,p3text,p3 from v$session_wait where sid in (14); SID SEQ# EVENT P1TEXT P1RAW P2TEXT P2 P3TEXT P3 14 17112 enqueue name|mode 54580006 id1 262174 id2 5398
  9. select * from v$lock where sid in (10,14) ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK 173D44A8 173D45B4 10 TX 589835 6969 6 0 16 1 17377074 17377088 10 TM 6279 0 3 0 16 0 173ADA20 173ADB2C 14 TX 196633 6878 6 0 10 0 173770F8 1737710C 14 TM 6279 0 3 0 10 0 17AE7288 17AE7298 14 TX 589835 6969 0 4 10 0 select sid,seq#,event,p1text,p1raw,p2text,p2,p3text,p3 from v$session_wait where sid in (14); SID SEQ# EVENT P1TEXT P1RAW P2TEXT P2 P3TEXT P3 14 17225 enqueue name|mode 54580004 id1 589835 id2 6969
  10. 创建一个 maxtrans 为 2 的表 , 表上的最小事务槽数量是 2 create table james_itl (id number,value varchar2(20)) maxtrans 2; 2. 往表中插入一定量的数据 , 找到 3 条位于同一 block 的记录 .( 比如 id 为 1,2,3 的三条记录 ) select rownum,dbms_random.string('l',15) from dual connect by level <= 1e3; select dbms_rowid.rowid_block_number(rowid) block_no,id,value from james_itl where rownum <= 5; BLOCK_NO ID VALUE 4701 1 dycxkqfjwnfmjcn 4701 2 irujlsgaesqsifx 4701 3 iujdkpwocphgewc 4701 4 clxxlwytqxvoufq 4701 5 oodfrpbgqpxybnh 3. 在三个不同的 session 分别更新这 3 条记录 session 1 Update james_itl set value = ‘test 1’ where id =1; Session 2 Update james_itl set value = ‘test 2’ where id = 2; Session 3 Update james_itl set value = ‘test 3’ where id = 3; 4. 通过 v$lock,v$session_wait 检查锁的级别 select * from v$lock where sid in (10,13,14); ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK 173D40CC 173D41D8 10 TX 196647 6879 6 0 58 1 17377074 17377088 10 TM 6391 0 3 0 58 0 1737717C 17377190 13 TM 6391 0 3 0 54 0 17AE7288 17AE7298 13 TX 196647 6879 0 4 50 0 173ADA20 173ADB2C 14 TX 393226 4744 6 0 56 0 173770F8 1737710C 14 TM 6391 0 3 0 56 0 select sid,seq#,event,p1text,p1raw,p2text,p2,nvl(p3text,'xx') p3text,p3 from v$session_wait where sid in (10,14,13); SID SEQ# EVENT P1TEXT P1RAW P2TEXT P2 P3TEXT P3 13 66 enqueue name|mode 54580004 id1 196647 id2 6879 10 35567 SQL*Net message from client driver id 42455100 #bytes 1 xx 0 14 17472 SQL*Net message from client driver id 42455100 #bytes 1 xx 0
  11. 测试方式 : 在一个 uniform size 较小 ( 例如 128k) 的表空间中创建一个行记录本身很大的表 . 在几个 Session 同时对此表做大批量的数据插入操作 . 检查 v$enqueue_stat 查看 hw enqueue 的发生情况 Create tablespace test_128k datafile ‘ +datadatafile est_128k01.dbf’ size 1024m Extent management local uniform size 128k; Create table james_128k (id number,col1 varchar2(4000),col2 varchar2(4000),col3 varchar2(4000),col4 varchar2(4000)) tablespace test_128k; 在几个 session 中同时执行下面的插入语句 . Insert into james_128k Select rownum id,dbms_random.string(‘l’,4000) col1, dbms_random.string(‘l’,4000) col2, dbms_random.string(‘l’,4000) col3, dbms_random.string(‘l’,4000) col4 From dual Connect by level <= 1e5;
  12. *1 select segment_id,segment_name from dba_rollback_segs;
  13. 在 session 1 中创建全局临时表 , 并执行 dml 插入部分数据到临时表中 create global temporary table james_to on commit preserve rows as select * from obj; 2. 在 session 2 中对此临时表分别执行插入 ,truncate 以及在此表上创建索引的操作 . 对应的锁等待如下所示 Insert into james_to select * from obj; ksqcmi: TM,18e0,0 mode=3 timeout=21474836 ksqcmi: returns 0 *** 2010-07-25 21:43:06.000 ksqcmi: TO,18e0,1 mode=3 timeout=21474836 ksqcmi: returns 0 对此表执行 drop 操作 *** 2010-07-25 21:44:08.000 ksqcmi: TO,18e0,1 mode=6 timeout=0 ksqcmi: returns 51 对此表执行创建索引操作 ksqcmi: TO,18e0,1 mode=4 timeout=0 ksqcmi: returns 51
  14. select * from v$lock where sid in (13); ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK 17AE7288 17AE7298 13 JQ 0 3 6 0 272 0 select * from dba_jobs_running; SID JOB FAILURES LAST_DATE LAST_SEC THIS_DATE THIS_SEC INSTANCE 13 3 07/25/2010 23:58:24 23:58:24 0