본문 바로가기

전체 글

(88)
네트워크에서의 대기 이벤트들 - 네트워크 관련 대기 이벤트들 1) SQL*Net message from/to client 2) SQL*Net more data from/to client 3) SQL*Net message from/to dblink 4) SQL*Net more data from/to dblink 이들 이벤트가 성능문제가 연관되는 경우는 네트워크 속도가 느린 경우, SQL 실행횟수가 불필요하게 높은 경우, 어플리케이션의 구현방식에 문제가 있는 경우이다. - 네트워크 속도가 느린 경우 만일 위 이벤트를 대기하는 시간이 불필요하게 높다면 네트워크 속도를 의심해볼 수 있다. 클라이언트와 DBMS 간의 문제가 있다면 1번과 2번의 문제이며, DBMS와 DBMS간의 네트워크 문제가 있다면 3번과 4번에 대한 대기시간이 증가할 수..
리두(Redo)에서의 대기 이벤트들 - latch: redo writing, latch: redo allocation, latch: redo copy 1) redo writing 래치: 리두 버퍼내의 공간을 확보하기 위해 LGWR에게 쓰기 요청을 하려는 프로세스는 redo writing 래치를 획득해야 한다. LGWR에 의한 쓰기 작업은 동시에 수행될 수 없으므로, 자연스럽게 이 래치는 전체 인스턴스에 하나만 존재한다. redo writing 래치는 Willing-to-wait 모드로 획득된다. redo writing 래치를 획득하는 과정에서 경합이 발생하면 latch: redo writing 이벤트를 대기하게 된다. 2) redo copy 래치: PGA내의 체인지 벡터를 리두 버퍼로 복사하려는 프로세스는 작업의 전체과정 동안 redo c..
I/O에서의 대기 이벤트들 - db file scattered read 멀티 블록 I/O를 한번 수행할 때마다 물리적인 I/O가 끝나기를 기다리게 되며, db file scattered read 이벤트를 대기하게 된다. 오라클은 DB_FILE_MULTIBLOCK_READ_COUNT (MBRC) 파라미터로 지정된 값만큼 멀티 블록 I/O를 수행한다. 풀 테이블 스캔(FTS)에서 싱글 블록 I/O를 수행하거나, MBRC보다 작은 수의 블록을 읽어 들이는 경우는 다음과 같다. 1) 익스텐트 경계에 도달한 경우 2) 스캔 도중에 캐시된 블록이 있을 경우 3) Chained Row가 있는 경우 - 오라클의 I/O 레이어를 기준으로 db file scattered read 대기 문제에 대한 해결책 1) 어플리케이션 레이어: 대기가 주로 발생..
세그먼트에서의 대기 이벤트들 - enq: HW – contention HWM을 여러 프로세스가 동시에 변경하는 것을 막기 위한 락을 HW 락이라고 부른다. HWM을 이동시키고자 하는 프로세스는 반드시 HW 락을 획득해야 한다. HW 락 경합은 세그먼트의 급속한 공간 확장이 필요한 경우에 매우 보편적으로 나타나는 대기 현상이며 극단적인 성능 저하를 야기하는 경우도 종종 발생한다. 세그먼트 공간관리기법은 크게 FLM과 ASSM으로 나뉘는데, FLM을 사용하는 경우에 특히 HW 락 경합이 문제가 되는 경우가 많다. FLM을 사용할 경우 HWM의 이동을 결정하는 FREELISTS 속성의 기본값이 1로 세팅되어 있기 때문이다. FLM을 사용하는 경우 FREELISTS 값을 동시 트랜잭션의 수를 고려해서 충분히 크게 잡아주거나, _BUMP_H..
트랜잭션에서의 대기 이벤트들 - enq: TM – contention DML이 수행되는 동안,DML과 관련된 객체에 대한 변경을 방지하기 위해 DML을 수행하는 프로세스는 반드시 해당 테이블에 대해 TM 락을 획득해야 한다. TM락에는 DML락과 DDL락이 있다. DML 락은 실제로는 TM 락과 일치한다 DML 락은 DBA_DML_LOCKS 뷰를 통해 관찰 가능한데 이 뷰는 V$LOCK 뷰에서 락 유형이 TM인 것만을 추출해서 보여주는 역할을 한다. DDL 락은 실제로는 library cache lock과 일치한다 DDL락은 DBA_DDL_LOCKS 뷰를 통해 관찰가능한데, 이 뷰는 실제로는 X$KGLLK 뷰를 적절히 가공해서 보여주는 역할을 한다. 일반적인 DML 문은 테이블에 대해 TM 락을 Sub-Exclusive (SX) 모..
로우캐시(Row Cache)에서의 대기 이벤트들 - row cache lock 닥셔너리의 내용을 변경하고자 하는 프로세스는 그에 해당하는 row cache object에 대해서 row cache lock을 획 득해야 한다 대표적인 경우가 시퀀스인데, 시퀀스의 nextval을 획득하는 과정에서 딕셔너리 정보의 변경이 필요한 경우에 시퀀스에 해당하는 row cache object에 대해서 row cache lock을 SSX(Shared Sub-Exclusive) 모드로 획득해야 한다. SSX 모드 간에는 상호 호환성이 없으므로 동시에 많은 프로세스가 동일 시퀀스에 대해 nextval을 호출하는 경우 row cache lock에 대한 경합이 발생한다. Row cache lock을 획득하는 과정에서 경합이 발생하면 row cache lock 이벤트를 대기하게..
라이브러리 캐시(Library Cache)에서의 대기이벤트들 - latch: shared pool shared pool 래치는 Shared Pool의 기본 메모리 구조인 힘을 보호하는 역할을 한다. 프리 청크를 찾기 위 해 프리리스트를 탐색하고, 적절한 청크를 할당하고, 필요한 경우 프리 청크를 분할하는 일련의 작업들은 모두 shared pool 래치를 획득한 후에만 가능하다. 주로 발생하지는 않으나, 동시에 여러 세션이 청크를 할당 받아야하는 경우, 혹은 하드파싱이 심한 경우 청크를 쪼개는 현상이 자주 발생하고 이로 인해 프리리스트에 수많은 작은 크기의 프리 청크들이 붙는 현상이 발생한다. 이 현상을 단편화라고 부르며, 단편화로 인해 프리리스트를 탐색하는 시간이 길어지고, 그만큼 shared pool 래치를 보유하는 시간이 늘어난다. 이로 인하여 shared p..
버퍼 캐시에서의 대기 이벤트들 - latch: cache buffers chains 버퍼 캐시를 사용하기 위해 해시 체인을 탐색하거나 변경하려는 프로세스는 반드시 해당 체인을 관리하는 cache buffers chains 래치를 획득해야 한다. 읽기 전용의 목적으로 체인을 탐색하는 경우에는 cache buffers chains 래치를 Shared 모드로 공유할 수 있어 경합을 줄이는데 도움이 된다. cache buffers chains 래치 경합이 발생하는 대표적인 경우는 다음과 같다. 1) 비율적인 SQL 2) 핫블록 (Hot Block) - 비효율적인 SQL 비효율적인 SQL 문장이 cache buffers chains 래치 경합의 가장 중요한 원인이다. 동시에 여러 프로세스가 넓은 범위의 인덱스나 넓은 범위의 테이블에 대해 스캔..