나는 범위 잠금을 사용하는 읽기가 &이라는 사실을 알고 있습니다. 쓰기 잠금은 트랜잭션 기간 동안 직렬화 가능 격리 수준에서 유지됩니다. 나는 '모든 것이 평등하고, 직렬 가능 격리가 다른 격리 수준보다 낮은 동시성을 초래할 수 있습니다.'라고 말하는 사람을 이해할 수 있습니다. 그러나 모든 블로그/문서에 명시된 바와 같이 낮은 동시성과 높은 교착 상태가 확실한 것으로 보입니다. 나는 왜 그것이 나의 특별한 경우에 실제적인 의미에서 그렇게되어야하는지 이해하려고 노력하고있다. 여기에 다양한 연결이 동일 레코드에 접근하지 않으면 내가Serializable 격리 수준으로 인해 교착 상태 및 동시성 문제가 발생하는 이유는 무엇입니까?
이은 직렬화 격리 수준이 낮은 동시성을 일으킬해야이 질문은? 나는 모든 쿼리가 단지 몇 개의 행을 반환하는 '포인트 쿼리'이고 최적화 프로그램이 훌륭한 계획을 수립하는 '미세 조정 된'OLTP 시스템을 가정합니다. 나는 또한 인덱스 페이지가 아닌 데이터 페이지의 관점에서 생각하고있다.
교착 상태가 증가하는 이유는 무엇입니까? 인덱스 페이지가 업데이트 되었기 때문입니까? 그러나 이러한 문제는 스냅 샷 격리 이외의 다른 격리 수준에서 발생할 수 있습니다. 그렇다면 Serializable Isolation 레벨을 왜 단일성으로 만들었습니까?
물론 '사용자 입력을 기반으로 실행 계획이 잘못 될 때를 절대 알지 못합니다. 필요한 격리 수준보다 높게 설정하여 나쁜 상황을 악화시키고 있습니다. 그래서 당신을 위해 가장 잘 작동하는 가장 높은 격리 수준을 설정하십시오. '
연결에 범위 잠금이 걸리면 분명히 동의 할 것입니다. 하지만 정확히 동일한 레코드/페이지에 액세스하는 데 2 개의 다른 사용자 연결이 드문 경우 여전히 답변을 보유하고 있습니까? – QFirstLast
범위 잠금을 사용하면 메타 구조를 잠글 수 있습니다. 즉, 데이터를 수정하려고 시도하는 작업에 대해 데이터가 존재할 필요가 없습니다 (위의 글 머리표 참조). 따라서 두 개 (또는 그 이상)의 응용 프로그램이 분리 된 범위를 수정한다는 것을 알고 있다면 좋은 것입니다. 하지만 나는 그 점에서 직렬화 가능 격리가 필요한 이유는 무엇입니까? –
감사합니다. "왜 그 시점에서 직렬화 가능 격리가 필요하겠습니까?"에 대해서는 아직 결정을 내리지 못했습니다.우리는 각 고립 수준의 특성, 장단점을 이해하고 우리 상황에 적용하는 과정에 있습니다. 귀하의 응답이 도움이되었습니다. 귀하의 답변을 답변으로 표시하려고 시도합니다. 내가 시도한 마지막 시간에 사이트에서 "그렇게 할 수 있기 전에 몇 x 포인트가 필요했다"고 말하지 않았습니다. – QFirstLast