gc buffer busy

  • 로컬 프로세스가 읽고자 하는 블록이 현재 리모트 노드의 요청에 의해 사용 중임을 의미.
  • Placeholder/Fixed-up 분류를 따르지 않는 독립 이벤트.
  • p1 : file#, p2 : block#, p3 : id#
  • buffer busy wait 이벤트나 read by other session 이벤트의 글로벌 버전
    • 같은 인스턴스의 다른 프로세스가 해당 블록을 변경 중일 때는 변경이 완료될 때까지 buffer busy wait 이벤트를 대기.
    • 같은 인스턴스의 다른 프로세스가 해당 블록을 디스크에서 읽어 들이는 중일때는 I/O 작업이 완료될 때까지 read by other session 이벤트를 대기.
      I/O 작업을 수행하는 프로세스는 db file sequential read 이벤트나 db file scattered read 이벤트를 대기
    • 같은 인스턴스의 다른 프로세스가 해당 블록을 다른 인스턴스로부터 전송 받고 있는 중이라면 전송이 끝날 때까지 gc buffer busy 이벤트 대기.
    • 다른 인스턴스의 요청에 의해 해당 블록이 전송 중이라면, 전송이 끝나고 사용이 완료될 때까지 gc buffer busy 이벤트를 대기.
  • 근본적인 발생 원인은 buffer busy wait 이벤트와 동일하며 해결책도 동일.
    • 핫 블록이 가장 일반적인 원인. 핫 블록을 분산시킴으로 문제 해결.
      세그먼트 레벨의 파티셔닝, 우편향 인덱스 현상 해소, 시퀀스 캐시 크기의 증가, PCTFREE 증가등.
    • FLM을 사용하는 경우에는 세그먼트 헤더 블록이 버퍼 경합의 원인이 되므로 FREELIST GROUPS 속성을 노드 수와 동일하게 설정.
    • SQL 튜닝을 통해 불필요하게 많은 블록이 교환되는 것을 방지.
    • 동일한 세그먼트에 대한 대량의 DML 작업이 여러 노드에서 동시 다발적으로 발생하면 어플리케이션 실행을 적절히 분배.

문서에 대하여

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