| PostgreSQL 9.3.25 문서 | ||||
|---|---|---|---|---|
| 토토 커뮤니티 : 문서 : 9.3 : 소개 | 메이저 토토 사이트 : 문서 : 9.3 : 동시성 제어 | 13장. 동시성 제어 | PostgreSQL : 문서 : 9.3 : 명시 적 윈 토토 | |
그SQL표준은 4가지를 정의합니다. 배트맨 토토 격리 수준. 가장 엄격한 것은 직렬화 가능입니다. 이는 다음과 같은 단락의 표준에 의해 정의됩니다. 일련의 직렬화 가능 트랜잭션을 동시에 실행하는 것은 한 번에 하나씩 실행하는 것과 동일한 효과를 보장합니다. 어떤 순서로. 나머지 세 가지 수준은 다음과 같이 정의됩니다. 동시에 발생하는 상호작용으로 인해 발생하는 현상 각 수준에서 발생해서는 안 되는 거래입니다. 표준 직렬화 가능의 정의로 인해 이들 중 어느 것도 가능하지 않습니다. 그 수준에서는 현상이 가능합니다. (이것은 전혀 놀라운 일이 아닙니다. 거래의 효과가 다음과 일치해야 하는 경우 한 번에 하나씩 실행했는데, 이로 인해 발생하는 현상을 어떻게 볼 수 있습니까? 상호 작용?)
다양한 수준에서 금지되는 현상은 다음과 같습니다:
배트맨 토토은 커밋되지 않은 동시 사용자가 쓴 데이터를 읽습니다. 거래.
트랜잭션은 이전에 읽은 데이터를 다시 읽고 찾습니다. 해당 데이터가 다른 트랜잭션(커밋된 트랜잭션)에 의해 수정되었습니다. 처음 읽은 이후).
트랜잭션은 다음과 같은 일련의 행을 반환하는 쿼리를 다시 실행합니다. 검색 조건을 충족하고 행 집합을 찾습니다. 다른 문제로 인해 조건이 변경되었습니다. 최근에 커밋된 트랜잭션입니다.
네 가지 배트맨 토토 격리 수준과 해당 수준 동작은에 설명되어 있습니다.표 13-1.
표 13-1. 기준SQL배트맨 토토 격리 수준
| 격리 수준 | 더티 읽기 | 반복할 수 없는 읽기 | 팬텀 읽기 |
|---|---|---|---|
| 커밋되지 않은 읽기 | 가능 | 가능 | 가능 |
| 읽기 커밋 | 불가능 | 가능 | 가능 |
| 반복 읽기 | 불가능 | 불가능 | 가능 |
| 직렬화 가능 | 불가능 | 불가능 | 불가능 |
에PostgreSQL요청할 수 있습니다. 네 가지 표준 배트맨 토토 격리 수준 중 하나입니다. 하지만 내부적으로는 세 가지 격리 수준만 있습니다. Read Committed, Repeatable Read 및 직렬화 가능. Read Uncommitted 수준을 선택하면 실제로 읽기 커밋을 받고 팬텀 읽기는 불가능합니다.PostgreSQL구현 반복 가능한 읽기이므로 실제 격리 수준은 더 엄격할 수 있습니다. 당신이 선택한 것보다 이는 SQL 표준에서 허용됩니다. 네 가지 격리 수준은 어떤 현상이 발생해서는 안 되는지 정의할 뿐입니다. 그들은 어떤 현상이 일어나야 하는지 정의하지 않습니다. 그 이유는PostgreSQL세 가지만 제공합니다. 격리 수준은 이것이 매핑하는 유일한 합리적인 방법이라는 것입니다. 다중 버전 동시성 제어에 대한 표준 격리 수준 건축학. 사용 가능한 격리 수준의 동작은 다음과 같습니다. 다음 하위 섹션에서 자세히 설명합니다.
트랜잭션의 배트맨 토토 격리 수준을 설정하려면 다음을 사용하십시오. 명령배트맨 토토 설정.
중요:일부포스트그레SQL데이터 유형과 함수에는 거래 행위에 관한 특별 규칙. 특히, 시퀀스에 대한 변경 사항(따라서 열의 카운터) 다음을 사용하여 선언했습니다.연재)가 즉시 다른 모든 트랜잭션에 표시되며 다음과 같은 경우 롤백되지 않습니다. 변경을 수행한 트랜잭션이 중단됩니다. 보다섹션 9.16그리고섹션 8.1.4.
읽기 커밋됨기본 격리입니다. 레벨 인포스트그레SQL. 언제 트랜잭션은 이 격리 수준을 사용합니다. a선택쿼리(a 없음용 업데이트/공유절)은 쿼리 이전에 커밋된 데이터만 봅니다. 시작했다; 커밋되지 않은 데이터나 커밋된 변경 사항을 볼 수 없습니다. 동시 트랜잭션에 의한 쿼리 실행 중. 사실상, a선택쿼리는 다음의 스냅샷을 봅니다. 쿼리가 실행되기 시작하는 순간의 데이터베이스입니다. 하지만,선택이전의 효과를 봅니다. 자체 트랜잭션 내에서 실행되는 업데이트입니다. 아직 커밋되지 않았습니다. 또한 두 개의 연속적인 내용을 참고하세요.선택명령은 다른 데이터를 볼 수 있지만, 다른 배트맨 토토이 커밋되면 단일 배트맨 토토 내에 있습니다. 첫 번째 실행 중 변경 사항선택.
업데이트, 삭제, 업데이트를 위해 선택, 그리고공유 선택명령은 다음과 같이 동작합니다. 와 동일선택검색 측면에서 대상 행: 다음과 같이 커밋된 대상 행만 찾습니다. 명령 시작 시간. 그러나 이러한 대상 행에는 다음이 있을 수 있습니다. 다른 동시 사용자가 이미 업데이트(또는 삭제 또는 잠김)했습니다. 발견된 시점까지 거래. 이 경우, 업데이터는 첫 번째 업데이트 트랜잭션이 커밋될 때까지 기다립니다. 롤백합니다(아직 진행 중인 경우). 첫 번째 업데이터가 굴러가는 경우 되돌리면 그 효과는 무효화되고 두 번째 업데이터는 다음을 수행할 수 있습니다. 원래 발견된 행 업데이트를 진행합니다. 첫 번째 경우 업데이터가 커밋하면 두 번째 업데이터는 다음과 같은 경우 행을 무시합니다. 첫 번째 업데이터가 이를 삭제했습니다. 그렇지 않으면 해당 업데이트를 적용하려고 시도합니다. 업데이트된 버전의 행에 대한 작업입니다. 검색 조건 명령(어디절)은 행의 업데이트된 버전이 여전히 일치하는지 확인하기 위해 재평가됩니다. 검색조건. 그렇다면 두 번째 업데이트 프로그램은 다음 작업을 진행합니다. 업데이트된 버전의 행을 사용하는 작업입니다. 의 경우업데이트를 위해 선택그리고공유 선택, 이는 업데이트되었음을 의미합니다. 잠겨 클라이언트에 반환되는 행의 버전입니다.
위의 규칙으로 인해 업데이트가 가능합니다. 일관되지 않은 스냅샷을 보는 명령: 다음의 효과를 볼 수 있습니다. 시도 중인 동일한 행에 대한 동시 업데이트 명령 업데이트하지만 다른 행에는 해당 명령의 효과가 표시되지 않습니다. 데이터베이스에서. 이 동작으로 인해 Read Committed 모드가 적합하지 않게 됩니다. 복잡한 검색 조건을 포함하는 명령의 경우 그러나 그것은 더 간단한 경우에 딱 맞습니다. 예를 들어 은행 업데이트를 고려해 보세요. 다음과 같은 거래의 잔액:
시작; UPDATE 계정 SET 잔액 = 잔액 + 100.00 WHERE acctnum = 12345; UPDATE 계정 SET 잔액 = 잔액 - 100.00 WHERE acctnum = 7534; 저지르다;
두 개의 거래가 동시에 잔액을 변경하려고 시도하는 경우 계정 12345에서 두 번째 거래가 시작되기를 분명히 원합니다. 계정 행의 업데이트된 버전으로 왜냐하면 각 명령은 미리 결정된 행에만 영향을 미치므로 업데이트된 행을 볼 수 있습니다. 행 버전은 문제를 일으키지 않습니다. 불일치.
더 복잡하게 사용하면 읽기에서 바람직하지 않은 결과가 발생할 수 있습니다. 커밋 모드. 예를 들어 다음을 고려해보세요.삭제두 가지 모두인 데이터에 대해 작동하는 명령 다른 명령으로 제한 기준에 추가 및 제거 예를 들어, 가정웹사이트2행 테이블입니다. 와 함께website.hits같음9그리고10:
시작; 업데이트 웹사이트 SET 조회수 = 조회수 + 1; -- 다른 세션에서 실행: DELETE FROM 웹사이트 WHERE 조회수 = 10; 저지르다;
그삭제심지어 아무런 효과가 없습니다 하지만website.hits = 10행 이전과 이후업데이트. 이런 일이 발생합니다 업데이트 전 행 값이기 때문에9이다 건너뛰었고,업데이트완료하고삭제잠금 획득, 새 행 값 더 이상은 아닙니다10하지만11, 더 이상 기준과 일치하지 않습니다.
커밋 읽기 모드는 각 명령을 새로운 명령으로 시작하기 때문입니다. 해당 시점까지 커밋된 모든 배트맨 토토을 포함하는 스냅샷 즉시, 동일한 배트맨 토토의 후속 명령은 어떤 경우에도 커밋된 동시 배트맨 토토의 효과. 그만큼 위에서 문제가 되는 점은 a싱글명령은 절대적으로 데이터베이스의 일관된 보기.
Read Committed가 제공하는 부분 트랜잭션 격리 모드는 많은 응용 프로그램에 적합하며 이 모드는 빠르고 사용이 간단합니다. 그러나 모든 경우에 충분하지는 않습니다. 복잡한 쿼리 및 업데이트를 수행하는 애플리케이션에는 Read Committed보다 더 엄격하게 일관된 데이터베이스 보기 모드가 제공됩니다.
그반복 읽기격리 수준 트랜잭션이 시작되기 전에 커밋된 데이터만 볼 수 있습니다. 그것은 결코 커밋되지 않은 데이터나 커밋된 변경 사항을 확인합니다. 동시 트랜잭션에 의한 트랜잭션 실행. (단, 쿼리는 해당 쿼리 내에서 실행된 이전 업데이트의 효과를 확인합니다. 아직 커밋되지 않은 경우에도 자체 트랜잭션입니다.) 에서 요구하는 것보다 더 강력한 보증SQL이 격리 수준에 대한 표준 및 설명된 모든 현상을 방지합니다.표 13-1. 처럼 위에서 언급했듯이 이는 표준에서 구체적으로 허용됩니다. 이는 단지최소각 격리를 보호합니다. 수준을 제공해야 합니다.
이 수준은 쿼리가 반복 가능한 읽기 트랜잭션은 시작 시점의 스냅샷을 확인합니다.거래, 현재는 아님 트랜잭션 내에서 현재 쿼리의 시작입니다. 따라서, 연속적인선택a 내의 명령단일거래 참조 즉, 다른 사용자가 변경한 내용을 볼 수 없습니다. 자체 트랜잭션 이후에 커밋된 트랜잭션 시작했습니다.
이 수준을 사용하는 응용 프로그램은 재시도할 준비가 되어 있어야 합니다. 직렬화 실패로 인한 거래.
업데이트, 삭제, 업데이트를 위해 선택, 그리고공유 선택명령은 다음과 같이 작동합니다. 와 동일선택검색 측면에서 대상 행: 다음과 같이 커밋된 대상 행만 찾습니다. 거래 시작 시간의 그러나 이러한 대상 행은 다른 사람에 의해 이미 업데이트(또는 삭제 또는 잠김)되었습니다. 동시 트랜잭션이 발견된 시점까지입니다. 이 경우, 반복 가능한 읽기 트랜잭션은 첫 번째 업데이트를 기다립니다. 커밋하거나 롤백할 트랜잭션입니다(아직 진행 중인 경우). 만약에 첫 번째 업데이트 프로그램이 롤백되면 그 효과는 무효화되고 반복 가능한 읽기 트랜잭션은 업데이트를 진행할 수 있습니다. 원래 발견된 행입니다. 그러나 첫 번째 업데이트 프로그램이 커밋(그리고 실제로 행을 잠그는 것이 아니라 실제로 업데이트하거나 삭제했습니다) 반복 가능한 읽기 트랜잭션은 다음과 같이 롤백됩니다. 메시지
오류: 동시 업데이트로 인해 액세스를 직렬화할 수 없습니다.
반복 가능한 읽기 트랜잭션은 행을 수정하거나 잠글 수 없기 때문입니다. 반복 가능한 읽기 트랜잭션 이후 다른 트랜잭션에 의해 변경됨 시작했다.
응용 프로그램이 이 오류 메시지를 받으면 중단되어야 합니다. 현재 트랜잭션을 삭제하고 전체 트랜잭션을 다시 시도합니다. 시작. 두 번째로 거래가 완료되면 거래 내역이 표시됩니다. 이전에 커밋된 변경 사항을 초기 뷰의 일부로 데이터베이스이므로 새 버전을 사용할 때 논리적 충돌이 없습니다. 새 트랜잭션의 시작점으로 행 업데이트.
업데이트 트랜잭션만 재시도해야 할 수도 있다는 점에 유의하세요. 읽기 전용 트랜잭션에는 직렬화 충돌이 발생하지 않습니다.
반복 읽기 모드는 각각의 읽기가 엄격하게 보장됩니다. 트랜잭션은 데이터베이스의 완전히 안정적인 보기를 봅니다. 하지만, 이 견해는 반드시 일부 견해와 항상 일치하지는 않습니다. 동시 트랜잭션의 직렬(한 번에 하나씩) 실행 같은 수준. 예를 들어 이 수준에서는 읽기 전용 트랜잭션이라도 배치가 완료되었음을 보여주기 위해 업데이트된 제어 레코드를 볼 수 있습니다. 완료되었지만아님하나 참조 논리적으로 배치의 일부인 세부 기록의 경우 제어 레코드의 이전 개정판을 읽습니다. 다음을 시도합니다. 이 격리에서 실행되는 트랜잭션을 통해 비즈니스 규칙을 시행합니다. 수준은 주의 깊게 사용하지 않으면 제대로 작동하지 않을 수 있습니다. 충돌하는 트랜잭션을 차단하기 위한 명시적인 잠금입니다.
참고:이전포스트그레SQL버전 9.1에 대한 요청입니다. 직렬화 가능한 배트맨 토토 격리 수준이 정확히 동일하게 제공됨 여기에 설명된 행동. 레거시 직렬화 가능을 유지하려면 이제 반복 읽기가 요청되어야 합니다.
그직렬화 가능격리 수준 가장 엄격한 트랜잭션 격리를 제공합니다. 이 레벨은 커밋된 모든 트랜잭션에 대한 직렬 트랜잭션 실행 마치 트랜잭션은 차례로, 순차적으로 실행되었습니다. 동시보다. 그러나 Repeatable Read 수준과 마찬가지로 이 수준을 사용하는 애플리케이션은 재시도할 준비가 되어 있어야 합니다. 직렬화 실패로 인한 트랜잭션. 사실 이런 고립은 레벨은 반복 읽기와 정확히 동일하게 작동합니다. 동시 실행을 실행할 수 있는 조건을 모니터링합니다. 일련의 직렬화 가능 트랜잭션이 일관성 없는 방식으로 동작합니다. 가능한 모든 직렬(한 번에 하나씩) 실행 업무. 이 모니터링은 차단을 도입하지 않습니다. 반복 가능한 읽기에는 그 이상이지만 약간의 오버헤드가 있습니다. 모니터링하고, 발생할 수 있는 상황을 감지합니다. 원인은직렬화 이상트리거됩니다 에이직렬화 실패.
예를 들어 테이블을 생각해 보세요.마이탭, 처음에 다음을 포함함:
클래스 | 값
-----+-------
1 | 10
1 | 20
2 | 100
2 | 200
직렬화 가능한 트랜잭션 A가 다음을 계산한다고 가정합니다:
SELECT SUM(값) FROM mytab WHERE 클래스 = 1;
그런 다음 결과(30)를값다음 행에클래스 = 2. 동시에 직렬화 가능한 트랜잭션 B는 다음을 계산합니다.
SELECT SUM(값) FROM mytab WHERE 클래스 = 2;
그리고 결과 300을 얻어서 새 행에 삽입합니다.클래스 = 1. 그런 다음 두 트랜잭션 모두 커밋을 시도합니다. 둘 중 하나의 거래가 있었다면 반복 읽기 격리 수준에서 실행되는 경우 둘 다 커밋이 허용되었습니다. 하지만 일련의 실행 순서가 없기 때문에 결과와 일치하게 직렬화 가능 트랜잭션을 사용하면 한 트랜잭션이 커밋되도록 허용하고 다른 트랜잭션은 롤백합니다. 이 메시지:
오류: 배트맨 토토 간의 읽기/쓰기 종속성으로 인해 액세스를 직렬화할 수 없습니다.
A가 B보다 먼저 실행했다면 B는 합계는 300이 아닌 330으로 계산되며 마찬가지로 다른 주문도 마찬가지입니다. A가 계산한 다른 합계가 나왔습니다.
이상 현상을 방지하기 위해 직렬화 가능 트랜잭션을 사용할 때, 영구 사용자 테이블에서 읽은 데이터는 그것을 읽은 거래가 완료될 때까지 유효한 것으로 간주됩니다. 성공적으로 커밋되었습니다. 읽기 전용인 경우에도 마찬가지입니다. 트랜잭션(a 내에서 읽은 데이터 제외)연기 가능읽기 전용 트랜잭션은 다음과 같은 것으로 알려져 있습니다. 해당 트랜잭션은 읽자마자 유효합니다. 이러한 문제가 없는 스냅샷을 확보할 수 있습니다. 데이터 읽기를 시작하기 전에. 그 외 모든 경우에는 적용 나중에 트랜잭션 중에 읽은 결과에 의존해서는 안 됩니다. 중단됨; 대신에 거래가 완료될 때까지 거래를 재시도해야 합니다. 성공합니다.
진정한 직렬성을 보장하기 위해PostgreSQL사용술어 잠금, 이는 다음을 허용하는 잠금을 유지함을 의미합니다. 쓰기가 언제 결과에 영향을 미쳤는지 확인합니다. 동시 트랜잭션에서 이전에 읽은 내용을 먼저 실행했습니다. 안에포스트그레SQL이 자물쇠는 그렇지 않습니다 차단을 유발하므로 다음과 같은 일이 발생할 수 있습니다.아님어떤 역할이라도 하여 이중 자물쇠. 이는 종속성을 식별하고 플래그를 지정하는 데 사용됩니다. 특정 조합에서 동시 직렬화 가능 트랜잭션 직렬화 이상 현상이 발생할 수 있습니다. 대조적으로, 커밋된 읽기 또는 데이터를 보장하려는 반복 가능한 읽기 트랜잭션 일관성을 유지하려면 전체 테이블에 대한 잠금을 해제해야 할 수도 있습니다. 해당 테이블을 사용하려는 다른 사용자를 차단할 수 있습니다. 또는 다음을 사용할 수 있습니다.업데이트를 위해 선택또는공유 선택다른 사람을 차단할 수 있을 뿐만 아니라 트랜잭션이 발생하지만 디스크 액세스가 발생합니다.
술어 잠금PostgreSQL, 대부분의 다른 데이터베이스 시스템과 마찬가지로 실제로 데이터를 기반으로 합니다. 트랜잭션을 통해 액세스됩니다. 이는 다음 항목에 표시됩니다.pg_locksa가 포함된 시스템 보기모드의SIReadLock. 동안 획득한 특정 잠금 쿼리 실행은 쿼리에 사용된 계획에 따라 달라집니다. 여러 개의 세분화된 잠금(예: 튜플 잠금)을 결합할 수 있습니다. 더 적은 수의 성긴 잠금(예: 페이지 잠금)으로 전환하는 동안 사용된 메모리의 고갈을 방지하기 위해 트랜잭션 과정 자물쇠를 추적합니다. 에이읽기 전용트랜잭션은 이전에 SIRead 잠금을 해제할 수 있습니다. 완료, 충돌이 여전히 발생할 수 없음을 감지한 경우 직렬화 이상 현상이 발생할 수 있습니다. 사실은,읽기 전용거래는 종종 시작할 때 그 사실을 확립하고 어떤 조건도 취하지 마십시오. 자물쇠. 명시적으로 요청하는 경우직렬화 가능 읽기 전용 연기 가능배트맨 토토이 완료될 때까지 차단됩니다. 이 사실을 확립하십시오. (이것은만직렬화 가능한 경우 트랜잭션은 차단되지만 반복 읽기 트랜잭션은 차단되지 않습니다.) 반면에 SIRead 잠금은 트랜잭션 이후에도 유지되어야 하는 경우가 많습니다. 겹치는 읽기 쓰기 트랜잭션이 완료될 때까지 커밋합니다.
직렬화 가능한 트랜잭션을 일관되게 사용하면 단순화될 수 있습니다. 개발. 모든 세트가 성공적으로 커밋되었다는 보장 동시 직렬화 가능 트랜잭션은 다음과 같은 효과를 갖습니다. 한 번에 하나씩 실행된다면 시연할 수 있다는 뜻입니다. 쓰여진 대로 단일 거래가 다음과 같은 경우에 올바른 일을 할 것입니다. 자체적으로 실행되므로 올바른 작업을 수행할 것이라는 확신을 가질 수 있습니다. 직렬화 가능한 트랜잭션이 혼합되어 있는 경우에도 마찬가지입니다. 다른 트랜잭션이 수행할 수 있는 작업에 대한 정보 또는 성공적으로 커밋되지 않습니다. 환경이 중요하다 이 기술을 사용하는 것은 일반화된 처리 방법을 가지고 있습니다. 직렬화 실패(항상 SQLSTATE 값으로 반환됨) 중 '40001'), 정확히 어느 것인지 예측하기가 매우 어렵기 때문입니다. 트랜잭션은 읽기/쓰기 종속성에 기여할 수 있으며 직렬화 이상 현상을 방지하려면 롤백해야 합니다. 그만큼 읽기/쓰기 종속성을 모니터링하는 데에는 비용이 듭니다. 직렬화로 종료된 트랜잭션의 재시작 실패했지만 사용과 관련된 비용 및 차단과 균형을 이루었습니다. 명시적 잠금 및업데이트를 위해 선택또는공유를 위해 선택, 직렬화 가능 트랜잭션은 일부에게는 최고의 성능 선택입니다. 환경.
그동안포스트그레SQL의 직렬화 가능 배트맨 토토 격리 수준에서는 동시 트랜잭션만 허용합니다. 일련의 실행 순서가 있음을 증명할 수 있는 경우 커밋합니다. 동일한 효과를 생성하지만 항상 오류를 방지하는 것은 아닙니다. 실제 직렬 실행에서는 발생하지 않는 문제가 발생하지 않도록 합니다. ~ 안에 특히 고유 제약 조건 위반을 볼 수 있습니다. 중복되는 직렬화 가능 트랜잭션과의 충돌로 인해 발생합니다. 이전에 키가 존재하지 않는다는 것을 명시적으로 확인한 후 삽입하려고 합니다. 다음 사항을 확인하면 이러한 문제를 피할 수 있습니다.모두직렬화 가능 잠재적으로 충돌할 수 있는 키를 명시적으로 삽입하는 트랜잭션 먼저 그렇게 할 수 있는지 확인하세요. 예를 들어 애플리케이션을 상상해 보세요. 사용자에게 새 키를 요청한 다음 그렇지 않은지 확인하는 것입니다. 먼저 선택하여 이미 존재하거나 새 키를 생성합니다. 최대 기존 키를 선택하고 하나를 추가합니다. 만약 일부 직렬화 가능 트랜잭션은 별도의 작업 없이 새 키를 직접 삽입합니다. 이 프로토콜을 따르면 고유 제약 조건 위반이 발생할 수 있습니다. 연재물에서 발생할 수 없는 경우에도 보고됨 동시 트랜잭션 실행.
직렬화 가능에 의존할 때 최적의 성능을 위해 동시성 제어를 위한 트랜잭션에서는 이러한 문제를 해결해야 합니다. 존경받는:
거래 선언:읽기 전용언제 가능한.
연결을 사용하여 활성 연결 수를 제어합니다. 필요한 경우 수영장. 이것은 항상 중요한 성과입니다. 하지만 바쁜 상황에서는 특히 중요할 수 있습니다. 직렬화 가능 트랜잭션을 사용하는 시스템.
단일 거래에 필요한 것보다 더 많은 것을 투자하지 마십시오 무결성 목적.
연결을 매달아 두지 마십시오."유휴 상태 거래"필요한 것보다 길어요.
명시적인 잠금을 제거합니다.선택 대상 업데이트및공유 선택어디에는 없나요? 자동으로 제공되는 보호로 인해 더 오래 필요합니다. 직렬화 가능한 트랜잭션.
시스템이 여러 페이지 수준을 강제로 결합해야 하는 경우 조건자 잠금은 단일 관계 수준 조건자 잠금으로 변경됩니다. 조건자 잠금 테이블에 메모리가 부족하여 직렬화 실패율이 발생할 수 있습니다. 당신은 이것을 피할 수 있습니다 증가하는max_pred_locks_per_transaction.
순차 스캔에는 항상 관계 수준이 필요합니다 술어 잠금. 이로 인해 비율이 증가할 수 있습니다. 직렬화 실패. 사용을 장려하는 것이 도움이 될 수 있습니다. 줄여서 인덱스 스캔random_page_cost및/또는 증가cpu_tuple_cost. 배트맨 토토 롤백 및 재시작 감소를 고려해야 합니다. 쿼리 실행 시간의 전반적인 변화에 대비합니다.