락은 무엇인가?

  • 락(Lock)은 공유 자원에 대한 동시 액세스를 조절하기 위한 메커니즘이다.
  • 락으로 인하여 데이터 무결성과 일관성을 제공한다.
  • 데이터베이스 종류만큼이나 락을 구현하는 방법 또한 다양하다.


Note
  • SQL 서버의 클러스터 테이블(클러스터 인덱스를 가진 테이블)은 오라클의 클러스터와 어떤 면에서는 비슷하지만, 어떤 면에서는 매우 다르다.
  • SQL 서버는 단지 페이즈(Block) 수준의 락킹만 지원했기 때문에 삽입되는 모든 로우를 테이블의 마지막 페이지에 저장하면 동시에 발생하는 삽입이나 다른 페이지를 엑세스 하는 트랜잭션과의 경합이 없었을 것이다.
  • SQL 서버의 클러스터 인덱스는 클러스터 키에 의해 정렬된 순서대로 테이블 전반에 로우를 삽입하는데 사용되었으며 그런 점에서 본다면 동시성을 향상시켰다.


  • 모든 데이터베이스는 근본적으로 다르다.
  • 새로운 데이터베이스를 사용할 때는 이전에 데이터베이스를 전혀 사용해본 적이 없었던 것처럼 신중하게 접근해야 한다.


오라클을 통해 다음 사항들을 배울 수 있다.
  • 트랜잭션은 데이터베이스에 관한 모든 것이며 '좋은 것'이다.
  • 적절한 순간이 올 때까지 커밋을 미루어야 한다. 커밋을 해야 할 때 커밋을 하는 것으로 미리 해서는 안된다. 트랜잭션은 단지 비즈니스 로직을 실행할 만큼의 크기면 된다.
  • 필요하다면 데이터에 대한 락을 보유하고 있어야 한다.
  • 오라클에서는 로우 수준의 락으로 인한 오버헤드는 없다. 1개 Row에 관한 락이나 1,000,000개의 Row에 대한 락을 거는데 필요한 자원은 같다. 고정 상수이기 때문이다.
  • 시스템이 더 낫다 는 이유로 결코 락을 에스컬레이션(예 : 로우 락 대신 테이블을 사용하는 것)해서는 안된다.
  • 동시성과 일관성은 동시에 달성되어 빠르면서도 정확한 결과를 얻을 수 있다. 데이터를 쓰는 자와 읽는 자는 서로 블로킹하지 않는다.