h1.Row Cache Lock
h2.Row Cache 란.
- Dictionary Cache 라고도 하며, SGA 내에 존재하며, Dictionary 정보를 가짐
- Dictionary 내용을 변경하고자 할 때, 그에 해당하는 Row Cache Object 에
대한 Row Cache Lock 획득 해야 한다. - Sequence의 Nextval을 획득하는 과정에서 Dictionary 정보의 변경이 필요한 경우에
Sequence에 해당하는 row cache object 에 대해서 row cache lock 을
SSX(Shared Sub-Exclusive)모드로 획득해야 한다. - SSX 모든 간에는 상호 호환성이 없으므로 동시에 많은 프로세스가 동일 Sequence에
대해 nextval을 호출하는 경우 row cache lock 에 대한 경합이 발생한다. - Row cache lock 이벤트의 P1=cache#으로 정확한 객체에 대한 정보가 아닌
Row cache의 종류를 나타낸다. - Row cache lock 은 Enqueue 구조를 사용하지 않으며 row cache object 정보 안에
존재하는 락 보유 목록(Owner list)과 락 대기목록(Waiter list)을 통해서
블록킹 매커니즘을 구현한다. - V$ROWCACHE : 개별 row cache object 가 아닌 row cache 전체(종류)의
활동성에 대한 통계정보 제공 - V$ROWCACHE_PARENT : 실제 개별 row cache object 의 활동성을 파악 가능
- Row cache lock 대기이벤트의 한 가지 불편한 점은 실제 객체 정보가 아닌 객체의
종류에 대한 정보만 제공한다는 것이다. 이로 인해 정확하게 어떤 row cache object
가 문제가 되는지 파악하기 어렵다. Row cache 덤프를 이용하면 실제 객체에 대한
정보까지 얻을 수 있다.
- Shared Sub-Exclusive 모드의 의미는 객체 전체에 대해서는 Share 모드로, 객체의 일부분에
대해서는 Exclusive 모드로 락을 획득 하는 것이다. Sequence.Nextval 호출에 의해
Sequence Dictionary 정보가 변경되는 경우, Sequence 자체를 변경하는 것이 아니고
Sequence 의 "다음값"만을 변경시키는 것이므로 SSX 모드로 row cache lock 을
획득 하는 것이다.