Oracle RAC를 운영하다 보면, 데이터베이스 성능 최적화를 위해 다양한 기능과 설정을 검토하게 됩니다. 그중 하나가 바로 DRM(Dynamic Resource Mastering)입니다.
DRM은 Oracle RAC 환경에서 데이터 블록의 리소스 마스터링을 동적으로 관리하는 기능입니다. 기본적으로 RAC는 여러 노드에서 공유 디스크에 접근하기 때문에, 특정 데이터 블록에 대한 액세스를 조율하기 위한 "리소스 마스터"를 지정합니다. 이 마스터는 특정 노드에서 관리하며, 다른 노드가 해당 블록에 액세스하려면 마스터 노드와 통신해야 합니다.
DRM은 데이터 액세스 패턴에 따라 마스터 노드를 동적으로 변경하여, 블록 액세스의 효율성을 극대화합니다. 예를 들어, 특정 데이터 블록이 주로 한 노드에서만 사용된다면, 해당 블록의 마스터를 그 노드로 리마스터링하여 통신 오버헤드를 줄이는 것입니다.
하지만 활성화에는 몇 가지 주의할 점도 있습니다:
리마스터링(Remastering): DRM은 데이터 블록의 사용 패턴을 분석하고, 필요할 경우 블록의 마스터를 특정 노드에 다시 할당하는 과정.
이 과정에서 추가적인 작업이 발생하며, 시스템의 부하를 일시적으로 증가시킬 수 있습니다.
1000번 이상 다른 쪽 노드에서 Writing이 발생하면 Mastering 정보를 옮기는 Remastering이 발생하는데
이때 모든 gc request 가 중단되기 때문에 느려지는 현상이 발생한다고 합니다.
프리징(Freezing): 리마스터링이 발생하면, 해당 블록에 대한 액세스가 잠시 중단됩니다. 이를 "프리징"이라고 부르며, 이는 사용자가 느낄 정도로 성능에 영향을 미칠 수도 있습니다. 프리징이 자주 발생하면 오히려 성능 저하로 이어질 수 있습니다.
DRM은 노드 간 데이터 액세스 패턴이 명확하게 구분될 때 가장 유용합니다. 예를 들어, 노드 A가 주로 특정 테이블의 데이터를 처리하고, 노드 B가 다른 테이블을 주로 처리하는 경우입니다. 하지만 데이터 액세스 패턴이 불규칙하거나, 노드 간 데이터 공유가 빈번하다면, DRM 활성화가 오히려 성능을 악화시킬 가능성이 있습니다.
DRM 활성화 상태를 확인하거나 조정하려면 다음과 같은 명령어를 사용할 수 있습니다:
0이면 DRM 꺼져있는 상태show parameter "_gc_policy_time";
name type value
-------------------------------------------------
_gc_policy_time integer 0
-- spfile에서 변경 후 재기동
alter system set “_gc_undo_affinity”=FALSE scope=spfile sid=‘*’;
alter system set “_gc_policy_time”=0 scope=spfile sid=’*‘;