Oracle性能调优之降低争用和瓶颈

        接着上篇Oracle性能调优之超越表面分析法,我们接下来将讨论Oracle性能调优之降低争用和瓶颈。在将应用的需求降低到合理的范围后,接下来要考虑处理Oracle服务器内部的争用。有两个或多个会话同时访问一个资源,就会发生争用,如锁争用或内存缓冲区争用。
        在应用的需求涉及数据库时,争用—这个众所周知的“瓶颈”会限制系统可以完成的工作量。从应用的角度看。数据库处理得非常慢.甚至完全没有反应。从更低层面看,例如从磁盘子系统来看,响应请求的速度比它的实际处理速度更慢。争用瓶颈导致IO请求无法通过数据库代码层达到IO子系统。
        在Oracle数据应用中,表内记录的争用(通常表现为锁等待)和共享内存区域的争用(表现为门锁等待、内存缓冲区等待以及诸如此类的等待)是两种最常见的争用行为。
        应用设计是导致锁争用的主要原因:在Oracle的锁机制中.需要读操作永远不等待锁,写操作也永远不用等待读操作,并且只在行级别上应用锁,这样Oracle才可以很好地支持高并发的应用。锁争用发生时一般会涉及大量进程同时更新同一条记录,或者特定的锁持有的时间过长(可能是由于应用使用了悲观锁模型)。在不调整业务逻辑的情况下,这种争用几乎无法消除。此外,有些清况下,数据库配置或模式(Schema )中的问题.或者数据库的内部机制,都可能导致严重的锁争用。
        争用是众所周知的瓶颈。应用对数据库服务的需求,对有限资源或串行资源的争用导致等待与(或)排队,表面上看对底层的需求降低了。
        当多个会话想要同时读写SGA中的共享内存时,会发生共享内存(shared memory)的争用。所有的共享内存都由问锁(latch)来保护。门锁与锁类似,不过它阻止的是对共享内存的并发访问,而锁则防止对表中数据的并发修改。如果会话希望修改内存中的部分数据,它需要取得相关的门锁或者互斤(mutex),如果另一个会话也希望访问或修改同样的数据,也同样需要取得这个门锁或互斥,这样就会发生等待。缓冲区高速缓存(buffer cache)中的数据块也会由于其他一些原因而发生争用,比如当一个内存块因为多个会话的处理请求相互冲突而不可访问时,就会出现大量缓冲区(buffer)等待。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章