ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Rac performance tuning tips

Rac performance tuning tips

原创 Linux操作系统 作者:flying_warrior 时间:2011-02-22 19:37:44 0 删除 编辑
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE大部分来自官方SG 。

Gc current block 2-way:

 

1.Sga 1 发送请求道SGA2 request block  SGA1 产生gc current block request .

2.SGA2 检查这个block是否被改变 如果已被改变的话LMS  则会要求LGWR redo log  (这时SGA1 会显示busy  然后传送。

3.SGA2 发送NODE 并产生Gc current block 2-way 等待 直到BLOCK 发送到SGA1 等待终结。

当发送NODE 过程中 对这个block的请求将会产生 GC buffer busy.

 

3 way: 就是多一个节点  resource MASTER cached 节点不是同一个及诶单。

 

Lost block :

可能跟OS 和网络配置参数相关 比如 SIDE message block先到。  减小 multiblock read count 16以下 可以避免发生这样的事情。

 

Enqueue Waits :

                Enqueue 是序列化的

                        RAC 中是全局资源

                                               大多数频繁的等待可能是 HW TA SQ TX TM US

这并不是RAC专属 但是当应用RAC的时候会出现全局资源锁。

SELECT * FROM gv$enqueue_statistics WHERE eq_type='TX' 这个视图可以检查各种资源争用的程度。

select * FROM gv$instance_cache_transfer 可以知道block级的transfer

 

 

v$segment_statistics 是一个十分有效的用来确定哪个object CR 争用特别多的 视图。

 

RAC 相关的统计可以分类为:

全局cache service 统计:gc cr blocks received ,gc cr block receive time etc..

全局队列 service global enqueue gets and so on.

Message sentgcs messages sent 我擦…… 我还不知道这是啥呢……

 

 

 

RAC 调优Tips

APPLICATION 是最重要的.

重置调整 buffer cache 的大小(看起来意为缩小 这样可以减少cache fusion {想起来还真惭愧 当初上RAC的时候我还希望能调大cache size 只是为了减少使用裸设备后缺失文件系统的影响}

减少大的全表扫描(OLTP

使用自动段空间管理(?????)谁给我个解释 这句话怎么翻译(我的翻译是  ASSM 可以使block 尽量的粘黏实例)

ASSM  can provide instance affinity to table blocks.

 

增加sequence cache

sequence用作生成主键时,容易造成索引块的竞争。增大sequencecache值,有利于减少索引块的竞争,提高leaf blockinstance affinity

同时sequence next 的时候如果需要再次获取 则会修改数据字典 同时造成row cache lock.


oracle为了管理sequence使用了以下三种锁
*row cache lock
:调用sequence.nextval过程中(nocache)
* SQ
: 调用sequence.nextval过程中(cache+noorder)
* SV
锁(dfs lock handel) RAC上节点之间顺序得到保障的的前提下,调用sequence.nextval期间拥有。赋予了cache + order属性的sequence上发生。 (cache+order)

创建sequence赋予的cache值较小时,有enq:sq-contention等待增加的趋势。cache的默认缺省值是20.因此创建使用量多 的sequence时,cacheh值应取1000以上的较大值。偶尔一次性同时创建多个会话时,有时发生enq:sq-contention等待事件。 其理由是v$session.audsid列值是利用sequnce创建的,许多会话同时连接时,可以将sys.audses$sequence cache大小扩大至1000,以此解决enq:sq-contention等待问题。
Rac
上创建sequence时,在赋予了cache属性的状态下,若没有赋予order属性,则各节点将会把不同范围的sequencecache到内存上。

在此处顺便讲解library cache and row cache

这两个东西是global级的东西 所以 如果过度解析的话 那么会增加interconnect 的负担。比如说PL/SQL AQ recompile package的时候。

这个时候请顺便考虑 自生成主键(通过一张表记录高低位等方式)的话……这个block就……

 

使用partition 。(Hash partition 可能会减少 buffer busy 并且将block 分布的更均匀 便于并发访问)

避免不必要的解析

减少锁的使用

 

减少没必要的索引(因为没必要的索引不但会增加 block 互相传递的负担 还有索引leaf or brach block分裂所造成的等待)。

还有索引tree太深 的话会对root block

 

                                                

为了避免索引分裂,一个统一,不倾斜的索引结构将是很好的解决办法:

Global index partition

增加sequence cache 大小。

(打个比方 如果拿到的都是low value的话  会导致反复的修改一个索引的block 所以……想想吧。)

 

Undo Block的思考:

 

当一个查询视图查看一个active transactionblock的时候 恰好这个block中的内容有多个activetransaction 比如说一个table2行记录被2instance 修改了。  那么就会读取两个instanceundo merge record。通常发生在更新和查询非常频繁的表上。

 

解决思路:

            短事物

            增大sequence 来减少索引block的争用 (一样的道理)

RAC 远程undo的维护很痛苦。

 

HW - contention

一般都是插入多了 然后找空闲空间的时候就发生这个:

Enq :HW – contention

Gc current grant

前面的不用解释了就是扩展段  后面的是就是扩展出来的新块 被这个操作需求的时候发生的lock(这个很少会发生争用 毕竟2insert 不会需求相同的块)。

 

 

Thanks.

---------------------------------------

魏龙飞(DBA

Mobile:13564289208

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21818314/viewspace-687731/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-06-21

  • 博文量
    49
  • 访问量
    78944