5. RAC모니터링과 트레이스

5.1 동적성능 뷰(Dynanmic Performance Views)
오라클의 전통적인 동적 성능 뷰들, 예를 들어 V$SYSTAT, V$SESSTAT, V$SYSTEM_EVENT, V$SESSION_EVENT 뷰와 각종 통계(Stat)뷰 들은 RAC에서도
여전히 중요한 정보를 제공함
하지만 RAC만을 위해 추가적인 정보를 제공하는 일부 뷰들의 의미를 이해하면 심도 깊은 분석을 수행할수 있음

1) V$INSTANCE_CACHE_TRANSFER
Instance별, Class별 CR Block과 Current Block의 전송(Send or Serve)에 대한 통계 값을 제공함
각 Instance별로 블록을 전송하는 과정에서 생긴 경합이나 지연의 정도를 분석하는데 유연한 정보를 제공함

Column명 Description




---






















INSTANCE 클러스터를 구성하는 Instance번호

  • 첫번째 Instance 가 "0"부터 시작함
    CLASS 블록의 종류(Class)
  • 다음과 같은 16개의 값을 지님
    ● 1st level bmb: ASSM에서 사용하는 L1 BMB 블록
    ● 2nd level bmb: ASSM에서 사용하는 L2 BMB 블록
    ● 3rd level bmb: ASSM에서 사용하는 L3 BMB 블록
    ● bitmap block: LMT에서 사용하는 비트맵 블록
    ● bitmap index block
    ● data block: 일반 데이터(테이블/인덱스) 블록
    ● extent map: 익스텐트 정보를 관리하는 익스텐트 맵 블록
    ● file header block
    ● free list: FLM에서 사용하는 Free List Group 블록
    ● save undo block
    ● save undo header
    ● segment header: 세그먼트 헤더 블록
    ● sort block
    ● undo block: 언두블록
    ● undo header: 언두 헤더블록
    ● unused
    참고) L1/L2/L3 BMB블록과 Free List Group블록에 대해서는 4장에서 자세히 다룸
    CR_BLOCK 경합이나 혼잡없이 전송된 CR Block 수
  • 다음대기 이벤트들과 관련이 있음
    ● gc cr block 2-way/3way
    ● gc cr grant 2-way
    CR_BUSY 전송 과정에서 경합(Contention)을 겪은 CR블록의 수.
  • 글로벌캐시 동기화에서 경합(Busy)의 의미에 대해서는 3장에서 자세하게 논의한바 있음
  • 만일 CR_BUSY 컬럼의 값이 지나치게 높다면 노드 간에 블록 경합이 빈번함을 의미함
  • 다음대기 이벤트들과 관련이 있음
    ● gc cr block busy
    ● gc cr grant congested
    CR_CONGESTED 전송 과정에서 혼잡(Congestion)을 겪은 CR블록의 수.
  • 글로벌캐시 동기화에서 혼잡(Congested)의 의미에 대해서는 3장에서 자세하게 논의한바 있음
  • 만일 CR_CONGESTED컬럼의 값이 지나치게 높다면, 글로벌 캐시 동기화의 부하가 지나치게 높거나 LMS프로세스의 작동이 원할하지 않아 블록요청 처리에서 지연이 발생한다는 것을 의미
  • 다음대기 이벤트들과 관련이 있음
    ● gc cr block congested
    ● gc cr grant congested
    CURRENT_BLOCK 경합이나 혼잡없이 전송된 Current Block 수
  • 다음대기 이벤트들과 관련이 있음
    ● gc current block 2-way/3way
    ● gc current grant 2-way
    CURRENT_BUSY 전송 과정에서 경합(Contention)을 겪은 Current블록의 수.
  • 글로벌캐시 동기화에서 경합(Busy)의 의미에 대해서는 3장에서 자세하게 논의한바 있음
  • 만일 CURRENT_BUSY 컬럼의 값이 지나치게 높다면 노드 간에 블록 경합이 빈번함을 의미함
  • 다음대기 이벤트들과 관련이 있음
    ● gc current block busy
    ● gc current grant congested
    CURRENT_CONGESTED 전송 과정에서 혼잡(Congestion)을 겪은 Current블록의 수.
  • 글로벌캐시 동기화에서 혼잡(Congested)의 의미에 대해서는 3장에서 자세하게 논의한바 있음
  • 만일 CURRENT_CONGESTED컬럼의 값이 지나치게 높다면, 글로벌 캐시 동기화의 부하가 지나치게 높거나 LMS프로세스의 작동이 원할하지 않아 블록요청 처리에서 지연이 발생한다는 것을 의미
  • 다음대기 이벤트들과 관련이 있음
    ● gc current block congested
    ● gc current grant congested

이 뷰는 시스템 전체의 통계(System-wide Statistics)만을 제공한다는 단점이 있음
자세한 분석을 수행하려면 세그먼트(Segment) 레벨의 통계 값이 필요하나 세그먼트 레벨에서 V$INSTANCE_CACHE_TRANSFER뷰와 같은 종류의 정보를
제공하는 뷰는 존재하지 않으며, V$SEGMENT_STATISTICS 뷰를 통해 비슷한 정보를 얻을수 있음

2) V$CR_BLOCK_SERVER
CR Block 요청에 의한 블록 전송(Send or Serve)에 대한 통계 값을 제공
이 뷰를 통해 락 다운그레이드나 Light Wegiht Rule의 적용 회수와 같은 부가적인 정보들 알수 있음

Column명 Description






--






















CR_REQUESTS CR블록 요청에 의해 전송된 CR블록의 수
CURRENT_REQUESTS CR블록 요청에 의해 전송된 Crrent 블록의 수.

  • CR요청에 대해서 Current블록으로 조건을 만족할 수 있는 경우에는 오라클은 CR블록을 별도로생성하지 않고 Current블록을 전송함
  • CR_REQUESTS 값과 CURRENT_REQUESTS 값의 합은 gc cr blocks served(V$SYSSTAT)와 기본적으로 같은 의미이지만, 값에 있어서 약간의 차이가 존재함
    DATA_REQUESTS 데이터 블록에 대한 블록전송 회수.
  • 데이터 블록은 일반적으로 테이블과 인덱스의 데이터를 보관하는 블록을 의미하며, 이 뷰에서는 언두블록과 언두 세그먼트 헤더 블록을 제외한 모든 블록을 의미함
    UNDO_REQUESTS 언두 블록에 대한 전송 회수
    TX_REQUESTS 언두 세그먼트 헤더 블록에 대한 전송 회수.
  • 언두 세그먼트 헤더 블록에 트랜잭션(Transaction)정보가 관리되기 때문에 TX_REQUESTS라는 이름이 부여된것으로 보임
  • CR_REQUESTS + CURRENT_REQUESTS = DATA_REQUESTS + UNDO_REQUESTS + TX_REQUESTS의 관계를 지니며, 양쪽모두 인스턴스 레벨의 CR요청에 대해 전송된 블록의 총수를 의미함
  • RAC시스템에서 블록전송을 담당하는 것은 LMS 프로세스이기 때문에, 이 값은 현재 인스턴스 LMS프로세스들이 CR요청에 대해 전송한 블로긩 총수를 의미함
  • GV$뷰를 통해 클러스터 전체 레벨의 블록 수를 구할 수 있음
    CURRENT_RESULTS Number of requests for which no changes were rolled out of the block returned to the requesting instance
    PRIVATE_RESULTS Number of requests for which changes were rolled out of the block returned to the requesting instance, and only the requesting transaction can use the resulting CR block
    ZERO_RESULTS Number of requests for which changes were rolled out of the block returned to the requesting instance. Only zero-XID transactions can use the block.
    DISK_READ_RESULTS Number of requests for which the requesting instance had to read the requested block from disk
    FAIL_RESULTS Number of requests that failed; the requesting transaction must reissue the request
    FAIRNESS_DOWN_CONVERTS _FAIRNESS_THRESHOLD 파라미터 값에 저장된 임계치를 초과한 Current 블록 전송에 의한 락 다운그레이드가 발생한 회수.
  • _FAIRNESS_THRESHOLD에 의한 락 다운그레이드의 의미는 제 3장에서 상세히 논의한 바 있음
    FAIRNESS_CLEARS Number of times the "fairness counter" was cleared. This counter tracks the number of times a block was modified after it was served.
    FREE_GC_ELEMENTS Number of times a request was received from another instance and the X lock had no buffers
    FLUSHES CR 요청에 의한 블록 전송 과정에서 리두 플러시(Redo Flush)가 발생한 회수.
    FLUSHES_QUEUED 리두 플러시가 즉각 처리되지 못하고 큐에 쌓인 회수.
    FLUSH_QUEUE_FULL 리두 플러시 요청에 의한 큐가 꽉 찬 회수.
  • FLUSHS_QUEED 값이나 FULL_QUEUE_FULL 값이 높다면 리두 플러시의 성능에 문제가 있거나 더티 블록전송이 과다하게 많이 발생한다는 것을 의미함
    FLUSH_MAX_TIME 리두 플러시에 소모된 최대 시간. (Mircrosecond 단위)
    LIGHT_WORKS Light Weight Rule이 적용된 횟수.
  • Light Weight Rule의 의미는 3장에서 상세히 논의한 바 있음
    ERRORS Number of times an error was signalled by an LMS process

아래의 스크립트는 필자의 테스트 시스템에서 V$CR_BLOCK_SERVER 뷰를 조회한 것임.

SELECT * FROM V$CR_BLOCK_SERVER;






---
CR_REQUESTS : 27675834
CURRENT_REQUESTS : 1021766
DATA_REQUESTS : 27675834
UNDO_REQUESTS : 14205
TX_REQUESTS : 1007561
CURRENT_RESULTS : 11686523
PRIVATE_RESULTS : 7
ZERO_RESULTS : 16767319
DISK_READ_RESULTS : 8
FAIL_RESULTS : 243743
FAIRNESS_DOWN_CONVERTS : 1438901
FAIRNESS_CLEARS : 0
FREE_GC_ELEMENTS : 0
FLUSHES : 9189084
FLUSHES_QUEUED : 0
FLUSH_QUEUE_FULL : 0
FLUSH_MAX_TIME : 20206751
LIGHT_WORKS : 2840896
ERRORS : 0

3) V$CURRENT_BLOCK_SERVER
V$CR_BLOCK_SERVER 뷰가 CR 블록 전송에 대한 통계 값을 제공하는 반면 이 뷰는 Current 블록 전송에 대한 통계 값을 제공함.
이 뷰를 통해 Current 블록 전송과 관련된 핀(Pin), 플러시(Flush), 퓨전 기록(Fusion Write) 작업의 수행 성능을 확인할 수 있음.

  • 핀(Pin)에 많은 시간이 소모되었다면 동일 블록에 대한 경합(Contention)이 심하다는 것을 의미함.
  • 리두 플러시(Redo Flush)에 많은 시간이 소모되었다면 LGWR 프로세스의 성능에 문제가 있음을 암시함.
  • 퓨전 기록(Fusion Write)에 많은 시간이 소모되었다면 DBWR 프로세스의 성능에 문제가 있음을 암시함.

Column명 Description



--






















PIN1 1 밀리 초안에 핀(Pin)을 획득한 회수
PIN10 10 밀리 초안에 핀(Pin)을 획득한 회수
PIN100 100 밀리 초안에 핀(Pin)을 획득한 회수
PIN1000 1000 밀리 초안에 핀(Pin)을 획득한 회수
PIN10000 10000 밀리 초안에 핀(Pin)을 획득한 회수
FLUSH1 1 밀리 초안에 리두 플러시(Redo Flush)를 수행한 회수
FLUSH10 10 밀리 초안에 리두 플러시(Redo Flush)를 수행한 회수
FLUSH100 100 밀리 초안에 리두 플러시(Redo Flush)를 수행한 회수
FLUSH1000 1000 밀리 초안에 리두 플러시(Redo Flush)를 수행한 회수
FLUSH10000 10000 밀리 초안에 리두 플러시(Redo Flush)를 수행한 회수
WRITE1 1 밀리 초안에 퓨전 기록(Fusion Write)을 수행한 회수
WRITE10 10 밀리 초안에 퓨전 기록(Fusion Write)을 수행한 회수
WRITE100 100 밀리 초안에 퓨전 기록(Fusion Write)을 수행한 회수
WRITE1000 1000 밀리 초안에 퓨전 기록(Fusion Write)을 수행한 회수
WRITE10000 10000 밀리 초안에 퓨전 기록(Fusion Write)을 수행한 회수

아래의 스크립트는 필자의 테스트 시스템에서 V$CURRENT_BLOCK_SERVER 뷰를 조회한 것임.
리두 플러시(Redo Flush)와 퓨전 기록(Fusion Write)에 많은 시간이 소모되는 것을 확인할 수 있으며, 이로부터 I/O 시스템의 성능이 전반적으로 느리다는 추론이 가능함.

SELECT * FROM V$CURRENT_BLOCK_SERVER










-
PIN1 : 53642652
PIN10 : 8079
PIN100 : 126715
PIN1000 : 2276
PIN10000 : 643
FLUSH1 : 283
FLUSH10 : 5485
FLUSH100 : 67842
FLUSH1000 : 12403
FLUSH10000 : 311
WRITE1 : 0
WRITE10 : 18715
WRITE100 : 947335
WRITE1000 : 3607630
WRITE10000 : 863429








---

4) V$GCSPFMASTER_INFO
데이터 파일(10g R1) 또는 세그먼트(10g R2) 레벨로 리소스 리마스터링(Resource Remastering)의 발생 회수 및 현재마스터, 이전마스터의 인스턴스 번호를 확인할수 가능한 뷰

  • 4장에서 설명한 바와 같이 리소스 리마스터링은 _GC_AFFINITY_TIME, _GC_AFFINITY_LIMIT, _GC_AFFINITY_MINIMUM의 세 파라미터에 의해 제어됨
  • 일반적으로 리마스터링은 RAC시스템의 성능에 긍정적인 영향을 미치므로 특별한 이유가 없다면 기본값을 사용함

Column명 Description





-














-
FILE_ID 리마스터링이 발생한 데이터 파일아이디
OBJECT_ID 리마스터링이 발생한 세그먼트의 아이디(10g R2부터)
CURRENT_MASTER 현재 마스터 노드의 번호
PREVIOUS_MASTER 이전 마스터 노드의 번호
REMASTER_CNT 리마스터링 발생 회수

5) V$SEGMENT_STATISTICS
세그먼트 레벨에서 글로벌 캐시 동기화 작업량에 대한 중요한 정보를 제공함
V$SEGMENT_STATISTICS뷰가 제공하는 정보중 gc buffer busy, gc cr blocks received,gc current blocks received값을 참조하면 세그먼트 단위로 버퍼 경합의 발생빈도와 CR블록, Current블록의 전송회수를 확인함

select rownum, distinct statistic_name from v$segment_statistics














-
1 ITL waits
2 buffer busy waits
3 db block changes
4 gc buffer busy
5 gc cr blocks received
6 gc current blocks received
7 logical reads
8 physical reads
9 physical reads direct
10 physical writes
11 physical writes direct
12 row lock waits
13 segment scans
14 space allocated
15 space used

6) V$CLIENT_STATS, V$SERV_MOD_ACT_STATS, V$SERVICE_EVENT
이 세 개의 뷰의 공통점은 End to End Tracing과 관련이 있음
5.4 장에서 자세히 설명할 End to End Tracing은 오라클 10g에서 새롭게 추가된 성능관리 기법의 하나로 RAC와 같은 멀티 인스턴스 환경에서 효과적으로 성능데이터를 수집하고 분석할 수 있는 기능을 제공함

7) V$GES_ENQUEUE
RAC에서의 글로벌 락과 관련된 정보를 제공함

  • GRD를 구성하는 요소인 락 데이터베이스의 락 구조체에 해당함
  • 자세한 설명은 2.1장 과 3.2장을 참조

8) V$GES_RESOURCE
RAC에서의 글로벌 락과 관련된 정보를 제공함

  • GRD를 구성하는 요소인 락 데이터베이스의 락 구조체에 해당함
  • 자세한 설명은 2.1장 참조

9) V$GC_ELEMENT
RAC의 GRD에서 글로벌 버퍼의 상태에 대한 정보를 제공함

  • GRD의 핵심 정보인 글로벌 버퍼의 상태(락을 획득한 모드, 역할, PI여부 등)에 대한 정보 제공
  • V$BH 뷰와 V$GC_ELEMENT뷰를 함께 활용하면 글로벌 버퍼 상태를 확인할수 있음

문서에 대하여
최초작성자 : 임주영
최초작성일 : 2010년 10월 08일
이 문서는 오라클클럽 코어 오라클 데이터베이스 스터디 모임에서 작성하였습니다.
이 문서의 내용은 (주)엑셈에서 출간한 'PRACTICAL OWI IN ORACLE 10G'를 참고하였습니다.