Postgresql 9.1.24 문서 | ||||
---|---|---|---|---|
스포츠 토토 : 문서 : 9.1 : 소개 | 스포츠 토토 결과 : 문서 : 9.1 : 동시성 제어 | 13 장. | PostgreSQL : 문서 : 9.1 : 명시 적 사설 토토 사이트 |
SQL표준 정의
다양한 수준에서 금지되는 현상은 다음과 같습니다.
트랜잭션은 동시에 작성된 데이터를 읽습니다
트랜잭션은 이전에 읽은 데이터를 다시 읽습니다
트랜잭션은 쿼리 세트를 다시 실행합니다
4 개의 트랜잭션 격리 수준과 해당표 13-1.
표 13-1. 기준SQL거래 격리 수준
격리 레벨 | 더러운 읽기 | 반복 할 수없는 읽기 | Phantom Read |
---|---|---|---|
커밋되지 않은 읽기 | 가능 | 가능 | 가능 |
Committed 읽기 | 가능하지 않음 | 가능 | 가능 |
반복 가능한 읽기 | 가능하지 않음 | 가능하지 않음 | 가능 |
SERIALIZALE | 가능하지 않음 | 가능하지 않음 | 가능하지 않음 |
inpostgresql, 당신은 할 수 있습니다postgresql구현postgresql만
거래의 거래 격리 수준을 설정하려면 사용세트.
Committed 읽기기본값입니다postgresql.select쿼리 (a절) 앞에 커밋 된 데이터 만 본다select쿼리에는 스냅 샷이 보입니다select효과가 보입니다select명령을 볼 수 있습니다select.
업데이트, 삭제, 선택및공유 선택명령은와 동일하게 행동합니다selectin여기서조항) 업데이트 된 버전이선택and공유 선택,이
위 규칙으로 인해 업데이트가 가능합니다.
시작;
그러한 두 거래가 동시에 변경하려고한다면
더 복잡한 사용으로 인해 바람직하지 않은 결과가 읽을 수 있습니다삭제존재하는 데이터에서 작동하는 명령웹 사이트is웹 사이트동등한9and10:
시작;
삭제조차도 영향을 미치지 않습니다웹 사이트. hits = 10전후에 행업데이트. 이것9건너 뛰고업데이트완성 및삭제잠금을 얻고 새 행 값은 아니오입니다10하지만11, 더 이상 기준과 일치하지 않습니다.
읽기 Commited Mode가 새 새로 각 명령을 시작하기 때문에단일명령은 절대적으로 보입니다
Read Commited에 의해 제공되는 부분 트랜잭션 격리
반복 가능한 읽기격리 레벨SQL이를위한 표준테이블. 위에서 언급했듯이, 이것은 구체적으로 허용됩니다최소각각 보호
이 레벨은 쿼리에서 저지른 읽기와 다릅니다.거래, 시작 시점이 아닙니다selecta 내 명령단일거래를 참조하십시오
이 레벨을 사용한 응용 프로그램은 재 시도해야합니다
업데이트, 삭제, 선택및공유 선택명령은와 동일하게 행동합니다selectin
오류 : 동시 업데이트로 인해 액세스를 직렬화 할 수 없습니다
반복 가능한 읽기 트랜잭션은 수정하거나 잠글 수 없기 때문입니다
응용 프로그램 이이 오류 메시지를 받으면해야합니다
거래 만 업데이트해야 할 수도 있습니다
반복 가능한 읽기 모드는 엄격한 보증을 제공합니다아님세부 기록 중 하나를 참조하십시오
참고 :이전postgresql버전 9.1, 요청
SERIALIZALE분리 레벨직렬화 이상a직렬화 실패.
예를 들어 테이블을 고려mytab, 처음 포함 :
클래스 | 값
직렬화 가능한 트랜잭션이 계산된다고 가정합니다 :
mytab에서 sum (value)을 선택하여 클래스 = 1;
그런 다음 결과 (30)을 삽입합니다.value새 행으로클래스 = 2.
mytab에서 sum (value)을 선택하여 클래스 = 2;
결과 300을 얻습니다.클래스 =. 그런 다음 두 거래 모두 커밋을 시도합니다.
오류 : 트랜잭션 간의 읽기/쓰기 종속성으로 인해 액세스를 일차화 할 수 없습니다
이것은 A가 b 전에 실행된다면 B가
진정한 직렬화 가능성을 보장하려면postgresql용도술어 잠금postgresql이 자물쇠는 원인이되지 않습니다아님a선택또는공유 선택
술어 잠금 장치postgresql18900_19026pg_locksa 시스템보기모드ofsireadlock. 특정 자물쇠가 획득했습니다읽기트랜잭션은 Siread 잠금 장치를 해제 할 수 있습니다읽기 전용거래가 종종있을 것입니다직렬화 가능한 읽기 전용 연기거래,전용케이스 위치
직렬화 가능한 트랜잭션의 일관된 사용은 단순화 될 수 있습니다업데이트 선택또는선택, 직렬화 가능한 트랜잭션이 가장 좋습니다
직렬화 가능에 의존 할 때 최적의 성능
거래 선언으로읽기가능하면.
a를 사용하여 활성 연결 수를 제어합니다
필요한 것보다 단일 트랜잭션에 더 많이 넣지 마십시오.
연결을 방해하지 마십시오"Transaction in Transaction"보다 길다
명시 적 잠금 제거,선택을 선택하십시오및공유 선택보호로 인해 더 이상 필요하지 않은 곳
시스템이 여러 페이지 수준을 결합해야 할 때max_pred_locks_per_transaction.
순차적 스캔은 항상 필요합니다random_page_cost및/또는 증가CPU_TUPLE_COST.