2011-10-25 3 views

답변

2

읽기에는 공유 잠금이 필요합니다. 쓰기 (갱신)에는 독점 잠금이 필요합니다. 배타 잠금을 얻으려면 트랜잭션이 공유 잠금이 해제 될 때까지 기다려야합니다. 그래서 a reader can block a writer. 동일한 데이터를 읽으려고

또 다른 트랜잭션이 읽기가 허용되지만, 데이터를 업데이트하려고 트랜잭션이 공유 잠금이 해제 될 때까지 그렇게하는 것을 방지 할 것입니다.

더비의 Type and Scope of Locks도 참조하십시오.

하나 이상의 트랜잭션 중 isolation level을 변경하면 영향을 줄일 수 있습니다. Derby의 기본값은 READ COMMITTED입니다. 즉, 동시성을 향상 시키려면 하나 이상의 판독기를 READ UNCOMMITTED으로 설정해야합니다. 그러나 READ UNCOMMITTED은 더티 읽기, 반복 불가능 읽기 및 팬텀 읽기를 허용합니다. (READ COMMITTED은 반복 할 수없는 읽기 및 가상 읽기를 허용하지만 더티 읽기를 허용하지 않습니다.)

리더를 차단하는 또 다른 방법은 리더를 빠르게 실행하는 것입니다. 쿼리 실행 계획을 읽고, 단일 및 다중 열 인덱스를 현명하게 사용하고 인덱스를 주기적으로 다시 작성하여 조각화를 줄임으로써 쿼리를 조정하십시오.

관련 문제