2010-01-28 3 views
4

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ를 사용할 때의 위험이나 성능 저하는 무엇입니까?TRANSACTION ISOLATION LEVEL REPEATABLE SQL Server에서 읽기

BizTalk 서비스에서 호출되는 SP가 있습니다. 때때로 교착 상태에 빠져 있습니다. 격리 수준을 변경하면 위험과 가능한 성능 저하는 무엇입니까?

+0

"교착 상태"란 무엇을 의미합니까? 그게'SQL 서버'는 교착 상태가 해결되었다는 오류 메시지를 반환합니까, 아니면 트랜잭션이 멈춘 것입니까? 후자는 교착 상태가 아니며 잠금 장치 경합입니다. – Quassnoi

답변

5

반복 읽기는 이 페치 된 모든 행에 잠금을 설정합니다. 대용량 데이터를 가져 오는 커서로 작업하는 경우 은 커서를 읽을 때까지 반복 읽기를 사용하여 커서가 읽은 행을 모두 업데이트 할 수 없으므로 은 잠금을 가져올 수 없으므로 다른 사용자와의 경합이 발생할 수 있습니다.

성능 저하의 위험이있는 트랜잭션은 에 제한 시간 초과 및/또는 교착 상태가 발생할 수 있습니다. 이 위험은 이며 두 트랜잭션이 동일한 행을 동시에 읽거나 업데이트해야 할 확률에 비례합니다. 이 응용 프로그램에 영향을 줄 수있는 또 다른 요소는 취해진 잠금 크기입니다. 잠금이 인 경우 페이지 수준에서 처리해야합니다. 다른 데이터가 동일한 페이지에서 거짓으로 액세스해야하는 경우 (동일한 행 일 필요는 없음) 논쟁이 발생할 수 있습니다. 더 낮은 격리 수준, 예를 들어 커서 안정성을 사용하면 다른 한편으로

는, 당신은 당신이 이전에 거래하는 동안 가져온 작업의 당신의 단위 전에 다른 트랜잭션에 의해 업데이트 될 수있는 행 가능성 를 엽니 다 떠나 이 완료되었습니다.

1

반복 읽기는 읽기가 완료된 후에 공유 잠금을 해제하지 않습니다.

RR 트랜잭션에서 SELECT을 수행하면 동시 트랜잭션이 SELECT에 의해 잠긴 행을 업데이트 할 수 없음을 의미합니다.

2

사용해보기. 단일 데이터 요소 (TRANSACTION ISOLATION LEVEL)로 잠재적 위험 또는 성능 문제가 발생할 가능성을 알려 드릴 수있는 방법은 없습니다. 우리는 귀하의 데이터, 데이터 볼륨, TPS, 데이터 의존성에 관해서 다른 어떤 것도 알지 못합니다. 성능이 문제가 될 때마다 시도해보십시오. 다른 대답은 없습니다.

2

이미 말한 내용에 추가하십시오. 교착 상태를 완전히 제거 할 수 없습니다. 당신이 할 수있는 일은 그들이 일어날 가능성을 최소화하는 것입니다.