ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 探索系列——神人steve adams之著oracle8i interal service(七)

探索系列——神人steve adams之著oracle8i interal service(七)

原创 Linux操作系统 作者:wisdomone1 时间:2010-04-19 16:54:33 0 删除 编辑
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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
提供针对oracle初学者及进阶的数据库培训,欢迎大家咨询: 微信: wisdomone 微信公众号: lovedb 工作经历: 中国普天 北京科蓝 北京云和恩墨 北京神州新桥

注册时间:2008-04-04

  • 博文量
    2189
  • 访问量
    12690170