ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데이터 베이스 LOCK(잠금) DEAD LOCK(교착상태)
    Database/MS-SQL 2008. 10. 14. 10:50
    반응형


    개념

    한 사용자가 데이터를 사용하고 있을 경우에, 다른 사용자가 그 데이터를 변경하지 못하도록 하는 것
    데이터베이스의 일관성을 위해서 필요함

    트랜잭션 격리 수준 (Transaction Isolation Level)의 종류
    READ UNCOMMITTED (커밋되지 않은 읽기)
    READ COMMITTED (커밋된 읽기)  SQL Server 2005의 디폴트 값
    REPEATABLE READ (반복된 읽기)
    SNAPSHOT (스냅숏)
    SERIALIZABLE (직렬화 가능)

    여러사용자가 동시에 하나의 데이터에 접근해서 발생하는 문제
    Dirty Read (더티 리드, 커밋되지 않은 데이터를 읽기)
    Unrepeatable Read (반복되지 않은 읽기) 
    Phantom Read (팬텀, 가상읽기)




    교착상태(Deadlock)

    개념
    두 잠금이 서로 상대방의 잠금이 풀릴 때까지 계속 대기하는 상태.
    SQL Server가 자동으로 검색해서 한쪽을 희생시키는 방법으로 해결함
    되도록 교착상태가 일어나지 않도록 하는 것이 시스템의 성능에 바람직함.
    교착상태의 방지를 위한 권장방법
    개체의 사용 순서를 교착상태가 발생되지 않게 설계한다.
    트랜잭션 격리 수준을 디폴트인 READ COMMITTED로 하고, 되도록 그 이상의 격리수준으로 변경하지 않는다.
    하나의 트랜잭션에 너무 많은 쿼리를 넣지 않도록 한다. 



    BEGIN TRAN -- `1번사람
    UPDATE tranTEST set id = 111;
    ROLLBACK


    BEGIN TRAN -- 2번사람
    UPDATE tranTEST set id = 222;
    ROLLBACK


    -- 1번 사람이 실행하고 커밋이나 롤백안한상태에서 2번사람이 데이터를 실행하면 쿼리가 실행안된다

    -- 이것을 DEAD ROCK (교착상태)이라고 한다

    -- 두 잠금이 서로 상대방이 어떻게 할지 모르는상태다~!!!



    반응형

    댓글

Designed by Tistory.