oracle rac 统计慢,RAC环境下插入速度慢的解决全过程

环境补充一点: 存储是DELL EMC 使用的是RAW

步骤1:分析现象

在2个节点对单表同时插入100万条记录,生成STATSPACK报告TOP EVENTS如下:

Top 5 Timed Events

~~~~~~~~~~~~~~~~~~                                                     % Total

Event                                               Waits    Time (s) Ela Time

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

global cache open x                                 5,795         242    66.25

CPU time                                                           42    11.39

DFS lock handle                                     2,858          38    10.40

global cache null to x                              3,392          13     3.49

log file parallel write                             3,995           7     1.84

登陆METALINK,查找global cache open x 的原因,其中有的是BUG原因,有的是参数原因,由于我的是9.2.0.4.0,基本排除BUG的原因,那么主要问题可能就是出在存储参数上了,下面是我调整参数测试的过程

步骤2  测试过程

1、        删除表空间 hs_bond_data(改表空间使用的LV名称是HS_BOND_DATA01 大小2G)

Drop tablespace hs_bond_data including contents;

2、        用空闲下来的LV新建测试表空间

CREATE TABLESPACE "TBSTEST"

LOGGING

DATAFILE '/dev/vg_rac/rHS_BOND_DATA01' SIZE 2000M EXTENT

MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT  AUTO

3、        建立测试用户和测试表

Sqlplus “/as sysdba”

Create user testtbs identified by testtbs default tablespace TBSTEST temporary tablespace temp;

Grant create session,connect,create procedure to testtbs;

alter user testtbs quota 2000m on tbstest;

Conn testtbs/testtbs

Create table test(col1 varchar2(100),col2 varchar2(100));

4、        建存储过程

create or replace procedure insertxxxx is

begin

for i in 1..1000000 loop

insert into test values('1','1');

end loop;

commit;

end insertxxxx;

5、        在2个接点上分别同时运行该存储过程,记下运行时间

节点1(omsrac1)   65.672s

节点2(omsrac2)   64.329s

单独在节点1运行一个线程

节点1(omsrac1)    38.407s

单独在节点1运行2个线程

节点1(omsrac1)41.141s和41.484s

6、        修改TEST的存储参数后继续第5步的测试

drop table test;

Create table test(col1 varchar2(100),col2 varchar2(100))

storage(FREELISTS 4 FREELIST GROUPS 2);

在2个接点上分别同时运行该存储过程,记下运行时间

节点1(omsrac1)   64.125s

节点2(omsrac2)   63.969s

单独在节点1运行一个线程

节点1(omsrac1)    39.156s

单独在节点1运行2个线程

节点1(omsrac1)42.344s和41.812s

7、        将6中建的表移到手动段管理表空间,继续6步的测试

Alter table test move tablespace HS_USER_IDXHIS

在2个接点上分别同时运行该存储过程,记下运行时间

节点1(omsrac1)   82.625s

节点2(omsrac2)   44.563s

重复测试在2个接点上分别同时运行该存储过程,记下运行时间

节点1(omsrac1)   41.703s

节点2(omsrac2)   79.531s

单独在节点1运行一个线程

节点1(omsrac1)    38.391s

单独在节点1运行2个线程

节点1(omsrac1)43.672s和44。14s

8、        重新调整表TEST的存储参数,再次进行步骤6的测试

drop table test;

Create table test(col1 varchar2(100),col2 varchar2(100))

tablespace HS_USER_IDXHIS

storage(initial 10240k FREELISTS 4 FREELIST GROUPS 2);

在2个接点上分别同时运行该存储过程,记下运行时间

节点1(omsrac1)   44.734s

节点2(omsrac2)   45.188s

单独在节点1运行一个线程

节点1(omsrac1)    39.125s

单独在节点1运行2个线程

节点1(omsrac1)41.422s和42.609s

3、测试结论

1、        如果段空间管理用AUTO,那么指定的一些存储参数将不起作用,可以提高性能,但是效果不很明显

2、        如果段空间管理用MANUAL,那么指定的存储参数都有效,根据需求调整存储参数,对性能提高很大

3、        在段空间管理用MANUAL通过调整FREELISTS和FREELIST GROUPS参数可以提高插入性能

至此问题已经解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值