none
DB 테이블에 INSERT나 UPDATE시 다른 사용자가 해당 테이블을 조회할 수 없음 RRS feed

  • 질문

  • 안녕하세요.

    SQL을 공부하다보니 DB 테이블에 INSERT나 UPDATE시 다른 사용자가 해당 테이블을 조회할 수 없는 현상을 발견했는데요, 위와 같은 현상이 정상적인건가요? 만일 그렇다면 DB 생산성이 매우 낮아질텐데 어떻게 극복하거나 우회할 수 있는 방법이 없는지도 궁금합니다.
    2019년 10월 22일 화요일 오후 11:54

답변

  • 안녕하세요,

    말씀하신 현상은 공유 잠금 및 배타적 잠금으로 인한 것입니다. SQL Server에서 Tranjaction이 발생하면 필연적으로 잠금(LOCK)도 발생하기 마련입니다. 그렇지 않으면 데이터의 일관성을 보장할 수 없기 때문입니다. 이에 관한 자세한 사항은 다음 링크의 내용을 참고하시기 바랍니다.

    Lock에 대한 구체적 정리

    위 링크의 내용을 읽어보시면 아시겠지만, MSSQL Server는 다른 DBMS(DataBase Management System)과 달리, 읽기 작업의 경우에도 공유 잠금이 발생합니다. 공유 잠금과 배타적 잠금은 서로 호환되지 않으므로 INSERT나 UPDATE와 같이 배타적 잠금이 발생한 경우 공유 잠금이 발생하는 읽기 작업이 제한되는 것입니다. 이를 피하기 위한 대표적인 방법이 스냅샷 격리(Snapshot Isolation)이며, 스냅샷 격리에 의하여 데이터를 수정하는 트랜잭션(배타적 잠금)이 데이터를 읽는 트랜잭션(공유 잠금)을 차단하지 않으며 데이터를 읽는 트랜잭션이 데이터를 쓰는 트랜잭션을 차단하지 않게 됩니다. 이에 관한 자세한 사항은 다음 링크의 내용을 참고하시기 바랍니다.

    SQL Server의 스냅샷 격리

    감사합니다.

    ※ 응답이 문제 해결에 도움이 되었다면 [답변으로 표시] 버튼을 눌러 주시기 바랍니다. 이는 유사한 증상을 겪는 다른 사용자들에게 도움이 될 수 있습니다. 만약 TechNet 구독자 지원에 대한 의견이 있다면, tnsf@microsoft.com 으로 문의할 수 있습니다.

    2019년 10월 23일 수요일 오전 1:55
    중재자