2011-01-28 7 views
0

SQL 서버 2005 년,어떤 데이터베이스 격리를 사용해야하며 어떤 격리 수준이 가장 좋습니까?

나는 많은 저장 프로 시저를 가지고 있으며, 일부는 트랜잭션과 함께 업데이트 된 테이블 레코드를 사용하며, 일부는 테이블 레코드를 얻기 위해 사용됩니다.

하나의 SP가 하나의 seetion에서 테이블 레코드를 updaing 할 때, 테이블 데이터를 getiing하기 위해 또 다른 SP를 실행하면 기다리지 않고 실행해야합니다.

어떤 데이터베이스 격리를 사용해야하며 어떤 격리 수준이 가장 좋습니까?

"변환 스냅 샷 격리 수준"에서는 문제가 될 수 있습니다. 하지만 성능을 저하시킬 수있는 Teampdb 데이터베이스의 이전 스냅 샷 데이터를 선택합니다.

무엇을 제안합니까?

답변

1

READ COMMITTED은 SQL Server의 기본 트랜잭션 격리 수준입니다. (나에게 어쨌든) 다른 격리 수준의

를 사용하여 특정 상황에서 READ UNCOMMITTED의 제한된 사용 가능성을 제외하고, 나에게 code smell —, 진짜 정당화가 필요 이상 —를 구성한다.

+0

+1 : 문의해야 할 경우 ... –

+0

하지만 가장 좋을까요? – Paresh

+0

다른 격리 수준에 대한 정당한 이유가없는 한'READ COMMITTED' 상태로 두십시오. 중요한 차단이 발생하면 거래 디자인을 검토해야 할 수 있습니다. –

0

첫 번째 트랜잭션이 일부 테이블에서 데이터를 업데이트 한 경우 두 번째는이 데이터를 가져 오기 위해 대기합니다 (READ UNCOMMITTED 격리 수준은 예외이지만이 경우 매우 일치하지 않는 데이터가있을 수 있음).

1

SNAPSHOT 격리 수준을 사용해야합니다. 데이터베이스 수준에서 READ COMMITTED SNAPSHOT을 설정하는 것이 가장 좋습니다. 그러면 모든 기본 READ COMMITTED 트랜잭션이 자동으로 스냅 숏 트랜잭션으로 변환됩니다.

SNAPSHOT이 특히 동시성 문제로 인해 차단으로 이어질 수있는 응용 프로그램에 가장 적합한 이유는 무수하며 장점은 무한합니다. SNAPSHOT 격리가 cost in resources used으로 발생한다는 것은 사실이지만, 문제를 일으키는 행 버전 저장소 인 최종 증거를 측정하고 발견하지 못하면 미리 정리할 수 없습니다.

절대 사용해서는 안되는 하나의 격리 수준은 UNCOMMITTED입니다. 그것은 문제를 요구하고있다. Dirty reads are inconsistent reads.

REPEATABLE 및 SERIALIZABLE은 사용 사례가 매우 좁기 때문에 절대 필요하지 않습니다. 안타깝게도 SERIALIZABLE은 .Net System.Transactions와 MTS/COM +에 의해 남용되기 때문에 많은 응용 프로그램이 필요하지는 않지만 사용으로 끝납니다 (그리고 그로 인한 확장 성 문제가 큽니다).

관련 문제