library cache lock和library cache pin区别总结

library cache lock和library cache pin区别总结[@more@]

library cache locklibrary cache pin区别总结

library cache lock

library cache pin

共同点

同属于数据字典锁,目的是为了:

1、保持数据字典的一致性

2、为事务提供一致的对象定义视图

锁对象

是为了请求library cache对象句柄

是为了请求library cache数据heap

先后关系

必须先期得到这个锁

必须在得到library cache lock之后才能获得这个锁

获取时间

parse call阶段

call execution阶段

用途

排他模式:

使用在父和子句柄上

共享模式:

使用在所有的依赖关系对象句柄上

NULL模式:

侦察不可用的状态

避免再次重新定位(不是太理解)

共享模式:

1、读取数据的heaps

2、防止依赖对象不被修改

排他模式:

修改数据heaps

锁的使用

1、这里说的对象句柄就是一个资源结构

2、锁结构被动态分配在共享池中

3、类型为LA。。LP

1、这里说的对象句柄就是一个资源结构

2、锁结构被动态分配在共享池中

3、类型为NA。。NP

X

X$KGLLK

X$KGLPN

综述

library cache lock也叫breakable parse lock,是用于控制在请求一个对象句柄锁的library cache的客户端之间的并发性。就是说这个锁就是防止其他的客户端访问同一个对象。这个所还能在library cache上定位一个对象。

这个library cache pin是管理cache的一致。pin一个对象能够造成一个heap载入到内存中,(这里有个疑问难道这个heap就不在内存吗?应该不在,这样这个heaps或许就可以理解为数据字典上的数据了),如果一个客户端修改或者检测一个对象,客户端必须先请求一个library cache lock到相关的句柄上,然后在pin合适的heap

等待事件

library cache lock

library cache pin

等待周期3秒,PMON1

等待周期3秒,PMON1

等待参数

P1:对象句柄地址

P2:锁结构地址

P3100*请求模式+namespace#

P1:对象句柄地址

P2pin地址

P3100*请求模式+namespace#

很少,除了pipes和序列

数据字典锁还有一个类型是row cache locks。这个锁是对应row cache来说的

row cache用途:

1、存储的是数据字典上的行

2、是共享池的一部分

3、减少对于system表空间的物理IO次数

4、使用row cache lock来精确控制数据字典行上的锁

这里需要说明的是对于一个instance来说,都有一个隐含参数来确定row cache lock的多少,缺省为100_ROW_CACHE_INSTANCE_LOCKS

这个锁也有一个等待事件与之对应:row cache lock

这个锁等待周期是3秒,等待1000次之后就会放弃。

P1cache id这个与v$rowcache上的cache#相对应

P2:保持的模式

P3:请求的模式

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/222350/viewspace-925875/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/222350/viewspace-925875/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: library cache lock是Oracle数据库中的一种锁,用于保护共享池中的共享内存区域,以确保多个会话不会同时修改同一块内存。当一个会话正在修改共享池中的某个内存区域时,其他会话需要等待该锁释放后才能访问该内存区域。如果该锁被长时间持有,可能会导致其他会话的性能下降。因此,需要对该锁进行优化和监控。 ### 回答2: library cache lock(库缓存锁)是Oracle数据库中的一种锁机制,用于在共享池(Shared Pool)中保护和管理库缓存(Library Cache)中的共享内存结构。 库缓存是Oracle数据库中存储SQL语句执行计划、存储过程以及其它重要对象的内存区域。在并发环境下,多个会话(Session)可能同时请求某一对象的执行计划或存储过程,为了避免冲突和数据不一致性,需要通过库缓存锁来进行协调。 当一个会话请求某一对象的执行计划或存储过程时,数据库会先检查库缓存中是否已经有该对象的锁。如果该对象的锁已经存在,会话就需要等待,直到之前的会话释放锁。如果该对象的锁不存在,数据库会为当前会话创建一个库缓存锁。当一个会话对某一对象的执行计划或存储过程进行修改时,会话首先获得该对象的库缓存锁,然后可以对该对象进行修改。 库缓存锁的粒度非常细,可以是数据库级别、模式级别、对象级别甚至是子对象级别的。库缓存锁的管理是自动的,由Oracle数据库内部自动分配和释放。 库缓存锁的存在可以保证多个会话在并发访问数据库时的数据一致性和资源的安全性。但是,如果过多的会话同时请求同一个对象的锁,也可能导致性能瓶颈和资源竞争,从而影响数据库的性能和响应速度。 为了减少库缓存锁的竞争,可以通过优化SQL语句、增加共享池大小、调整并发连接数等方式来提高数据库的性能和性能。同时,也可以使用Enable Row-level Locking(启用行级锁)的方式来减少库缓存锁的使用。 ### 回答3: library cache lock是Oracle数据库中的一种锁定机制,用于保护共享SQL和PL/SQL对象在库缓存中的访问。 在Oracle数据库中,库缓存是用于存储数据库的共享SQL和PL/SQL对象的重要组件。它包含了解析树、执行计划、存储过程等重要对象的定义和元数据。多个会话可以同时访问共享的库缓存对象,但在某些情况下,需要使用库缓存锁来保护对象的访问和修改。 当一个会话需要对一个共享的库缓存对象进行修改时,它会请求一个library cache lock。这个锁会阻塞其他会话对同一个对象的修改,直到持有锁的会话完成修改操作并释放锁。这种机制能够确保在并发访问的情况下,库缓存对象的一致性和正确性。 库缓存锁是Oracle数据库中的一种共享锁,意味着它可以被多个会话同时持有。它可以阻止其他会话对同一个对象的并发修改,但不会阻止读取操作。这种锁是为了避免并发访问造成的竞争条件和冲突,确保库缓存中的共享对象的正确性。 库缓存锁是通过Oracle数据库的内部机制自动管理的,用户不需要手动操作。当会话需要修改一个库缓存对象时,数据库会自动分配和管理合适的锁。在执行完修改操作后,会话会自动释放锁,以便其他会话能够继续访问和修改对象。 总之,library cache lock是Oracle数据库中用于保护共享SQL和PL/SQL对象在库缓存中访问的锁定机制。它确保了对象的并发访问的一致性和正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值