데이터웨어 하우스 시나리오에는 (Nolock)과 함께 사용하는 데 단점이 있습니까?

StackOverflow https://stackoverflow.com/questions/1014993

문제

나는 Kimball 스타일 DW (스타 모델의 사실 및 치수-늦게 도착하는 사실 행 또는 열이없고, 유형 2의 일부로 만료되는 것을 제외하고는 차원이 변경되지 않음) 매일 매일 처리하고 업데이트하는 행을 업데이트합니다. 새로운 날짜) 및 월별 및 일일보고 프로세스. 사실 테이블은 오래된 데이터의 쉬운 롤오프를 위해 날짜로 분할됩니다.

나는 이해한다 WITH(NOLOCK) 커밋되지 않은 데이터를 읽을 수 있지만 ETL 프로세스가 실패하거나 차단 될 수있는 잠금 장치를 만들지 않으려 고합니다.

모든 경우에, DW에서 읽을 때, 우리는 변경되지 않는 날짜 (날짜별로 분할 됨)와 링크 된 사실에 대한 속성이 변경되지 않는 날짜 (사실 테이블이 분할 됨) 날짜에 대한 사실 테이블에서 읽고 있습니다. .

그래서 - 단점이 있습니까? - 아마도 실행 계획 또는 그러한 운영에서 SELECT-동일한 테이블에서 병렬로 실행되는 쿼리 전용.

도움이 되었습니까?

해결책

모두 업데이트가없는 데이터라면 해가 없지만 많은 이점이 있으면 놀랄 것입니다. 시도해 볼 가치가 있다고 말하고 싶습니다. 최악의 상황은 배치 삽입의 중간에 있다면 불완전하거나 일관성이없는 데이터를 얻을 수 있지만 유용한 내용이 무효화되는지 결정할 수 있다는 것입니다.

다른 팁

이것은 아마도 당신이 필요로하는 것입니다.

`데이터베이스 어드벤처 워크 세트 read_committed_snapshot on;

Alter Database AdventureWorks Set allow_snapshot_isolation on; `

그런 다음 계속해서 사용하십시오

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

쿼리에서. 볼에 따르면 :

Commited의 동작은 read_committed_snapshot 데이터베이스의 설정에 따라 다릅니다.

read_committed_snapshot (기본값)로 설정된 경우 데이터베이스 엔진은 공유 잠금 장치를 사용하여 현재 트랜잭션이 읽기 작업을 실행하는 동안 다른 트랜잭션이 행을 수정하는 것을 방지합니다. 공유 잠금 장치는 또한 다른 트랜잭션이 완료 될 때까지 다른 트랜잭션에 의해 수정 된 읽기 행에서 명세서를 차단합니다. 공유 잠금 유형은 언제 출시 될시기를 결정합니다. 다음 행이 처리되기 전에 행 잠금 장치가 해제됩니다. 다음 페이지를 읽을 때 페이지 잠금이 해제되고 문이 완료되면 테이블 잠금이 해제됩니다.

read_committed_snapshot이 켜져 있으면 데이터베이스 엔진은 행을 시작할 때 존재하는 데이터의 트랜잭션에서 일관된 스냅 샷을 제공하기 위해 각 문을 제시합니다. 잠금 장치는 다른 트랜잭션의 업데이트로부터 데이터를 보호하는 데 사용되지 않습니다.

이 도움을 바랍니다. 주권

당신은 a를 만드는 것을 고려 했습니까? 데이터베이스 스냅 샷 DW의 보고서를 실행 하시겠습니까?

예. 귀하의 SQL은 훨씬 덜 읽기 쉬울 것입니다. Nolock 전략을 사용하는 SQL Select 명령이 모든 곳에 배치해야하기 때문에 필연적으로 Nolock 힌트를 놓칠 것입니다.

격리 수준을 설정하여 똑같은 것을 얻을 수 있습니다.

트랜잭션 격리 수준을 설정하지 않습니다

결국 당신은 10% 성능 향상을 얻습니다 (죄송합니다. 너무 게으르고 기사를 찾아 보지만 밖에 있습니다)

10% 이득이 가독성을 줄일 가치가 없다고 말하고 싶습니다.

전체 데이터베이스 읽기 전용이 POSSBILE 인 경우 더 나은 옵션입니다. 모든 코드를 수정하지 않고도 읽은 성능을 얻을 수 있습니다.

ALTER DATABASE adventureworks SET read_only

Nolock은 'Dirty Read'를 수행합니다. 읽을 때 데이터베이스가 업데이트되는 경우 일관성이없는 데이터를 다시받을 위험이 있습니다. 유일한 옵션은 잠금 및 차단을 수락하거나 SQL 2005에서 제공되는 두 개의 새로운 격리 수준 중 하나를 선택하는 것입니다. 여기에서 논의했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top