DATOR


데이터 이행 시간 합리적 기준 마련하기...(주)엔코아 안근우 수석 컨설턴트 커버 스토리


coverstory.jpg


데이터 이행 시 중요한 요건 중의 하나가 정해진 시간 내에 이행을 완료하는 것입니다. 이행해야 할 절대량이 많을 때 시간 때문에 선이행 본과 본이행 본으로 나누어 이행하는 이행 전략을 수립하기도 하지만, 선이행 본과 본이행 본을 나누는 것뿐만 아니라 본이행 시 시간 갭 사이 변경된 선이행 본을 추가 반영하는 것도 어려운 작업일 것입니다.


그렇기 때문에 정말 이것이 최선인지 확인하기 위해 이행 서버 HW 자원 구성과 이행 프로그램 최적화 여부를 모니터링 하는 방법 중 하나를 IBM AIX OS 환경에서 구동되는 ORACLE 11GR2를 예로 하여 간단하게 알아보겠습니다.

1. HW 자원 구성의 최적화 여부 모니터링 HW 자원 구성이 최적화 되었다는 것은 이행자 관점에서 판단 하면 됩니다.


즉 이행 시작 ~ 이행 종료 기간 동안 CPU는 100% 가까이 MEMORY는 PAGING/SWAPING이 발생하지 않는 정도로 지속적으로 최대한 사용 하며 종료 되었다면 HW 자원은 낭비도 모자람도 없는 최적화 상태라 말 할 수 있겠습니다.

아래 그림은 AIX OS에서 기본적으로 제공되는 NMON tool 실행 모습인데 여기에서 보여지는 CPU 사용량과 Memory 사용량을 모니터링하여 최적화 상태를 확인합니다.


img1.jpg

<이미지출처 : https://en.wikipedia.org/wiki/Nmon >



위 그림에서 보여지는 CPU/Memory 사용량을 보며 이행 프로그램 동시 실행 개수를 조정 합니다. 동시 실행 개수를 조정한다는 것은 실행되는 이행 프로그램 수, 이행 프로그램 내 SQL 단위의 DOP(Degree Of Parallel) 또는 프로그램 Parallel 수 등을 조정하는 것입니다.

여기서 하나 더 보아야 할 포인트가 있다면 이행 시작과 종료 시 자원을 꾸준히 최적화하여 사용하려면 전체 이행 프로그램 들 중 가장 수행 시간이 긴 이행 프로그램들은 최대한 동시에 앞서 실행되도록 계획을 세워야 혹 개별 단위 수행 시간은 늘어나더라도 전체 이행 시간을 줄 일 수 있습니다.

2. 이행 프로그램 최적화 여부 모니터링 SQL 문장 성능 관점의 최적화는 아닙니다. 그 부분은 선 반영되었다고 가정합니다.
이행 프로그램 동시 실행 가능 지점 즉 리소스 기준 OS 상 가용한 Memory 크기에 맞는 PGA 크기의 최적화입니다. PGA크기를 최적화 하기 전에 먼저 가용한 Memory 크기를 확보할 필요가 있는데요, 먼저 SGA라는 공유 메모리 크기를 줄입니다.  이행 프로그램들은 대부분 특성상 Direct path read/write을 하기 때문에 큰 buffer cache 공간이 필요 없고 대신 대용량의 hash, sorting 작업이 발생하므로 큰 PGA공간이 필요합니다.  만약 SGA 크기가 불필요하게 크게 잡혀 있다면 회수해서 PGA가 더 할 당 되어 사용 될 수 있도록 해야 합니다. PGA 크기를 제어 하는 것으로 PGA_AGGREATE_TARGET 이라는 파라미터가 기본적으로 사용되는 데 이것으로는 이행 프로그램에서 사용하는 PGA크기를 제어하는데 제약이 있고, 이것이 전체 PGA 크기를 제한하는 것도 아닙니다.  하여 프로그램 내에서 아래의 SQL을 수행하여 명시적으로 제어합니다.


ALTER SESSION SET workarea_size_policy=MANUAL;
ALTER SESSION SET sort_area_size = 536870912;
ALTER SESSION SET hash_area_size = 536870912;


이때 유념해야 할 것은 PARALLEL SQL 수행 시 SLAVE PROCESS 당 할당되는 크기이므로 이행 프로그램 PGA LIMIT 크기를 PARALLEL DEGREE 만큼 곱해서 생각합니다.

이제 이행 프로그램 수행 시 실제 얼마만큼의 PGA를 사용하는 지 확인하여 IN MEMORY SORT / HASH를 수행하려면 얼마만큼을 더 할당해야 하는지, Resource 사용량 관점에서 PGA크기를 어떻게 조정해야 할지 결정해야 하는데, 이때 V$ACTEVIE_SESSION_HISTORY를 조회하면 이행 프로그램 별 사용한 PGA 크기를 확인할 수 있습니다.아래는 이와 관련한 컬럼들을 추렸습니다.



Column

Datatype

Description

SAMPLE_TIME

TIMESTAMP(3)

Time at which the sample was taken

SESSION_ID

NUMBER

V$SESSION.SID

SESSION_SERIAL#

NUMBER

V$SESSION.SERIAL#

SQL_PLAN_OPERATION

VARCHAR2(30)

Plan operation name (HASH JOIN, HASH, SORT)

QC_SESSION_ID

NUMBER

Query coordinator session ID

QC_SESSION_SERIAL#

NUMBER

Query coordinator session serial number

EVENT

VARCHAR2(64)

Wait event

WAIT_CLASS

VARCHAR2(64)

Wait class name of the event

MODULE

VARCHAR2(48)

DBMS_APPLICATION_INFO.SET_MODUL

PGA_ALLOCATED

NUMBER

Amount of PGA memory (in bytes) consumed by this session at the time

TEMP_SPACE_ALLOCATED

NUMBER

Amount of TEMP memory (in bytes) consumed by this session at the time



GROUP BY SAMPLE_TIME, MODULE / QC_SESSION_ID / SQL_ID 등으로 GROUPING하여 PGA_ALLOCATED와 TEMP_SPACE_ALLOCATED를 SUM해서 보면 이행 프로그램이 사용하는 PGA크기와 TEMP SPACE 크기를 확인 할 수 있습니다.


목표는 가능한 만큼 이행 프로그램을 동시 수행하는 것입니다. 수행 시간이 긴 이행 프로그램을 각 실행 그룹의 중심에 넣고 자원 사용량에 따른 동시 실행 그룹 수 등을 조정하여 이행 시간을 측정합니다. Resource 문제로 이행 프로그램을 더 수행시키지 못할 수 도 있을 것입니다.


이행 프로젝트는 ‘시간’이라는 제약이 다른 프로젝트에 비해 크기 때문에 까다로운 작업일 수 밖에 없습니다. 이행 프로젝트를 진행하고 계신 분들, 꼼꼼함과 끈기로 성공적인 프로젝트로 이끌어 가길 바라겠습니다.

Tag :

Leave Comments