전체 글 327

성능 고도화 2 - 07 병렬 처리

01 기본개념 SQL 문이 수행해야 할 작업 범위를 여러개의 작은 단위로 나누어 여러 프로세스가 동시에 처리하는 것 (1) Query Coordinator 와 병렬 프로세스 Query Coordinator 는 병렬 SQL 문을 발행한 세션을 말하고, 병렬 서버 프로세스는 실제 작업을 수행하는 개별 세션들을 말한다. (2) Infra-Operation Parallelism 과 Inter-Operation Parallelism (3) 테이블 큐 * 생산자 / 소비자 모델 * 병렬 실행계획에서 생산자와 소비자 식별 (4) IN-OUT 오퍼레이션 S → P: PARALLEL_FROM_SERIAL P → S: PARALLEL_TO_SERIAL P → P: PARALLEL_TO_PARALLEL PCWP: PARAL..

IT기술/Oracle 2014.01.23

성능 고도화 2 - 06 파티셔닝

01 테이블 파티셔닝 테이블과 인덱스 데이터를 파티션 단위로 나누어 저장하는 것 * 파티셔닝이 필요한 이유 - 관리적 측면: 파티션 단위 백업, 추가, 삭제, 변경 - 성능적 측면: 파티션 단위 조회 및 DML 수행 클러스터와 다른 점은 세그먼트 단위로 모아서 저장한다는 것. 클러스터는 블록 단위로 데이터를 모아 저장한다. IOT와 파티셔닝을 조합함으로 놀라운 성능 효과를 얻을 수 있다. 테이블 파티션과 인덱스 파티션은 구분돼야 한다. (1) 파티션 기본 구조 * 수동 파티셔닝 뷰틀 통해 파티션 기능을 구현 파티션 뷰의 핵심 기능은 뷰 쿼리에 사용된 조건절에 부합하는 테이블만 읽는다 * 파티션 테이블 파티션 테이블 기능을 이용하면 훨씬 간편하게 파티션을 정의할 수 있을 뿐 아니라 기능적으로 더 낫다 (2..

IT기술/Oracle 2014.01.23

성능 고도화 2 - 05 소트 튜닝

01 소트 수행 원리 (1) 소트 수행 과정 데이터 정렬이 필요할 때 오라클은 PGA 메모리에 Sort Area 를 할당하는데, 그 안에서 처리를 완료할 수 있는지 여부에 따라 소트를 두가지 유형으로 나눈다. 메모리 소트: 전체 데이터의 정렬 작업을 메모리 내에서 완료하는 것을 말하며, Internal Sort 라고도 한다. 디스크 소트: 할당받은 Sort Area 내에서 정렬을 완료하지 못해 디스크 공간까지 사용하는 경우를 말하며, External Sort 라고도 한다. - Optimal 소트: 소트 오퍼레이션이 메모리 내에서만 이루어짐 - Onepass 소트: 정렬 대상 집합이 디스크에 한 번만 쓰임 - Multipass 소트: 정렬 대상 집합이 디스크에 여러 번 쓰임 (2) 소트 오퍼레이션 측정 (..

IT기술/Oracle 2014.01.23

성능 고도화 2 - 04 쿼리 변환

01 쿼리 변환이란? 쿼리 옵티마이저가 SQL 을 분석해 의미적으로 동일하면서도 더 나은 성능이 기대되는 형태로 재작성하는 것을 말한다. 9i 부터 옵티마이저의 핵심적인 변화가 대부분 쿼리 변환을 중심으로 진행되고 있어 이제 SQL 튜닝을 논할 때 빼놓을 수 없는 중심 주제가 되었다. * 쿼리 변환의 종류 1. 서브 쿼리 Unnesting 2. 뷰 Merging 3. 조건절 Pushing 4. 조건절 이행 5. 공통 표현식 제거 6. Outer 조인을 Inner 조인으로 변환 7. 실체화 뷰 쿼리로 재작성 8. Star 변환 9. Outer 조인 뷰에 대한 조인 조건 Pushdown 10. OR-expansion * 쿼리 변환 방식 - 휴리스틱 (Heuristic) 쿼리 변환: 결과만 보장된다면 무조건 ..

IT기술/Oracle 2014.01.22

성능 고도화 2 - 03 옵티마이저 원리

01 옵티마이저 (1) 옵티마이저란? 사용자가 요청한 SQL 을 가장 효율적이고 빠르게 수행할 수 있는 최적의 처리경로를 선택해 주는 DBMS 의 핵심엔진 (2) 규칙기반 옵티마이저 (Rule-Based Optimizer, RBO) 10g 부터는 지원 중단 Heuristic 옵티마이저라 불리며, 미리 정해 놓은 우선순위에 따라 액세스 경로를 평가하고 실행계획을 선택한다. * RBO 규칙 (인덱스 구조, 연산자, 조건절의 형태로 순위 결정) 밑에서부터 대입해본다 1. Single Row by Rowid 2. Single Row by Cluster Join 3. Single Row by Hash Cluster Key with Unique or Primary Key 4. Single Row by Unique ..

IT기술/Oracle 2014.01.22

성능 고도화 1 - 06 I/O 효율화 원리

데이터베이스 성능 튜닝의 3대 핵심 요소는 - 라이브러리 캐시 최적화 - 데이터베이스 Call 최적화 - I/O 효율화 및 버퍼캐시 최적화 가장 중요한 것은 세번째다. 잘 적용하려면 장기간 훈련이 필요하다. I/O 효율화 튜닝을 잘하려면 인덱스원리, 조인원리, 옵티마이저원리에 대한 이해가 필수적이다. 그리고 이를 바탕으로 고급SQL 활용을 통해 문제 해결 경험을 많이 쌓아야만 한다. 01 블록단위 I/O 블록단위로 I/O 한다는 것은, 하나의 레코드에서 하나의 컬럼만을 읽으려 할 때도 레코드가 속한 블록 전체를 읽게 됨을 뜻한다. Sequential 액세스 하나의 블록을 액세스해 그 안에 저장돼 있는 모든 레코드를 순차적으로 읽어들인다면 설령 무거운 디스크 I/O 를 수반하더라도 비효율은 없다. Rand..

IT기술/Oracle 2014.01.21

성능 고도화 1 - 05 데이터베이스 Call 최소화 원리

불필요하고 반복적인 Call 수행횟수를 최소화하는 것은 데이터베이스 수행속도를 향상시키고 확장성을 높이는 매우 중요한, 핵심적인 튜닝 요소다. 01 Call 통계 Parse Call: 커서를 파싱하는 과정에 대한 통계로서, 실행계획을 생성하거나 찾는 과정에 대한 정보를 포함한다. Execute Call: 커서를 실행하는 단계에 대한 통계를 보여준다. Fetch Call: select 문에서 실제 레코드를 읽어 사용자가 요구한 결과집합을 반환하는 과정에 대한 통계를 보여준다. DML 문은 Execute Call 시점에 모든 처리과정을 서버 내에서 완료하고 처리결과만 리턴하므로 Fetch Call이 전혀 발생하지 않는다. select 문은 Execute Call 단계에서는 커서만 오픈하고, 실제 데이터를 처..

IT기술/Oracle 2014.01.21

성능 고도화 1 - 04 라이브러리 캐시 최적화 원리

01 SQL 과 옵티마이저 DBMS 에 명령을 날릴 때 SQL 이라고 하는 구조화된 질의언어를 통해 원하는 결과집합을 요구할 뿐 그 결과집합을 얻기 위한 처리절차를 개발자가 직접 기술하지는 않기 때문에 4세대 언어라고 부른다. SQL 옵티마이저는 최소비용, 최적의 경로를 선택해서 사용자가 원하는 작업을 가장 효율적으로 수행할 수 있는 프로시저를 자동으로 생성해주는 DBMS 의 핵심기능이다. * 옵티마이저의 최적화 수행단계 1. 사용자가 던진 쿼리수행을 위해, 후보군이 될만한 실행계획들을 찾아낸다. 2. 데이터 딕셔너리에 미리 수집해 놓은 오브젝트 통계 및 시스템 통계정보를 이용해 각 실행계획의 예상비용을 산정한다. 3. 각 실행계획의 비용을 비교해서 최소비용을 갖는 하나를 선택한다. SQL 을 파싱하고,..

IT기술/Oracle 2014.01.21

성능 고도화 1 - 03 오라클 성능관리

※ SQL 튜닝 과정 쿼리 성능에 문제가 생기면 Explain Plan 을 통해 실행계획 을 먼저 확인 (X-ray ) 한다. 그것만으로 문제점을 정확히 파악할 수 없을 때 AutoTrace 를 걸어 수행 시 실제 일량을 측정 (CT촬영) 하거나 SQL 트레이스 (MRI 촬영) 를 걸어 내부 수행 절차상 어느 단계에서 부하를 일으키는지 눈으로 확인한다. 문제점이 파악되면 쿼리를 변환하거나 옵티마이저 힌트를 사용해 튜닝 (외용약 또는 내복약 처방) 을 실시하고, 그것만으로 부족하다 판단되면 인덱스 조정 (칼을 대지 않는 시술) 을 병행한다. 그래도 성능에 만족하지 못하면 반정규화를 실시하거나 집계 테이블을 생성 (칼을 대는 절개 수술) 하도록 권고하지만 구조적 문제에 기인할 때만 사용하는 최후의 수단이다...

IT기술/Oracle 2014.01.21

성능 고도화 1 - 02 트랜잭션과 Lock

DB2, SQLServer, Sybase 등은 Lock을 통해 읽기 일관성을 구현하지만, 오라클은 Undo 데이터를 이용해 읽기 일관성을 구현한다. Undo 에 저장된 정보를 이용해 쿼리가 시작된 시점을 기준으로 일관성 있는 결과집합을 생성해낸다. 01 트랜잭션 동시성 제어 (1) 동시성 제어 다중 사용자 환경에서 발생할 수 있는 갖가지 동시성 문제에 대한 충분한 고려 없이 시스템 개발이 이루어지는 문제 동시성 제어란 동시에 실행되는 트랜잭션 수를 최대화하면서도 입력, 수정, 삭제 검색 시 데이터의 무결성이 유지될 수 있도록 노력하는 것 동시성 (Concurrency): 다중 사용자가 같은 데이터를 동시에 액세스 일관성 (Consistency): 자신이 발생시킨 변경 사항과 다른 트랜잭션의 변경사항을 포..

IT기술/Oracle 2014.01.21