Gc cr/current block congested

EXEM Knowledge Base

(Gc current block congested에서 넘어옴)
Jump to: navigation, 찾기

목차

[편집] Basic Info

gc cr/current block congested 이벤트는 gc cr/current request 이벤트에 대한 Fixed-up 이벤트로, 홀더 노드로부터 블록 이미지를 전송 받는 과정에서 혼잡에 의한 지연이 발생했다는 것을 의미한다. gc cr/current request 이벤트가 gc cr/current block congested 이벤트로 변경되는 흐름은 다음과 같다.

  • 요청 노드의 유저 프로세스가 특정 데이터 블록을 읽고자 한다.
  • 유저 프로세스는 해당 데이터 블록의 적절한 버전이 로컬 버퍼 캐시에 없는 것을 확인하고, 마스터 노드의 LMS 프로세스에 블록 전송을 요청한다. 유저 프로세스는 응답을 받을 때까지 gc cr/current request 이벤트를 대기한다.
  • 홀더 노드의 LMS 프로세스는 요청 큐(Request Queue)로부터 요청 메시지를 확인한다. 만일 메시지가 요청 큐에 도착한 시간과 LMS 프로세스가 메시지를 확인한 시간이 1ms 이상 차이가 나면, 즉 LMS 프로세스가 요청 메시지를 확인하는 과정에서 1ms 이상의 지연이 발생하면 오라클은 인터커넥트에 혼잡이 발생했다고 판단한다. LMS 프로세스는 응답 메시지에 혼잡이 발생했음을 같이 알린다.
  • 유저 프로세스는 블록을 전송 받은 후 응답 메시지로부터 혼잡이 발생했음을 확인하고, gc cr/current request 이벤트를 Fixed-up 이벤트인 gc cr/current block congested 이벤트로 변경한다.

[편집] Parameter & Wait Time

[편집] Wait Parameters

gc cr/current block congested 이벤트와 같은 Fixed-up 이벤트는 P1, P2, P3 값이 별도로 부여되지 않으며, Placeholder 이벤트(여기서는 gc cr request 이벤트)와 동일한 값을 가지는 것으로 해석하면 된다.

[편집] Wait Time

[편집] Check Point & Solution

[편집] LMS의 지연 이유와 해결책

LMS 프로세스가 요청 메시지를 확인하는 과정에서 지연(1ms 이상)이 발생하는 이유와 해결책은 다음과 같다.

  • 인터커넥트를 통한 메시지 요청 자체가 지나치게 많은 경우에는 LMS 프로세스의 메시지 확인 작업에 지연이 발생하게 된다. 따라서 SQL 튜닝이나 버퍼 캐시 튜닝, 핫 블록 해소 등을 통해 불필요하게 많은 블록 전송 요청이 발생하는 것을 방지하는 것이 해결책이 된다.
  • LMS 프로세스가 필요한 CPU 자원을 원활하게 보장받지 못하는 경우에도 메시지 확인 작업의 지연이 발생할 수 있다. LMS 프로세스의 성능을 극대화하는 방법을 간략히 정리하면 다음과 같다.
    • LMS 프로세스에 대해 실시간 스케쥴링을 적용한다. 시분할 스케쥴링을 적용할 경우에는 LMS 프로세스의 NICE 값을 낮추어서 보다 높은 우선순위를 할당 받도록 한다. 오라클 10g R2부터는 LMS 프로세스는 기본적으로 실시간 스케쥴링 기법을 사용한다.
    • CPU 자원이 충분한 경우에는 LMS 프로세스의 수를 증가시킨다.
    • OS 차원의 불필요한 작업을 제거해서 CPU 자원을 확보하는 것 또한 중요하다. 가령 메모리 부족으로 인해 페이징(Paging) 작업이 빈번하게 발생한다면 LMS 프로세스의 성능에 부정적인 영향을 주게 된다.

[편집] Event Tip

[편집] RAC의 Contention & Congestion

RAC에서 경합(Contention)과 혼잡(Congestion)이라는 두 용어가 의미하는 바를 정확히 이해할 필요가 있다. “경합”은 홀더 노드의 LMS 프로세스가 블록을 처리하는 과정에서 경쟁에 의한 지연이 발생했음을 의미하는 것이고, “혼잡”은 홀더 노드의 LMS 프로세스가 요청 메시지를 처리하는 과정, 즉 블록을 처리하기 직전의 과정에서 지연이 발생했음을 의미한다. 이 두 현상은 많은 경우 동시에 발생하지만, 경우에 따라서는 서로 무관하게 발생한다. 두 현상의 공통점과 차이점을 다시 한번 정리하면 아래와 같다.

  경합(Contention) 혼잡(Congestion)
발생사유 - LMS 프로세스와 로컬 프로세스가 같은 블록을 사용하고자 할 때

- LMS 프로세스가 처리할 블록에 대해 리두 플러시에 의한 지연이 발생할 때

- 홀더 노드의 요청 큐에 메시지가 너무 빠른 빈도로 도착해서 LMS 프로세스가 원활하게 메시지를 확인하지 못할 때

- LMS 프로세스가 충분한 자원을 할당 받지 못해서 요청 큐의 메시지를 원활하게 확인하지 못할 때

대기이벤트 gc cr/current block busy

gc cr/current grant busy

gc cr/current block congested

gc cr/current grant congested

튜닝방법 - SQL 튜닝, 버퍼 캐시 튜닝 등을 통해 블록 요청 회수를 줄임

- 블록 분산을 통해 동일 블록에 대한 경쟁을 줄임

- LGWR 프로세스의 성능 개선

- 리두 로그 I/O 성능 개선

- SQL 튜닝, 버퍼 캐시 튜닝 등을 통해 블록 요청 회수를 줄임

- 블록 분산을 통해 불필요한 블록 전송을 줄임

- LMS 프로세스의 성능 개선

[편집] Analysis Case