오라클 성능 고도화 1권 140p 인덱스 분할 관련 책 내용 질문 0 2 1,206

by 한국초코우유 [Oracle 기초] [2017.03.08 16:03:03]



- 책 원문 내용 : 선행 트랜잭션(TX1)이 DML 중 인덱스 분할로 인해 autonomous 트랜잭션(TX2)를 수행하고 있는 중인데,

후행 트랜잭션(TX3)이 DML 하여 해당 인덱스 블록에 값을 Insert 하는 내용. 두번째 트랜잭션은 선행 트랜잭션이 인덱스 분할 완료할 때까지 대기 하며, Shared 모드에서 enq: TX - index contention 이벤트 만나게 된다.

 

- 독자의 생각 : TX3과 TX2가 경합이 발생,

TX2가 S 모드로 해당 블록을 수정 중이며, Enqueue 구조체의 소유자 목록에 S 모드로 갖고 있으므로

TX3은 해당 Enqueue 구조체의 대기에 목록에서 X 모드로 대기 하는것이 아닌가요?

 

따라서, 책 원문 내용 중 굵은 글씨체

'Shared 모드에서 enq: TX - index contention 이벤트 만나게 된다.'

의 의미가 독자의 생각과 맞는 건가요? 공부간 궁금해서 올려봅니다.

 

by 이재현 [2017.03.09 23:11:28]

안녕하세요

우선 Shared 모드라는것은 TM락과 TX락을 의미 하는것 같습니다.

일반적으로 인덱스 컨텐션은 일반적으로 과도한 인서트에서 발생하는데,

이경우 TM 과 TX락은 쉐어드 모드로 할당 받지만

해당 인덱스 리프 블럭은 인덱스 분할로 인하여 Exclusive Lock 모드로 블럭에 잠김이 발생해서

웨이팅이 발생합니다.

결론

 - 트랜잭션 : Shared Lock

 - 해당 블럭 : Exclusive Lock

 

건승 하세요.

감사합니다.


by 한국초코우유 [2017.03.10 13:56:30]

정리하자면,

TX1이 메인 트랜잭션이고, TX2가 autonomous 트랜잭션이므로,

TX3은 TX2(Shared Lock 4)가 설정한 Euqueue 구조체의 대기자 목록에서 대기할 것으로 보입니다.

따라서 TX3은 TX2가 설정한 Lock으로 인해 enq: TX - allocate ITL entry 를 대기하며,

TX2가 commit(인덱스 분할 완료) 되면 TX1의 트랜잭션 종료 여부와 관련없이

TX3의 트랜잭션은 진행될 것으로 예상됩니다.

수고하세요 ^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입