dlm latches
实例锁(instance locks)用于实例内部的锁及ops实例的通讯.sga每个部分对应的数据结构,就需要instance locks.一系列的latchwks保护这些结构.
oracle8.0中,这些latch的统计信息可以查询v$dlm_latch.从oracle8.1开始,dlm(distributed lock manager) latching statistics合并到了v$latch中.
advanced latching control
一些os支持多处理器(处理)控制的工具(功能)。授权或超级用户就可以在不同方式下影响它的cpu调度机制.只要可以,oracle可以确定的多处理器控制特征。
如下特征影响latching 机制.
preemption control --抢占,优先控制
允许oracle在进行非常重要的性能操作情况下,暂停正常的os process,当它持有一个latch时。这意味着oracle process继续使用cpu运行直至显示开启preemption机制,或者
出现如i/o请求操作的os event,信号量操作,或页中断(page fault).这个进程不能在最后的时间片,被更高优化级的进程预先抢占,在分时优先级调度情况下.这意味着latch保护的操作
会快速完成,latch contention的风险会大为减少.如果oracle使用preemption control,默认是开启的,除非使用了_no_preempt参数.
cpu yielding
oracle进程在spin期间会让出cpu。如果有另一个更高级且运行着的进程可以使用cpu,这个进程就会被调度执行,于是yielding process就会放在run queue的最末端,但它保持状态为runnable.
否则,如没有发现更高级别的进程使用cpu,进程继续spin等待它的latch.用_spin_yield_cpu_freq参数控制oracle以何种频率让出它的cpu(在spinning时),默认值为_spin_count.如开启cpu yielding,
这里两个参数值一样,效果就是:进程将开始一个新的spin,不会等待(如果没有其它进程使用cpu时).因此cpu yielding让oracle processes以更快速度得到latch,不用花费运行着的cpu time(usable cpu time)
affinity control 倾向性控制
用它可以停止/重启开启正常的os affinity 机制(它以低效方式尝试绑定一个进程到最后一个cpu周期上).如果一个进程如前一样运行在相同的cpu上,用于执行的一些内存地址及值对(缓冲行)可能仍旧在cpu的cache中。这就极大减少了cpu对于内存的访问.
因此执行速度更快.但是,所有的进程下正在对于一个latch进行spinning,执行速度更快就没有必要。当进程在等待(持有latch)其它进程需要的资源(就是这个持有latch的进程所占用的latch)时,更早执行比更快执行更有意义.如有可能,oracle
使用affinity control优化 以自动化 方式处理latching.偶尔,为oracle进程绑定特定的处理器,并不建议。否则runnable processes将不会迁移到空闲的cpus上。
oracle使用multi-processing control特征,提升大型,高并发oracle instance的性能。,对于latching的影响最大。但是,在一些os中这些特征用不了,或者普通用户(如oracle用户)的进程使用不了.在大多情况下,这些显式授权配置不是持续性的,因此必把它们放在启动脚本中,可以查看mpctl() system control,就知道os是否支持multi-processing control特征(对于一些普通用户)
reference
参数 描述
_latch_wait_posting 当所需latch可以用时,进程能否被waken up
_max_exponential_sleep 尝试一次get latch,sleeps的次数会成倍加大。根据exponential backoff算法,最大到这个参数的值。默认是200 centisecond(8i)
_max_sleep_holding_latch exponential backoff算法下最大允许的sleep(当沉睡进程正持有其它的latch)。默认为4 centiseconds
_no_preempt 配置为true(默认),oracle将使用os的preemption control机制,如果可能的话,当持有一个latch时,要减少进程沉睡的风险
_spin_count 在进程沉睡前(想获得一个latch)执行多少次spinning.在单一cpu为1,在多处理器下为2000
_spin_yield_cpu_freq 控制oracle进程以何种频率提交(让出)cpu资源(当进程处于spin中).如果发现一个高优先级的进程,它就被调度。yielding进程被放于run queue的末端(非沉睡).默认是_spin_count
statistics
统计列 数据源 描述
immediate gets v$latch no-wait mode下成功执行latch get request次数
immediate misses v$latch 与上相反
gets v$latch 乐观模式已完成(结束)的得到latch的次数
misses v$latch gets的个数(限于requested latch正被使用)
simple gets gets-misses 不用等待已完成的gets个数
spin gets v$latch spinning时得到latch的gets次数,但没有sleep
sleep gets misses-spin gets 需要一个或多个sleeps的gets个数
spin get rare 100*spin gets/misses spinning效力的度量
spin cost _spin_count*sleeps/misses spinning成本的度量
sleeps v$latch 进程等待某个latch的sleep次数
sleep1 v$latch 曾经sleep的gets次数
sleep2 v$latch 再次sleep的gets次数
sleep3 v$latch 三次sleep的gets次数
sleep4 v$latch 四次
sleep rate 100*sleep/gets 度量latch contention的严重程度
sleep impact sleep的2次方/sleep gets 从总体性能上评估latch sleeps的相对影响
waiters woken v$latch 由于latch wait posting机制,waiter接到多少次通知
waits holding latch v$latch 持有latch的进程等待某个事件的次数
waits
事件 描述
latch activity 一个进程多次请求一个latch皆失败,会执行它,检查是否latch cleanup有必要.这种等待会发生于the activity test和等待latch cleanup时侯
latch free latch free waits仅仅只是另一个latch的沉睡
wait for dlm latch 对应于latch free waits,但只是针对dlm latches
wait for influx dlm latch latch recovery 所需的dml latch
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9240380/viewspace-660159/
,如需转载,请注明出处,否则将追究法律责任。