About Coordinated Replicat

조정 모드에서 Replicat는 다음과 같이 작동합니다.

클래식 모드와 조정 모드의 차이점은 Replicat가 조정 모드에서 다중 스레드라는 것입니다. 단일 Replicat 인스턴스 내에서 여러 스레드가 추적을 독립적으로 읽고 트랜잭션을 병렬로 적용합니다. 각 스레드는 지정된 작업 로드에 대한 필터링, 매핑, 변환, SQL 구성 및 오류 처리를 처리합니다. 조정자 스레드는 스레드 간의 종속성을 고려하기 위해 스레드 간 트랜잭션을 조정합니다.

총 출처 트랜잭션의 무결성이 유지되지 않도록 CR 프로세스 간에 출처 트랜잭션을 분할할 수 있습니다. CR 프로세스에 의해 처리된 트랜잭션 부분은 커밋된 순서대로 수행되지만 모든 CR 프로세스에 대한 전체 트랜잭션은 커밋되지 않습니다.

Coordinated Replicat는 대량 트랜잭션을 동시에 적용할 수 있도록 작업 로드의 사용자 정의 분할을 허용합니다. 또한 THREADRANGE 분할을 사용하여 조정(예: DDL) 및 기본 키 업데이트가 필요한 트랜잭션의 실행을 자동으로 조정합니다. 이러한 트랜잭션은 전체 동기화를 가진 대상에서 하나의 트랜잭션으로 실행됩니다. 즉, 모든 이전 트랜잭션이 먼저 적용될 때까지 대기하고 이 장벽 트랜잭션 이후의 모든 트랜잭션은 이 장벽 트랜잭션이 적용될 때까지 대기해야 합니다.

스레드 수에 관계없이 조정된 Replicat에는 매개변수 파일이 하나만 필요합니다. MAP 문에서 THREAD 또는 THREADRANGE 옵션을 사용하여 해당 객체에 대한 트랜잭션을 처리하는 스레드를 지정하고 Replicat 그룹을 생성할 때 최대 스레드 수를 지정합니다.

이 그림은 Coordinated Replicat의 아키텍처를 보여줍니다.

다음 coordinatedreplicat.jpg에 대한 설명입니다.

이 그림에 표시된 것처럼 Coordinated Replicat에는 다음 두 프로세스가 포함되어 있습니다.

배리어 트랜잭션 정보

배리어 트랜잭션은 조정된 Replicat 구성에서 자동으로 관리됩니다. 장벽 거래는 스레드 간 조정이 필요한 거래입니다. 예를 들어, DDL 문, Primary Key 갱신을 포함하는 트랜잭션 및 특정 EVENTACTIONS 작업이 있습니다.

선택적으로, `COORDINATED keyword in a MAP statement. One use case for this would be force a SQLEXEC`를 직렬 실행과 유사한 방식으로 사용하여 다른 트랜잭션을 장벽 트랜잭션처럼 처리하도록 할 수 있습니다. 이는 대상 상태가 모든 트랜잭션에서 일관되지 않는 한 결과가 모호해질 수 있는 경우에 유용합니다.

주: 매핑된 테이블이 THREADRANGE를 기반으로 분할된 경우 조정된 Replicat는 비배리어 트랜잭션에 대한 종속성 계산을 수행하지 않습니다. 지정된 THREADRANGE 열을 사용하여 해시 값을 계산합니다. 해시 값을 기반으로 수신 데이터를 분할하고 이 해시 값과 일치하는 모든 레코드를 동일한 스레드로 보냅니다.

배리어 트랜잭션 처리 방법

모든 스레드가 수렴되어 장벽 거래가 시작될 때까지 기다립니다. 다른 스레드가 시작 위치에 도달할 때까지 장벽 트랜잭션이 일시 중지됩니다. 스레드가 이미 장벽 트랜잭션의 일부를 처리 중인 경우 해당 스레드가 롤백을 수행합니다. BATCHSQL 또는 `GROUPTRANSOPS` 매개변수로 제어되는 트랜잭션과 같은 그룹화된 트랜잭션도 롤백된 다음 장벽 트랜잭션 시작에 도달할 때까지 다시 적용됩니다.

모든 스레드가 수렴되고 장벽 거래 후 다음 거래가 시작될 때까지 기다립니다. 장벽 거래 전후의 두 동기화 지점은 메타데이터 작업과 EVENTACTIONS 작업이 모두 데이터 작업과 관련된 적절한 순서로 발생하도록 합니다.

장벽 트랜잭션 시작 시 스레드가 동기화되면 MAP 문에 지정된 모든 스레드 중에서 스레드 ID가 가장 낮은 스레드에 의해 장벽 트랜잭션이 순차적으로 처리된 다음 스레드 간 병렬 처리가 재개됩니다. Replicat 매개변수 파일에 USEDEDICATEDCOORDINATIONTHREAD 매개변수를 지정하여 특정 스레드(항상 스레드 0)를 통해 장벽 트랜잭션을 강제로 처리할 수 있습니다.