늦게, 나는 많은 행 잠금 경합에 직면했습니다. 경합 테이블은 특정 테이블 인 것 같습니다.
이것은 일반적으로 일어나는 일입니다-
- 개발자 1은 Oracle Forms 프론트 엔드 화면에서 트랜잭션을 시작합니다
- 개발자 2는 동일한 화면을 사용하여 다른 세션에서 다른 트랜잭션을 시작합니다.
~ 5 분 안에 프런트 엔드가 응답하지 않는 것 같습니다. 세션을 확인하면 행 잠금 경합이 표시됩니다. 모두가 던지는 "솔루션"은 세션을 죽이는 것입니다.
데이터베이스 개발자로서
- 행 잠금 경합을 제거하기 위해 무엇을 할 수 있습니까?
- 이 행 잠금 경합을 일으키는 저장 프로 시저의 행을 찾을 수 있습니까?
- 이러한 코딩 문제를 줄이거 나 피하거나 제거하는 일반적인 지침은 무엇입니까?
이 질문에 너무 개방적이거나 정보가 충분하지 않다고 생각되면 언제든지 수정 / 알려주십시오. 추가 정보를 추가하기 위해 최선을 다하겠습니다.
문제가되는 테이블은 많은 삽입 및 업데이트 중이며 가장 바쁜 테이블 중 하나라고 말하고 싶습니다. SP는 매우 복잡하고 단순화하기 위해 다양한 테이블에서 데이터를 가져 와서 작업 테이블에 채우고 작업 테이블에서 많은 산술 연산이 발생하며 작업 테이블의 결과가 해당 테이블에 삽입 / 업데이트됩니다.
데이터베이스 버전은 Oracle Database 10g Enterprise Edition 릴리스 10.2.0.1.0-64 비트입니다. 논리 흐름은 두 세션에서 동일한 순서로 실행되며 트랜잭션이 너무 오랫동안 열려 있지 않거나 최소한 그렇게 생각 합니다. 그리고 트랜잭션의 활성 실행 중에 잠금이 발생합니다.
업데이트 : 테이블 행 수가 예상보다 큽니다. 약 3 백만 행입니다. 또한 세션을 추적 한 후이 테이블에 대한 몇 가지 업데이트 문이 인덱스를 사용하지 않는 것으로 나타났습니다. 왜 그럴까요-확실하지 않습니다. where 절에서 참조 된 열이 색인화됩니다. 현재 색인을 다시 작성 중입니다.
COMMIT
또는 ROLLBACK
적당한 시간에 또는 b) 같은 사람들이 항상 같은 행을 동시에 원하지 않도록 배열하는 것입니다.