oracle 重平衡,如何修改RAC从SESSION平衡到负载平衡?

原帖由 Yong Huang 于 2009-12-6 11:47 发表 thread-1243195-1-1.html

I've read numerous articles on the Internet, including oracle.com, some authors regarded as experts at this subject. But nobody, nobody, has ever done an experiment to show that the arguments passed to dbms_serivce.modify_service indeed control the behavior of load balance. Can anybody here do a test and show the evidence?

Yong Huang

Hi,

证明我贴在

http://toddbao.itpub.net/post/41112/494516

这里也贴一下,方便查看:

此次日志旨在证明Oracle RAC是可以依据除了会话数之外的其他要素(在这里测试SERVICE_TIME)实现负载均衡的。此功能依赖LBA(Load Balancing Advisory)

不要在生产库上测试,发生任何问题概不负责。

0) 两个节点edolraclin49a,edolraclin49b.

[oracle@edolraclin49a oracle]$ uname -r

2.4.21-27.ELsmp

1) 首先,创建一个Service,名为SERV,并且如下定义参数:

goal=>DBMS_SERVICE.GOAL_SERVICE_TIME,clb_goal=>DBMS_SERVICE.CLB_GOAL_SHORT

*Note: 可以先用DBCA创建,然后再用DBMS_SERVICE.MODIFY_SERVICE修改。

2) 确保把两个实例都设置为SERV的首选实例。

3) 添加Service到客户端的TNSNAMES.ORA文件:

SERV =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = edolraclin49a-vip)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = edolraclin49b-vip)(PORT = 1521))

(LOAD_BALANCE = yes)

(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = SERV))

)

4) 创建一张测试表和一个测试用户:

connect / as sysdba

create user U1 identified by u1 default tablespace users temporary tablespace temp;

grant connect, resource, dba to u1;

connect u1/u1

create table fan (c number);

5) 创建一个观察会话,供你观察实例的会话数,将来可反复执行SQL反复观察:

connect / as sysdba

select inst_id,count(*) from gv$session

where username='U1' group by inst_id order by inst_id;

7) 创建负载SQL脚本fan.sql,内容如下(假设文件都创建在用户home目录下e.g:/home/oracle/):

begin

for i in 1..1000 loop

insert into fan select sid from v$mystat where rownum<2;

commit;

delete fan where c in (select sid from v$mystat where rownum<2);

commit;

end loop;

end;

/

exit;

6) 创建负载脚本fan.sh,调用负载SQL脚本,内容如下(自己修改ORACLE_HOME):

#!/bin/ksh

#

# fan.sh

#

users=120

x=1

y=$users

UNPW="u1/u1@"$1

ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1

export ORACLE_HOME

while [ $x -le $y ]

do

/u01/app/oracle/product/10.2.0/db_1/bin/sqlplus -s $UNPW @fan.sql

done

7) 创建负载发起脚本startfanload.sh,内容如下(几行看你心情了,参考fan.sql和fan.sh再做决定):

/home/oracle/fan.sh $1 &

/home/oracle/fan.sh $1 &

/home/oracle/fan.sh $1 &

/home/oracle/fan.sh $1 &

/home/oracle/fan.sh $1 &

/home/oracle/fan.sh $1 &

/home/oracle/fan.sh $1 &

/home/oracle/fan.sh $1 &

/home/oracle/fan.sh $1 &

/home/oracle/fan.sh $1 &

/home/oracle/fan.sh $1 &

/home/oracle/fan.sh $1 &

/home/oracle/fan.sh $1 &

/home/oracle/fan.sh $1 &

/home/oracle/fan.sh $1 &

/home/oracle/fan.sh $1 &

/home/oracle/fan.sh $1 &

/home/oracle/fan.sh $1 &

8) 在客户端对RAC发起工作负载:

./startfanload.sh SERV

9) 在第一个节点上打开一个终端,执行一个程序让CPU忙一下,使SERV在节点一上的服务品质降低(程序文件在我博客资源中心/Misc Files文件夹里):

./primes

10) 等三分钟,LBA需要时间计算Service品质。

11) 反复执行在第5)步骤中的SQL,观察会话分布:

SQL> select inst_id,count(*) from gv$session where username='U1' group by inst_id order by inst_id

SQL> /

INST_ID   COUNT(*)

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

1          8

2         10

SQL> /

INST_ID   COUNT(*)

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

1          8

2          9

SQL> /

INST_ID   COUNT(*)

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

1          5

2         13

SQL> /

INST_ID   COUNT(*)

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

1          4

2         14

SQL> /

INST_ID   COUNT(*)

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

1          2

2         16

SQL>

看着会话连接倒向第二个节点。

这个例子在Oracle 10g RAC for Administrators课程的实验中被证明过许许多多次。

Todd

[本帖最后由 ToddBao 于 2009-12-7 02:44 编辑]

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值