fine-grained locking
没有通过gc_files_to_locks及gc_rollback_locks分配任何hashed lock的数据文件和rollback segments,或者没有显式提供lock elements,使用
fine-grained locking,除非定义一个替代的默认bucket(bucket 0).在fine-grained locking中,每个数据块是由一系列未分配的releasable lock elements的一个专有lock
element来保护的.因为任何时间一个数据块仅仅只会被每个lock element保护,fine-grained locking也叫dba(data block address)数据块地址locking.fine-grained locking也用于
所有的block classes块类,而不仅仅是数据块和rollback segment blocks.这些所谓的次级(次要,二流的)minor块类型包括:segment header blocks,free list blocks及extent map blocks.
如果fine-grained locking用于某些数据文件,假如重要的次级块类如:segment header block经常会从buffer cache中老化,这些块的lock elements可以被重用,这会发生于这些块再次被读取之前.
这可能导致实例锁获取和资源分配的过重成本或负荷.对于这种情况,为了提升实例锁的持有性能,你应该考虑为这些次级的块级类型,在每一个独立的bucket中,保留一些lock elements,这个是通过配置
_gc_class_locks参数.
the lock element free list
当与fine-grained locking相关的一个block被放入到缓存中,会向一个hash table咨询,为了确定块的一个lock element是否被保护preserved.这是在kcl name table latch保护进行的.如有必要,
一个lock element会从lock element lru chain的lru(least recently used)末端来分配,这一切是受kcl freelist latch所保护.注意:虽然这个latch的名字,这个latch所保护的一个数据结构就是一个
包含空闲(未用)和在用的lock element的lru chain.这个术语,lock element free list,它只是lock element lru chain末端的一系列自由lock elements (free lock element)的另一个名字.
在大多数情况下,一直使得free list的lock element可用,这是最好的或最合适的.x$kclfx包括一些free list 统计信息.特别的是,lwm列包含free list length 自由列表长度的low-water mark(译为:低水位线标志).
lock elements会返回到lru chain 的末端mru(most recently used),当它们所保护的buffer被重用时.如果被保护的块被放入到cache,之后lock element被重用,lock element可以从free list中被回收.
在超大内存数据库环境下(vlm),拥有更少的lock element比在fine-grained locking环境所对应的cache buffer数量,这样会更合理.不是说这里没有充足的内存给lock elements和实例锁,而是说拥有大量的实例锁会极大扩展
或加大实例锁重新分配情况下的降低了可用性的时间范围或周期.在这种情况下,指定的lock elements根据所需要会以lru 次序进行重用.如果一个lock element准备重用时,有一个进程必须等待(has to wait),它会等待一个global
cache freelist wait.这个等待事件的唯一参数就是lock element number.
pcm lock acquisition
当一个块被放入缓存中,buffer cache lru chain中的一个buffer会被选中进行重用,会话分配一个buffer 句柄和这个buffer一起工作work with.首先它必须从lock element 中的buffer header中取消链接unlink,这个buffer header会保存被保护的以前的缓存的块, 如要可能的话.
然后,它必须链接buffer header和这个新块的lock element.这些操作是在基于这个lock element的kcl lock element parent latch保护中进行的.
如果配置了多个lckn进程,lock element array会在这些lckn进程间进行分配或叫分割,每个独立的一系列的lock element parent latches用于每个分区.每个set中latch数量是由_gc_latches来定义的,默认它是cpu count的2倍.
当然,除了仅仅链接一个新块的buffer和它的lock element的工作外,还有更多的事要作.特别的是,一个正确模式的pcm 实例锁需要在lock element上获取.(也就是获取lock element的pcm instance lock).lckn后台进程实行这个任务或工作.对于
fine-grained locks,它们也必须release实例锁和先前这个lock element所持有的资源.
当一个前台进程需要获取或转化一个特定的lock element的一个pcm instance lock时,它分配一个名叫lock context object锁上下文对象的结构.这个lock context object被链接到lock element,完全或可以足够描述或记录所执行的操作了.
前台进程然后给lckn进程发一个通知,等待lckn进程完成locking 操作和清理lock context object.
当前台进程等待lckn进程获取一个锁时,它会在global cache lock waits上进行沉睡.这些等待事件(前面)的超时是秒.
wait parameters(global cache lock waits)
参数 描述
p1 数据块的文件编号
p2 文件中数据块的块号
p3 lock element编号,或者次级块锁获取的块类型
当一个进程等待一个global cache lock wait,因为一个blocking lock被一个远程实例持有,具体细节可以查看gv$dlm_locks.这个资源名字是由锁类型和两个锁标识来构成的.对于pcm instance lock的锁类型是bl(block lock).第一个标识是hased locking的lock element编号,
对于fine-grained locking是数据块地址dba.第二个标识就是块的类型,具体如下:
block class块类型 class description类型描述
1 data blocks
2 sort blocks
3 deferred rollback segemnt blocks
4 segment header blocks
5 deferred rollback segment header blocks
6 free list blocks
7 extent map blocks
8 space management bitmap blocks
9 space management index blocks
10 unused
11+2r segment header block for rollback segment r
12+2r data blocks for rollback segment r
没有通过gc_files_to_locks及gc_rollback_locks分配任何hashed lock的数据文件和rollback segments,或者没有显式提供lock elements,使用
fine-grained locking,除非定义一个替代的默认bucket(bucket 0).在fine-grained locking中,每个数据块是由一系列未分配的releasable lock elements的一个专有lock
element来保护的.因为任何时间一个数据块仅仅只会被每个lock element保护,fine-grained locking也叫dba(data block address)数据块地址locking.fine-grained locking也用于
所有的block classes块类,而不仅仅是数据块和rollback segment blocks.这些所谓的次级(次要,二流的)minor块类型包括:segment header blocks,free list blocks及extent map blocks.
如果fine-grained locking用于某些数据文件,假如重要的次级块类如:segment header block经常会从buffer cache中老化,这些块的lock elements可以被重用,这会发生于这些块再次被读取之前.
这可能导致实例锁获取和资源分配的过重成本或负荷.对于这种情况,为了提升实例锁的持有性能,你应该考虑为这些次级的块级类型,在每一个独立的bucket中,保留一些lock elements,这个是通过配置
_gc_class_locks参数.
the lock element free list
当与fine-grained locking相关的一个block被放入到缓存中,会向一个hash table咨询,为了确定块的一个lock element是否被保护preserved.这是在kcl name table latch保护进行的.如有必要,
一个lock element会从lock element lru chain的lru(least recently used)末端来分配,这一切是受kcl freelist latch所保护.注意:虽然这个latch的名字,这个latch所保护的一个数据结构就是一个
包含空闲(未用)和在用的lock element的lru chain.这个术语,lock element free list,它只是lock element lru chain末端的一系列自由lock elements (free lock element)的另一个名字.
在大多数情况下,一直使得free list的lock element可用,这是最好的或最合适的.x$kclfx包括一些free list 统计信息.特别的是,lwm列包含free list length 自由列表长度的low-water mark(译为:低水位线标志).
lock elements会返回到lru chain 的末端mru(most recently used),当它们所保护的buffer被重用时.如果被保护的块被放入到cache,之后lock element被重用,lock element可以从free list中被回收.
在超大内存数据库环境下(vlm),拥有更少的lock element比在fine-grained locking环境所对应的cache buffer数量,这样会更合理.不是说这里没有充足的内存给lock elements和实例锁,而是说拥有大量的实例锁会极大扩展
或加大实例锁重新分配情况下的降低了可用性的时间范围或周期.在这种情况下,指定的lock elements根据所需要会以lru 次序进行重用.如果一个lock element准备重用时,有一个进程必须等待(has to wait),它会等待一个global
cache freelist wait.这个等待事件的唯一参数就是lock element number.
pcm lock acquisition
当一个块被放入缓存中,buffer cache lru chain中的一个buffer会被选中进行重用,会话分配一个buffer 句柄和这个buffer一起工作work with.首先它必须从lock element 中的buffer header中取消链接unlink,这个buffer header会保存被保护的以前的缓存的块, 如要可能的话.
然后,它必须链接buffer header和这个新块的lock element.这些操作是在基于这个lock element的kcl lock element parent latch保护中进行的.
如果配置了多个lckn进程,lock element array会在这些lckn进程间进行分配或叫分割,每个独立的一系列的lock element parent latches用于每个分区.每个set中latch数量是由_gc_latches来定义的,默认它是cpu count的2倍.
当然,除了仅仅链接一个新块的buffer和它的lock element的工作外,还有更多的事要作.特别的是,一个正确模式的pcm 实例锁需要在lock element上获取.(也就是获取lock element的pcm instance lock).lckn后台进程实行这个任务或工作.对于
fine-grained locks,它们也必须release实例锁和先前这个lock element所持有的资源.
当一个前台进程需要获取或转化一个特定的lock element的一个pcm instance lock时,它分配一个名叫lock context object锁上下文对象的结构.这个lock context object被链接到lock element,完全或可以足够描述或记录所执行的操作了.
前台进程然后给lckn进程发一个通知,等待lckn进程完成locking 操作和清理lock context object.
当前台进程等待lckn进程获取一个锁时,它会在global cache lock waits上进行沉睡.这些等待事件(前面)的超时是秒.
wait parameters(global cache lock waits)
参数 描述
p1 数据块的文件编号
p2 文件中数据块的块号
p3 lock element编号,或者次级块锁获取的块类型
当一个进程等待一个global cache lock wait,因为一个blocking lock被一个远程实例持有,具体细节可以查看gv$dlm_locks.这个资源名字是由锁类型和两个锁标识来构成的.对于pcm instance lock的锁类型是bl(block lock).第一个标识是hased locking的lock element编号,
对于fine-grained locking是数据块地址dba.第二个标识就是块的类型,具体如下:
block class块类型 class description类型描述
1 data blocks
2 sort blocks
3 deferred rollback segemnt blocks
4 segment header blocks
5 deferred rollback segment header blocks
6 free list blocks
7 extent map blocks
8 space management bitmap blocks
9 space management index blocks
10 unused
11+2r segment header block for rollback segment r
12+2r data blocks for rollback segment r
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-660695/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9240380/viewspace-660695/