왜 오라클은 잠금이 없습니까?


14

MS에서는 SQL Server nolock를 목적으로 사용할 수 있습니다.

왜 오라클과 plsql에서 사용할 수 없습니까?

답변:


21

SQL Server는 일반적으로 Oracle과 다른 잠금 전략을 사용합니다. SQL Server에서 사용하는 기본 전략은 행을 선택하면 행, 페이지 또는 전체 테이블에 대한 읽기 잠금이 행에 배치됨을 의미합니다 *. 따라서 NOLOCK때로는 유용한 절입니다. 비록 일반적인 조언은 격리 수준의 의미를 변경하고 쿼리 출력에 일관성이없는 결과를 초래할 수 있으므로 절대 사용하지 않는 것이 좋습니다.

* (참고 : 이것이 기본값입니다. SNAPSHOT격리를 선택하면 동작이 다르고 독자는 작성자를 차단하지 않습니다.)

Oracle에서 읽기 프로세스는 쓰기 프로세스를 차단하지 않습니다. 다음은 ' Oracle Database Concepts 11g Release 2 ' 에서 발췌 한 것입니다 . Oracle이이를 처리하는 방법에 관심이있는 경우 살펴보십시오.

데이터 동시성 및 일관성

잠금 동작 요약

데이터베이스는 잠금을 획득 한 조작에 따라 여러 가지 다른 유형의 잠금을 유지 보수합니다. 일반적으로 데이터베이스는 독점 잠금 및 공유 잠금이라는 두 가지 유형의 잠금을 사용합니다. 행이나 테이블과 같은 리소스에서는 하나의 독점 잠금 만 얻을 수 있지만 단일 리소스에서는 많은 공유 잠금을 얻을 수 있습니다.

잠금은 독자와 작가의 상호 작용에 영향을 미칩니다. 독자는 리소스에 대한 쿼리 인 반면, 작가는 리소스를 수정하는 명령문입니다. 다음 규칙은 독자 및 작성자를위한 Oracle Database의 잠금 동작을 요약합니다.

• 작성자가 수정 한 경우에만 행이 잠 깁니다.

명령문이 하나의 행을 업데이트하면 트랜잭션은이 행에 대해서만 잠금을 획득합니다. 데이터베이스는 행 레벨에서 테이블 데이터를 잠금으로써 동일한 데이터에 대한 경합을 최소화합니다. 정상적인 상황 1에서 데이터베이스는 행 잠금을 블록 또는 테이블 레벨로 에스컬레이션하지 않습니다.

• 행 작성자가 동일한 행의 동시 작성기를 차단합니다.

한 트랜잭션이 행을 수정하는 경우 행 잠금은 다른 트랜잭션이 동일한 행을 동시에 수정하지 못하게합니다.

• 독자는 절대 작가를 차단하지 않습니다.

행의 판독기는 행을 잠그지 않기 때문에 기록기는이 행을 수정할 수 있습니다. 유일한 예외는 SELECT ... FOR UPDATE 문입니다.이 문은 읽고있는 행을 잠그는 특수한 유형의 SELECT 문입니다.

• 작가는 절대 독자를 차단하지 않습니다.

기록기에 의해 행이 변경되면 데이터베이스는 실행 취소 데이터를 사용하여 판독기에 일관된 행보기를 제공합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.