by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

14S_락은 무엇인가?




락은 무엇인가?

  • 락(Lock)은 공유 자원에 대한 동시 액세스를 조절하기 위한 메커니즘이다.
  • 락으로 인하여 데이터 무결성과 일관성을 제공한다.
  • 데이터베이스 종류만큼이나 락을 구현하는 방법 또한 다양하다.
    Note SQL 서버의 클러스터 테이블(클러스터 인덱스를 가진 테이블)은 오라클의 클러스터와 어떤 면에서는 비슷하지만, 어떤 면에서는 매우 다르다. SQL 서버는 단지 페이즈(Block) 수준의 락킹만 지원했기 때문에 삽입되는 모든 로우를 테이블의 마지막 페이지에 저장하면 동시에 발생하는 삽입이나 다른 페이지를 엑세스 하는 트랜잭션과의 경합이 없었을 것이다. SQL 서버의 클러스터 인덱스는 클러스터 키에 의해 정렬된 순서대로 테이블 전반에 로우를 삽입하는데 사용되었으며 그런 점에서 본다면 동시성을 향상시켰다.
  • 모든 데이터베이스는 근본적으로 다르다.
  • 새로운 데이터베이스를 사용할 때는 이전에 데이터베이스를 전혀 사용해본 적이 없었던 것처럼 신중하게 접근해야 한다.
  • 오라클을 통해 다음 사항들을 배울 수 있다.
    • 트랜잭션은 데이터베이스에 관한 모든 것이며 '좋은 것'이다.
    • 적절한 순간이 올 때까지 커밋을 미루어야 한다. 커밋을 해야 할 때 커밋을 하는 것으로 미리 해서는 안된다. 트랜잭션은 단지 비즈니스 로직을 실행할 만큼의 크기면 된다.
    • 필요하다면 데이터에 대한 락을 보유하고 있어야 한다.
    • 오라클에서는 로우 수준의 락으로 인한 오버헤드는 없다. 1개 Row에 관한 락이나 1,000,000개의 Row에 대한 락을 거는데 필요한 자원은 같다. 고정 상수이기 때문이다.
    • 시스템이 더 낫다 는 이유로 결코 락을 에스컬레이션(예 : 로우 락 대신 테이블을 사용하는 것)해서는 안된다.
    • 동시성과 일관성은 동시에 달성되어 빠르면서도 정확한 결과를 얻을 수 있다. 데이터를 쓰는 자와 읽는 자는 서로 블로킹하지 않는다.

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.