IT기술/Oracle 119

04 버퍼캐시 (Buffer Cache) 에서의 대기 이벤트들

1. latch: cache buffer chainscache buffers chains 래치 경합이 발생하는 대표적인 경우 두 가지1) 비효율적인 SQL동시에 여러 프로세스가 넓은 범위의 인덱스나 넓은 범위의 테이블에 대해 스캔을 수행할 경우 cache buffers chains 래치 경합이 광범위하게 발생할 수 있다. 2) 핫블록 (Hot Block)SQL 문의 작동방식이 소수의 특정 블록을 계속해서 스캔하는 형태로 작성되었다면, 여러 세션이 동시에 이 SQL 문을 수행하는 경우 핫블록에 의한 cache buffers chains 래치 경합이 발생한다. 우회적으로 핫블록에 의한 cache buffers chains 래치 경합을 해소하는 방법은 핫블록에 속한 로우들을 되도록이면 다른 블록으로 분산시키는..

IT기술/Oracle 2014.01.28

03 오라클 내부구조와 OWI

1. 버퍼캐시와 OWI1) 버퍼 캐시 구조오라클은 물리적인 I/O 를 최소화하기 위해 최근에 사용된 블록에 대한 정보를 메모리의 일정 영역에 보관한다.이 메모리 영역을 버퍼 캐시라고 부른다.버퍼 캐시는 Shared Pool, 리두 버퍼와 함께 SGA 를 이루는 가장 중요한 메모리 영역 중 하나이다.SQL> show sga 오라클은 버퍼 캐시를 효과적으로 관리하기 위해 해시 체인 구조를 사용한다.해시 체인은 Shared Pool 내에 존재하며 오라클의 전형적인 메모리 구조 관리기법인버킷 (Bucket) → 체인 (Chain) → 헤더 (Header) 의 구조를 사용한다. 해시 체인 구조의 시작점은 해시 테이블이다.해시 테이블은 여러 개의 해시 버킷으로 이루어져 있다.하나의 해시 버킷은 해시 함수 결과와 매..

IT기술/Oracle 2014.01.27

02 래치 (Latch) 와 락 (Lock)

1. 오라클의 동기화 매커니즘오라클은 거대한 동기화 (Synchronization) 머신이다.래치와 락의 존재 이유는 동시 작업으로부터 오라클의 자원을 보호하는 것이다. 분류 래치 (latch) 락 (lock) 목적 메모리 구조에 대한 배타적인 접근을 위함(9i 부터 cache buffers chains latch 들은 읽기 전용시에 공유가 가능함) 락 모드가 호환 가능하면 다수의 프로세스가 동일한 리소스를 공유하는 것을 허용락 모드가 호환 가능하지 않으면 리소스에 대한 배타적인 접근만 허용 사용범위 SGA 내부의 데이터 구조에만 적용메모리 오브젝트를 임시적으로 보호함단일 오퍼레이션으로 메모리 구조에 대한 접근 제어트랜잭션 단위가 아님 테이블, 데이터 블록 및 state object 와 같은 오브젝트를 ..

IT기술/Oracle 2014.01.27

01 OWI 소개

1. OWI 란?프로세스가 겪는 대기현상을 기록하고 관찰하는 일련의 기능과 인터페이스, 그리고 방법론을 통칭하여 OWI, 즉 Oracle Wait Interface 라고 부른다.프로세스가 특정 자원을 획득하지 못하고 대기하는 것을 "XXX 이벤트를 대기한다" 고 표현한다.이벤트 혹은 대기이벤트는 프로세스가 특정 자원을 획득할 때가지 발생하기를 기다리는 "사건"으로 정의할 수 있다.오라클은 대기회수, 타임아웃회수, 대기시간 이라는 세 가지 값을 이용해 대기현상을 표현한다.사용자 관점에서 가장 의미가 있는 것은 "대기시간" 이다.Response Time = Service Time + Wait TimeService Time 과 Wait Time 을 낮추면 자연스럽게 응답시간이 낮아지고 사용자의 성능 만족도는 ..

IT기술/Oracle 2014.01.27

성능 고도화 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