모든 쿼리에서 (nolock) 힌트를 사용하지 않음을 정당화하십시오.


23

쿼리 힌트를 사용하지 않는 것을 정당화해야 한 적이 있습니까?

WITH (NOLOCK)매우 바쁜 서버에 도달하는 모든 단일 쿼리에서 보고 있습니다. 개발자는 코드에서 수천 번 보는 것을 싫어하기 때문에 기본적으로 켜져 있어야한다고 생각합니다.

나는 그것이 더티 읽기를 허용하고 있으며 결국 나쁜 데이터로 끝날 것이라고 설명하려고 노력했지만 성능 트레이드 오프가 그만한 가치가 있다고 생각합니다. (그들의 데이터베이스는 엉망입니다. 성능 문제가있는 것은 당연합니다.)

NOLOCK힌트의 남용에 대해 사건을 제시하는 방법에 대한 명확한 예가 있다면 , 감사하겠습니다.

답변:


17

당신은 당신의 전투를 선택하고 이와 같은 전투는 쉽게 이길 수 없습니다. 우리는 모든 DML에 ROWLOCK 힌트 (한 행 또는 수천 행 수정에 관계없이)가 제공되는 시스템을 가지고 있습니다. 성능이 실제로 저하되는 이유를 몇 가지 보여 주었지만 시스템이 이미 작동함에 따라 변경에 대한 저항이 있습니다. 나는 이것을 앞으로도 사용하지 않을 것이라고 확신했다.

NOLOCK은 그 자리에 있지만 사용상의 문제를 보여주는 좋은 참고 자료를 추천 할 수 있습니다.



9

격리 수준을 이해하는 것이 중요하다는 것을 동료에게 설명해야합니다. 예를 보여주세요. 리틀 켄드라의 격리 수준 포스터 에서 찾은 가장 훌륭하고 쉬운 설명 . 왜 그들이 암시 힌트가 필요하다고 생각하는지 물어보십시오. "set transaction isolation level ..."문을 사용하지 않는 이유는 무엇입니까? 그들이 고칠 상황, 정확히 교착 상태, 차단 등을 물어보십시오. 잠금을 유지하지 않으려는 경우 스냅 샷 격리 수준을 고려할 수 있습니다.

그들에게 물어 보면 선명한 그림을 볼 수 있습니다.

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