基于LINUX的Oracle 10G RAC管理维护学习手记之六–RAC监控优化

基于LINUXOracle 10G RAC管理维护学习手记之前言目录

基于LINUXOracle 10G RAC管理维护学习手记之一――RAC相关以及基础知识

基于LINUXOracle 10G RAC管理维护学习手记之二―――RAC规划安装

基于LINUXOracle 10G RAC管理维护学习手记之三(上)―――RAC日常管理维护

基于LINUXOracle 10G RAC管理维护学习手记之三(下)―――RAC日常管理维护

基于LINUXOracle 10G RAC管理维护学习手记之四―――RAC故障/负载平衡配置

基于LINUXOracle 10G RAC管理维护学习手记之五―――RAC下其他维护实施相关/案例

基于LINUXOracle 10G RAC管理维护学习手记之六―――RAC性能监控调整

基于LINUXOracle 10G RAC管理维护学习手记之七―――其他Troubleshooting

1.思路及等待事件说明
    鉴于RAC体系的复杂性,RAC的优化比单实例的优化给我们提出了更高的难度和要求。大部分情况下,单实例上的优化方法在RAC结构下同样适用。
    RAC优化的2个核心问题:

(1).减少shared pool的压力:减少对数据字典的争用,减少硬解析。
    因为row cache/library cache是全局的,频繁的数据字典争用/硬解析在RAC环境下会造成比单实例更严重的性能后果。

(2).减少因Cache fusion带来的全局块传输和争用
    频繁的Cache fusion会带来一系列数据块上的全局争用。如何减少逻辑读,减少数据在实例之间共享传输,是RAC体系对应用设计和部署的新要求
Cache fusion性能是影响RAC系统性能的一个极为重要的方面。Avg global cache cr block receive time和avg global cache current block receive time是cache fusion的两个重要指标,以下是oracle给出的这两个指标的阈值情况:

Name

Lower Bound

Typical

Upper Bound

Avg global cache cr block receive time(ms)

0.3

4

12

Avg global cache current block receive time(ms)

0.3

8

30

RAC下的全局等待事件:
SQL>select * from v$event_name where NAME like ‘gc%’ and WAIT_CLASS=’Cluster’;

10G R2下有40多个非空闲的全局等待时间,最常见的值得引起注意的等待事件如下:
gc current/cr request
该等待事件表示资源从远程实例读取到本地实例所花费的时间。出现该事件并不能说明什么问题,如果等待时间过长,可能表示内联网络存在问题或者有严重的块争用。

gc buffer busy
buffer busy waits在全局上的延伸。出现该等待时间一般可能是块的争用问题。

Enquenue类
RAC中,常见的Enquenue有enq: HW – contention/ enq: TX - index contention/enq等,在跨节点高并发的insert环境中很容易出现。

    诸如gc current-2way/3way.gc current/cr grant等事件,这些事件只是提供了块传输和消息传输方面的细节或是结果,一般情况下无需太投入关注。

2.性能诊断
    性能上的调整很难给出一个定式,但指导思想上可以实现很大方面的统一。
    AWR/ASH等报告可以作为RAC系统中一个强有力的性能采集和诊断工具。同单实例的报告相比,AWR中的RAC Statistics部分给我们提供了详细的GES、GCS性能采样,结合全局等待事件,定位集群问题上的症状。
在RAC结构下,Segment Statistics部分是我们更加需要注意的地方。如果你还是习惯使用STATSPACK来进行性能采集,建议至少将收集级别设置为7。该部分为我们提供了详细的Segment级别的活动情况,有助于我们定位全局的HOT table /HOT index,分析全局资源排队争用的根源。
    要重视DBA_HIS开头的一系列视图的作用,这将帮我们将问题定位的更加细化,甚至定位到SQL级别。糟糕的SQL效率拖垮系统性能的案例比比皆是,这在RAC中往往更加常见。dba_hist_active_sess_history 可以作为很好的切入点,例如通过关联dba_hist_sqltext获得执行文本,通过关联dba_hist_sql_plan获得执行计划树等,有时候将直接找到造成等待事件的元凶。

RAC中常见的争用和解决方法:
① Sequence and index contention
    Sequence是RAC中容易引起争用的一个地方,尤其是以sequence作索引,在高并发的多节点insert情况下极易引起索引块的争用以及CR副本的跨实例传输。
需要尽量增大Sequence的cache值并设置序列为noorder。
② undo block considerations
    RAC下CR的构造比单实例成本要高,如果一个block中的活动事务分布在几个实例上,需要将几个实例上的undo合并构造所需要的CR,尤其是高并发的有索引键的插入,容易造成undo block的争用。
尽量使用小事务处理。
③HW considerations
    跨节点的高并发insert会造成高水位线的争用,采用更大的extent/采用ASSM和分区技术能减缓这一争用。
③ Hot Block
    全局热点块问题对RAC系统的影响巨大,尽量减少块跨实例的并发更改,适当采用分区可以缓解该争用。
    一个良好的应用设计是RAC发挥功力的重要前提,根据不同的节点部署不同的应用,能有效的减少全局资源的争用,对RAC性能的稳定也相当重要。

bookmark

相关文章 随机文章

4 Comments

Michael06月 26th, 2009 at 15:36

Hey, have you seen this news article?
New details about Michael Jackson’s Death Emerge
I was wondering if you were going to blog about this…

lissa07月 8th, 2009 at 17:17

讲的有点粗,再细致点就更好了。

文文07月 14th, 2009 at 08:40

很不错

[...] 基于LINUX的Oracle 10G RAC管理维护学习手记之四--Service.Failover and Load Balance 基于LINUX的Oracle 10G RAC管理维护学习手记之六–RAC监控优化 [...]

Leave a comment

Your comment