LOCK, ISOLATE, 동시에 같은 데이터에 대한 접근 순서 처리 방법 0 4 1,071

by 구루씨 [Oracle 기초] [2016.12.07 10:09:31]


어리석은 질문 하나 드립니다.

엊그제 테이블 락이 걸려 끙끙 앓고 락에 대해 공부하고 있는 초보자입니다.

 

commit 이나 rollback 하시면 transaction 종료되면서 lock이 해제됩니다.

 

라는 답변을 받고 commit이나 rollback을 하면 된다고 알게 되었습니다만,

 

뒤에 있는 transaction이 뭔가 찾아보다가 머리가 더 복잡해져버렸습니다.

 

트랜잭션의 특징 4가지까지 공부하게되었는데요

=================================================================================

ACID

Atomicity / Consistency / Isolation / Durablity

여기에서 Isolation의 설명을 보면

고립성

트랜잭션들이 서로 독립성을 보장받으며 수행될 수 있도록 도와준다.

=================================================================================

그릐고

동시에 같은 데이터에 대해 접근 요구를 할 때 트랜잭션에 순서를 부여해서 순차적으로 결과를 처리한다.

라고 되어있는데요.

 

이런식으로 순차적으로 처리한다면,

 

LOCK을 걸기 이전에 순서를 부여하여 해당 트랜잭션 마다 순차적 처리를 하면 될 것인데

왜 LOCK을 거는지 궁금합니다.

 

물론 선인들의 지혜와 경험으로 만들어진 현재 체계가 문제가 없겠지만

궁금증을 달랠 방법이 없어 질문 드립니다.

by 우리집아찌 [2016.12.07 10:35:01]

순차적으로 처리하기위해 락을 거는겁니다.

동시성 제어 라고 찾아보세요


by 구루씨 [2016.12.19 16:29:56]

지금은 어느정도 이해가 된 상황입니다만 ㅠ

순차적으로 처리하기 위해 동시성을 제어한다라는게 이해가 안됬었네요 ㅠㅠ

현재 이해하고 있는 내용은

COMMIT 시점을 기준으로 각 세션별 데이터는 동시성을 가진다

따라서 순차적 처리를 위해 LOCK을 건다 라고 이해하면 될까요?


by 미스틱매니아 [2016.12.07 17:30:22]

그냥 순차적으로 처리한다는 부분을 TX단위가 아니라 각 ROW 혹은 TABLE단위로 나눠서 하는거라고 생각하하시면 됩니다.

LOCK은 간단하게 줄이면 아직 내순서 안끝났으니 뒷TX는 건들지 말라는 거고요.

완전히 순서대로는 아니더라도, LOCK Wait가 발생시 어느정도는 줄을 서서 기다리게 됩니다.

 

만약 모든 TX에 대해 순번을 매기고 순서대로 실행한다면...데이터베이스 LOCK을 쓰는거랑 같은 상황이 되겠죠.


by 구루씨 [2016.12.19 16:39:24]

1. 트랜잭션은 로우 혹은 테이블 단위로 나눠 순차적으로 처리한다.

2. LOCK은 트랜잭션 단위로 세션을 구분하여 뒷 TX를 보호하는 역할을 하는 거군요.

3. LOCK Wait 발생 시

세션들은 줄을 서서 기다리지만 완전한 순서는 아니다.

4. 데이터베이스 LOCK

모든 TX에 대해 순번을 매기며 순서대로 실행한다.

감사합니다.

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