오라클 RAC 에서의 노드간 parallel process 제어

Last Updated on 1월 4, 2021 by 태랑(정현호)


2014-07-14 수정됨

RAC 에서의 노드간 parallel process 제어

 

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 (11gR2는 아래쪽에 기술되어있음)

 

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

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

서비스 등록 및 parallel_instance_group 파라미터를 이용하여 parallel 쿼리 수행 시

다른 노드에slave process 를 뜨지 않도록 설정 하는 것입니다.

 


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

 

 

1. 테스트 테이블 생성

create table tb_test

( no number )

tablespace users;

 

 

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

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

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

 

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

/

 

 

 

 

4. 스크립트 실행

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

 

parallel.sql 을 실행 후 다른 세션에서 mon.sql 을 실행해서 확인 해보면 아래와 같이

모든 노드에서 parallel slave process 가 구동되고 있음을 확인 할 수 있습니다.

 

 

 

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

 

srvctl add service -d TESTDB -s testdb1srv -r TESTDB1

srvctl add service -d TESTDB -s testdb2srv -r TESTDB2

 

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

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


 

6. 서비스 구동

srvctl start service -d TESTDB -s testdb1srv

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
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 에서는 PARALLEL_FORCE_LOCAL 파라미터 만 이용한다

PARALLEL_FORCE_LOCAL 파라미터의 default 값은 FALSE 

모든 노드에서 parallel slave process 가 구동됨으로 이전과 같이 인스턴스내에서

수행되게 하려면 아래와 같은 커맨드로 가능하게 된다.

 

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

답글 남기기