오라클 RAC 에서의 노드간 parallel 제어 - 패러럴 제어 - 병렬 제어

Share

Last Updated on 8월 25, 2021 by Jade(정현호)



Serivce name : TESTDB
SID  :  TESTDB1  /  TESTDB2


• 10gR2

2개 파라미터를 설정 합니다.(SERVICE 등록 X)

alter system set INSTANCE_GROUPS='testdb1srv ' sid='TESTDB1';
alter system set INSTANCE_GROUPS='testdb2srv ' sid='TESTDB2';

alter system set parallel_instance_group = 'testdb1srv ' sid='TESTDB1';
alter system set parallel_instance_group = 'testdb1srv ' sid='TESTDB2';




• 11gR1

instance_groups 이라는 parameter 가 11gR1 에서는 더 이상 사용되지 않고, 기본적으로 service 단위로 parallel query 가 수행되게 됩니다.


정리 : 11gR1 에서는 INSTANCE_GROUPS 를 사용하지 않으며 parallel_instance_group 와 서비스로 설정 합니다.


서비스 등록 및 parallel_instance_group 파라미터를 이용하여 parallel 쿼리 수행 시 다른 노드에 slave process 를 실행되지 않도록 설정 하는 것입니다.


먼저 진행하는 상태는 아무것도 설정하지 않은 상태 입니다(설치 후 초기 상태)


1. 테스트 테이블 생성

SQL> 
create table tb_test
( no number )
tablespace users;




2. 테스트 테이블에 10만건 데이터 입력

SQL> declare
  i number;
begin
  for i in 1..100000 loop
      insert into tb_test values(i);
  end loop;
  commit;
end;
/



3. 스크립트 준비

3-1. mon.sql

SET linesize 200
COLUMN machine format a30
COLUMN program format a60

SQL> SELECT inst_id, machine,  program
FROM gv$session
WHERE sql_id in (
                SELECT sql_id
                FROM gv$sqlarea
                WHERE sql_text ='SELECT /*+ PARALLEL(P 4) */ * FROM TB_TEST P ORDER BY NO DESC'
              )
/




3-2. parallel.sql

SQL> SELECT /*+ PARALLEL(P 4) */ * 
FROM TB_TEST P ORDER BY NO DESC
/



4. 스크립트 실행

세션을 2개 접속 후 각각 쿼리를 실행하여 병렬프로세스가 모든 노드에서 구동되는지를 확인 합니다.

parallel.sql 을 실행 후 다른 세션에서 mon.sql 을 실행해서 확인 해보면 아래와 같이 모든 노드에서 parallel slave process 가 구동되고 있음을 확인 할 수 있습니다.




5. 서비스 생성 및 파라미터 적용

SQL> srvctl add service -d TESTDB -s testdb1srv -r TESTDB1
SQL> srvctl add service -d TESTDB -s testdb2srv -r TESTDB2

=>  데이터베이스 명과 instance 명은 대소문자를 구별합니다.

   -d 데이터베이스명   -s 서비스명  -r 인스턴스명




6. 서비스 구동

SQL> srvctl start service -d TESTDB -s testdb1srv
SQL> srvctl start service -d TESTDB -s testdb2srv



7. 서비스 생성 확인.

crs_stat -t 로 서비스가 등록 되었는지 확인 합니다.




8. 파라미터 설정

위에서 서비스2개를 생성 되었다면 PARALLEL_INSTANCE_GROUP  설정합니다.
(sid 별로 설정)

ALTER SYSTEM SET PARALLEL_INSTANCE_GROUP=testdb1srv sid='TESTDB1';
ALTER SYSTEM SET PARALLEL_INSTANCE_GROUP=testdb2srv sid='TESTDB2';



instance 와 service 간의 연결정보는 아래의 query 를 이용합니다.

set lines 400
col service_name for a30
SQL> select s.inst_id, instance_number, instance_name,
name service_name, host_name
from gv$services s, gv$instance i
where s.inst_id=i.inst_id;



9. 테스트

설정이 완료 되었으며, 스크립트를 다시 실행하여 parallel slave process 구동을 살펴 봅니다. 테스트 방법은 4번 항목과 동일합니다.




• 11gR2

11gR2 에서는 PARALLEL_FORCE_LOCAL 파라미터 만 이용 합니다.

PARALLEL_FORCE_LOCAL 파라미터의 default 값은 FALSE  로 모든 노드에서 parallel slave process 가 실행 됨으로 이전과 같이 인스턴스내에서 수행되게 하려면 파라미터를 TRUE 로 변경 해야 합니다.

SQL> ALTER SYSTEM SET PARALLEL_FORCE_LOCAL=TRUE sid='*';



0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x