전체 글 327

10 리두 (Redo) 에서의 대기이벤트들

1. latch: redo writing, latch: redo allocation, latch: redo copy 1) redo writing 래치: Redo Buffer 내의 공간을 확보하기 위해 LGWR 에게 쓰기 요청을 하려는 프로세스는 redo writing 래치를 획득해야 한다.Willing-to-wait 모드로 획득2) redo copy 래치: PGA 내의 Change Vector 를 Redo Buffer 로 복사하려는 프로세스는 작업의 전체 과정 동안 redo copy 래치를 보유해야 한다.No-wait 모드로 획득3) redo allocation 래치: Change Vector 를 Redo Buffer 에 복사하기 위해 Redo Buffer 내에 공간을 확보하고자 하는 과정에서 획득해야 ..

IT기술/Oracle 2014.02.03

09 I/O 에서의 대기이벤트들

1. db file scatterd read오라클은 풀테이블스캔 (Full Table Scan. FTS) 이나 인덱스풀스캔 (Index Full Scan) 을 수행하는 경우 성능보장을 위해서 가능한 여러 개의 블록을 한꺼번에 읽는다. 이것을 멀티 블록 IO (Multi Block I/O) 라고 부른다.FTS 에서 싱글 블록 IO 를 사용하거나 MBRC 보다 작은 수의 블록을 읽어들이는 경우는 다음과 같다.- 익스텐트 경계에 도달한 경우- 스캔 도중에 캐시된 블록이 있을 경우- Chaind Row 가 있는 경우 1) 어플리케이션 레이어db file scattered read 대기가 주로 발생하는 SQL 문을 추출해야한다. 2) 오라클 메모리 레이어 버퍼 캐시의 크기가 지나치게 작다면 그만큼 물리적 I/O ..

IT기술/Oracle 2014.02.03

08 세그먼트 (Segment) 에서의 대기 이벤트들

1. enq: HW -contentionHW 락 경합은 대부분 대량 Insert 에 의해 발생하며, 간혹 대량 Update 에 의해 언두 세그먼트에서 HW 락 경합현상이 발생하는 경우도 있다.In-memory Undo (IMU) HWMBump Up 이 자주 발생하지 않게 하려면 Extent 값을 크게 주면 된다. (미리 쓸 자리를 할당한다.) 9i 때 Extent 사이즈를 고정해 두는 파라미터tablespace 만들 때 uniform size extent management local uniform size 1M10g 부터는 기본 64k 로 고정 FLM 을 사용하는 경우, HW 락의 경합을 줄이는 방법은 다음과 같다.첫째, FREELISTS 값을 동시 트랜잭션의 수를 고려해서 충분히 크게 잡아준다.둘째,..

IT기술/Oracle 2014.02.03

07 트랜잭션 (Transaction) 에서의 대기이벤트들

1. enq: TM - contentionDML 이 수행되는 동안, DML 과 관련된 객체에 대한 변경을 방지하기 위해 DML 을 수행하는 프로세스는 반드시 해당 테이블에 대해 TM 락을 획득해야 한다.TM 락을 획득하는 과정에서 경합이 발생하면 enq: TM - contention 이벤트를 대기하게 된다. - DML 락 : Data lock, DML 수행시 데이터를 보호하기 위한 락. 로우 락 (TX) 은 특정 로우를 보호하고,테이블 락 (TM) 은 전체 테이블을 보호한다. DBA_DML_LOCKS 를 통해 관찰 가능하다.- DDL 락 : Data Dictionary lock. User/Table/View/Procedure 등의 정의를 보호한다.DBA_DDL_LOCKS 를 통해 관찰가능하다.- Inte..

IT기술/Oracle 2014.01.29

06 Row Cache 에서의 대기 이벤트들

1. row cache lock오라클은 딕셔너리의 정보를 SGA 내의 Row Cache (혹은 Dictionary Cache) 영역에 저장하고 있다.Row Cache 는 Shared Pool 영역에 존재하며 다음과 같은 쿼리로 확인할 수 있다.SQL> select pool, name, bytes from v$sgastat 2 where name = 'row cache' ; 딕셔너리의 내용을 변경하고자 하는 프로세스는 그에 해당하는 row cache object 에 대해서 row cache lock 을 획득해야 한다.대표적인 경우가 시퀀스 (Sequence) 인데, 시퀀스의 nextval 을 획득하는 과정에서 딕셔너리 정보의 변경이 필요한 경우에시퀀스에 해당하는 row cache object 에 대해서 r..

IT기술/Oracle 2014.01.29

05 Library Cache 에서의 대기이벤트들

1. latch: shared poolshared pool 래치는 shared pool 의 기본 메모리 구조인 힙을 보호하는 역할을 한다.프리 청크를 찾기 위해 프리리스트를 탐색하고, 적절한 청크를 할당하고, 필요한 경우에 프리 청크를 분할(Split) 하는 일련의 작업들은모두 shared pool 래치를 획득한 후에만 가능하다.shared pool 래치를 획득하는 과정에서 경합이 발생하면 latch: shared pool 이벤트를 대기한다. - 동시에 여러 세션이 청크를 할당받아야 하는 경우 하나의 shared pool 래치를 획득하기 위해 경쟁하기 때문에 경합이 발생하게 된다.- 하드 파싱이 심한 경우 청크를 쪼개는 (Split) 현상이 자주 발생하고 이로 인해 프리리스트에 수많은 작은 크기의 프리 ..

IT기술/Oracle 2014.01.29

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