gc cr/current block congested

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

  • 해결책
    • 인터커넥트를 통한 메시지 요청 자체가 지나치게 많은 경우에는 LMS 프로세스의 메시지 확인 작에 지연이 발생.
      SQL 튜닝, 버퍼 캐시 튜닝, 핫 블록 해소 등을 통해 불필요하게 많은 블록 전송 요청이 발생하는 것을 방지.
    • LMS 프로세스가 필요한 CPU 자원을 원활하게 보장받지 못하는 경우에도 메시지 확인 작업의 지연이 발생.
      • LMS 프로세스에 대해 실시간 스케쥴링을 적용. 시분할 스케쥴링을 적용할 경우에는 LMS 프로세스의 NICE 값을
        낮추어서 보다 높은 우선순위를 할당.(10g R2부터는 기본적으로 실시간 스케쥴링 기법 사용)
      • CPU 자원이 충분한 경우에는 LMS 프로세스의 수를 증가시킨다.
      • OS 차원의 불필요한 작업을 제거해서 CPU 자원을 확보.

문서에 대하여

  • 최초작성자 : 김종원
  • 최초작성일 : 2011년 03월 25일
  • 이 문서는 오라클클럽 코어 오라클 데이터베이스 스터디 모임에서 작성하였습니다.
  • {*}이 문서의 내용은 (주)엑셈에서 출간한 'RAC Advanced OWI, Internals and Performance in Oracle 10g'를 참고하였습니다.*