database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Tutorials 17300 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 17300
Parallel 인덱스 사용시 주의사항
작성자
정재익(xlib)
작성일
2004-02-11 19:41
조회수
7,693

* Parallel 인덱스 생성 방법
===========================

1. 소개
인덱스를 만드는 CREATE INDEX명령은 다음과 같은 순서로 작업을 하게 된다.
 1. 메타 데이터 처리
 2. 인덱스 이름에 락을 검
 3. 레코드의 인덱스 컬럼을 순차적으로 검색
 4. 인덱스 컬럼을 소팅
 5. 인덱스 구축(여러 저장영역으로 분산되어있는 파티션포함)
 6. 신규 메타데이터를 디스크의 Rdb Root file에 Write

위의 순서중에서 다른 인덱스 생성작업을 방해하는 단계는 6번째 작업으로서,
다른 갱신된 테이블처럼 시스템 테이블 및 인덱스에 락을 걸기 때문이다.

2. Shared Data Definition 트랜잭션

동일 테이블에 대해 동시에 여러개의 인덱스를 생성하기 위해서는 인덱스를
생성하는 트랜잭션을 Reserving절과 함께 SHARED DATA DEFINTION으로 선언함
으로서 가능해진다. SHARED DATA DEFINITION트랜잭션을 최적으로 사용하기 위
해서는 다음과 같은 사항을 고려해야 한다.

   2-1. CREATE INDEX명령을 사용하여 인덱스가 생성된 직후에 COMMIT명령으로
        해당 테이블이나 시스템 테이블 및 인덱스에 걸린 락을 바로 릴리즈해
        야 한다. 이것은 다른 인덱스 생성 프로세스와 락 충돌을 피할 수 있는
        확률을 높히게 되어 병렬로 인덱스를 생성하는 작업이 빠른 시간안에
        끝날 수 있게 한다.

   2-2. 각 인덱스 생성 프로세스마다 적절한 SORTWORK 파일을 지정하는 논리명
        을 정의해라. 이것은 인덱스 생성에 필수적인 소트작업의 성능을 높히는
        데 필수적이며, 각 SORTWORK파일을 서로 다른 디스크에 지정해라.

   2-3. 가능하면,글로벌 버퍼링을 설정하고 프로세스당 버퍼수를 테이블의
        데이터를 수용할 수 있을 정도로 충분히 할당하라. 주의해야할 점은
        글로벌 버퍼를 시스템이 보유하고 있는 물리적 메모리보다 크게 해서는
        가상 페이징으로 인하여 성능이 떨어질 수 있다는 것이다. 글로벌 버퍼
        는 데이터베이스내의 페이지들을 여러 프로세스가 공유할 수 있게 하여
        결과적으로 디스크 I/O 수를 줄이는 효과를 내게 된다.

   2-4. 글로벌 버퍼링을 설정하기가 곤란하다면, 로컬 버퍼의 수를
        RDM$BIND_BUFFERS 논리명을 이용하여, 가능한 크게 설정하라. 이것은
        인덱스 캐쉬를 크게 하여 전체적인 성능을 좋게 한다.

   2-5. 동일 테이블의 각 인덱스에 대한 저장 영역은 서로 다른 디스크에 위치
        하게 해라. 이것은 디스크의 Load Balancing을 유도하여 성능을 좋게
        한다. 여러개의 인덱스를 하나의 저장 영역에 저장하는 것은 SPAM
        페이지의 Contention으로 인해 성능이 떨어짐을 주의해라

   2-6. 병렬로 인덱스를 생성하는 각 프로세스의 RUJ파일 위치를 각기 다른
        디스크에 두거나, 자주 사용되지 않는 디스크에 둬라. 테이블이 크면
        클수록 RUJ파일도 커지게 되며 RUJ파일의 확장으로 인한 디스크
        Contention을 줄일 수 있기 때문이다.

   2-7. SHARED DATA DEFINITION트랜잭션이 특정 테이블에 대해 작업을 시작
        하면,처음에는 SHARED READ로 락이 걸리게 되며, 인덱스 생성시에은
        SHARED WRITE로 락이 걸리게 되는데, SHARED WRITE 모드는 SNAPSHOT
        파일에 BEFORE이미지를 기록하게 한다. 비록, SNAPSHOT파일에는 비동기
        적으로 BEFORE이미지가 기록되긴 하지만, 인덱스 생성시에는 데이터
        베이스의 SNAPSHOT 모드를 DISABLE로 하는 것도 바람직하다.

   2-8. 각 프로세스의 워킹셋 파라미터인 WSQUOTA와 WSEXTENT의 값이 현격히
        차이나게 하는 것은 바람직하지 않다. 이 2가지 파라미터의 차이만큼
        의 워킹셋 페이지는 Open VMS SORT유틸리티가 Scratch virtual
        Memory를 할당하는데 사용되는데, 차이가 크면 클수록 과다한 Page
        Fault를 일으킬 수 있다. 즉 요구한 가상메모리가 사용가능한 물리적
        메모리를 전체적으로 초과하는 현상이 발생하게 된다.

   2-9. SHARED DATA DEFINTION 트랜잭션은 Single-file 데이터베이스나
        RDB$SYSTEM에 있는 테이블에 대한 병렬 인덱스 생성은 피하는 것이
        좋다.

3. 병렬 인덱스 생성에 소요되는 시간에 대한 예

 아래의 예는 동일 테이블에 대해 10개의 인덱스를 동시에 생성하는 경우와
하나의 프로세스가 10개의 인덱스를 순차적으로 생성한 경우에 소요되는 시간에
 대한 결과이다. 이 예에서는 테이블의 CARDINALITY는 21000개였고, 글로벌
버퍼가 설정되었으며, 한 사용자당 사용가능한 글로벌 버퍼의 수은 500 페이지
 였다. 인덱스는 파티션되지 않았으며, uniform포맷의 2개의 저장영역중 하나에
생성하였다.


              병렬 생성        소요 시간  
          ========================+======================
   index1   00:02:22.50  
       index2                  00:01:57.94
   index3   00:02:06.27
  index4   00:01:34.53
  index5   00:01:51.96
  index6   00:01:27.57
  index7   00:02:34.64
  index8   00:01:40.56
  index9   00:01:34.43
  index10   00:01:47.44
    =======================+=======================
              순차적 생성                 소요시간
           ===============================================
   index1 - index10 00:03:26.66
           ===============================================

병령생성시에 가장 오래걸린 인덱스 생성시간은 02:34.64이고 순차적 생성의 총
소요시간은 03:26.66으로 약 1분 가량이 병렬생성으로 절약한 시간이다.

출처:http://211.106.111.2:8880/bulletin/list.jsp?seq=11259&pg=0&sort_by=last_updated&keyfield=subject&keyword=PARALLEL

[Top]
No.
제목
작성자
작성일
조회
17303INVENTORY TRANSACTION WORKER가 PARALLEL로 실행되지 않는 문제
정재익
2004-02-11
5335
17302Direct load 또는 parallel insert 의 사용방법
정재익
2004-02-11
12871
17301Parallel load 기능의 활용 예제
정재익
2004-02-11
7539
17300Parallel 인덱스 사용시 주의사항
정재익
2004-02-11
7693
17299PARALLEL DML 사용 방법
정재익
2004-02-11
11531
17193APM 에 오라클 9i 추가 설치하기
정재익
2004-02-04
8896
17192RedHat 8 에 Oracle 9i 설치하기
정재익
2004-02-04
11829
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다