안녕하세요... ^^;
2001년도 이제 한달 남짓 남아있네여.... ^^ 오늘은 락에 대해서 간단히 알아보도록 하겠습니다. 락에서 가장 중요한 건 앞서 말씀드렸다시피, 일관성입니다. 9.4.1 락 이란? 예를들어 같은 데이타베이스에 두사람이 같은 작업을 동시에 한다고 가정해 볼까여? 1. UPDATE 테이블 SET 금액=금액-50000 WHERE 계좌번호_필드='계좌번호' --> A 2. SELECT * FROM 테이블 --> B 위의 작업을 두 사람이 동시에 합니다. 계좌번호에 UPDATE를 합니다. 그러나, 아직 COMMIT를 시키진 않았어여. 그럼, 완료된게 아니겠죠? 이런 상황에서 다른 사람이 2번 작업을 실행시키면 MS_SQL에서는 어떻게 반응할까여? 여러분이 쿼리분석기를 열어보시고 직접 테스토 해 보시기 바랍니니다. 아래 그림을 보시져... 위의 그림을 보시면 아시겠지만, 일단 트랜잭션처리가 시작이 되고, UPDATE 를 시켰습니다. 아직 commit 이나 rollback 처리를 하지 않았기 때문에 완료된게 아니지여. 이런 상황에서 오른쪽에서 다시 select 명령을 내렸을때,,, 대기하고 있어야 합니다. 여기에서 바로 결과를 뿌려주게 된다면,,, 일관성이 떨어지게 되는것이죠. 왜냐하면 A라는 사람이 commit을 할지, rollback를 할지는 아직 모르기 때문입니다. 위의 경우가 바로 블럭킹입니다. 테이블에 락이 걸려 있지요. 9.4.2 락 정보 보기. 시스템 저장 프로시져를 이용해서 락 시스템의 락정보를 알아보지요. sp_lock 란 프로시져가 있습니다. sp_lock는 현 시스템의 락 정보를 상세하게 보여주는 프로시져 입니다. EM에서 정보를 함 볼까여??? 어떠십니까?? 자세히 나오지여? 9.4.3 락의 데이타 영역. SQL 서버에서 락이 걸리는 데이터 영역의 기본 단위는 각 레코드단위이며,KEY,PAGE,EXTENT,TABLE,DATABASE 단위까지 확장될수 있습니다. 아래의 표는 락이 걸리는 영역 단위에 관한 표를 나타내고 있습니다.
9.4.4 락의 종류. 1. 공유 락(Shared Lock)(S) SELECT 문과 같이 클라이언트가 읽기 작업하는 데이터 영역에 걸리는 락입니다. 기본적으로 공유락은 데이터를 읽는 동안에만 해당 영역에 걸리게 되며 현재 트랜잭션이 종료되지 않아 락이 걸려있는 상태에서도 다른 트랜잭션에서도 추가적으로 락을 걸수 있습니다. 2. 단독 락(Exclusive Lock)(X) INSERT,UPDATE,DELETE 문등 클라이런트가 쓰기 작업을 하는 데이터 영역에 걸리는 락입니다. 단독 락에 걸리는 다른 트랜잭션에서는 추가적인 Exclusive Lock을 걸수가 없습니다. 3. 업데이트 락(Update Lock(U) Update 문 같이 클라이언트가 데이터를 수정하려고 하는 데이터 영역에 거리는 락입니다. 서버에서는 update 문 처리는 데이터를 수정하기전에 먼저 Update Lock을 걸고 해당 데이터영역을 읽으며 Exclusive Lock을 건후에 데이터를 수정하게 됩니다. 4. 내재 잠금(Intent Lock) 이것은 서버에서 데이터베이스나 테이블 내의 일부 데이터 영역에 이미 공유락이나 단독락이 걸려있다는 것을 다른 커넥션에게 알리기 위해서 사용하는 락입니다. Intent Lock은 이러한 알림의 역할을 합니다. 데이터 일부에 락이 걸렸을 경우 테이블에 Intent Lock이 걸려 다른 트랜잭션에서 테이블에 Exclusive Lock을 거는 것을 막습니다. 새로운 트랜잭션은 Exclusive Lock을 걸 수 있는지 확인 작업을 하는 대신에 Intent Lock을 확인만 하면 되므로 성능이 향상됩니다. Intent Lock은 세가지가 있습니다. Intent Shared(IS) : 하위 오브젝트에 Shared Lock이 걸렸을 경우 Intent Exclusive(IX) : 하위 오브젝트에 Exclusive Lock이 걸렸을 경우 Shared with Intent Exclusive(SIX) : 하위 오브젝트에 Shared Lock과 Exclusive Lock이 걸렸을 경우 5. 스키마 락(Schema Lock) 스키마 락은 테이블이나 인덱스의 스키마를 참조하는 작업이 수행중일때 해당 테이블이나 인덱스가 수정되거나 지워지는 것을 막기 위해서 사용하는 락입니다. 오늘은 여기까지 락에 대해서 확인해 보았습니다. 어려운거 별로 없지여??? ^^; 행복하세요.
|
|||||||||||||||||