뱃치 SQL
유효 기간
Replicat
설명
BATCHSQL 매개변수를 사용하여 Replicat의 성능을 향상시킵니다. BATCHSQL는 Replicat가 유사한 SQL 문을 배열로 구성하고 가속 속도로 적용하도록 합니다. 일반 모드에서는 Replicat가 한 번에 하나의 SQL 문을 적용합니다.
BATCHSQL은 다음에 대해 유효합니다.
-
i의 경우 Db2(V5R4 또는 i 6.1 제외)
-
Db2 LUW
-
z/
OS의 Db2 -
Oracle
-
PostgreSQL
-
SQL Server
-
Sybase
-
Teradata
-
타임스텐
BATCHSQL 사용 시기
BATCHSQL를 사용하기 전에 병렬 Replicat를 사용하여 Replicat 지연이 발생하는지 확인합니다. 그렇지 않은 경우 BATCHSQL를 사용으로 설정해 보십시오. BATCHSQL를 사용으로 설정하면 성능이 향상되고, 그렇지 않으면 사용으로 설정하고, 사용 안함으로 설정하고, 모든 테이블에 기본 또는 고유 키가 있는지 확인하고, 대규모 일괄 처리 작업이 제한되어 있는지 확인하고, 병렬 Replicat에 최적의 성능을 위해 충분한 메모리와 IO가 있는지 확인하는 등 Replicat에 대한 다른 대체 조정 연습을 고려하십시오. 이는 Replicat가 IO 바인드 또는 메모리 바인드가 아님을 의미합니다.
Replicat가 BATCHSQL 모드인 경우 행 변경사항이 작을수록 행 변경사항이 클수록 성능이 향상됩니다. 행 변경 당 100 바이트의 데이터에서 BATCHSQL는 Replicat의 성능을 최대 300 % 향상시키는 것으로 알려져 있지만 실제 성능 이점은 작업 혼합에 따라 달라집니다. 행당 약 5,000바이트의 데이터가 변경되면 BATCHSQL 사용 시의 이점이 줄어듭니다.
사용 제한
예외로 처리되는 SQL 문은 다음과 같습니다.
-
LOB또는LONG데이터를 포함하는 명령문입니다. -
25k보다 긴 행을 포함하는 명령문입니다.
-
대상 테이블에 기본 키 외에 하나 이상의 고유 키가 있는 명령문입니다. 해당 값이 변경될 수 있는 경우
BATCHSQL가 비기본 키에 대한 올바른 순서를 보장하지 않으므로 해당 명령문을 뱃치로 처리할 수 없습니다. -
(SQL Server) 대상 테이블에 트리거가 있는 명령문입니다.
-
오류를 일으키는 명령문입니다.
Replicat가 일괄 처리 모드에서 예외를 발견하면 일괄 처리 작업을 롤백한 후 다음 방법으로 예외를 적용하려고 시도하여 항상 트랜잭션 무결성을 유지 관리합니다.
-
첫번째 Replicat는
GROUPTRANSOPS매개변수로 설정된 트랜잭션 경계 내에서 한 번에 하나의 SQL 문으로 일반 모드를 사용하려고 시도합니다. 자세한 내용은 "GROUPTRANSOPS"을 참조하십시오. -
일반 모드가 실패하면 Replicat는 소스 모드를 사용하려고 합니다. 즉, 소스에서 사용된 것과 동일한 트랜잭션 경계 내에 SQL을 적용합니다.
예외 처리가 완료되면 Replicat가 BATCHSQL 모드를 재개합니다.
표 9 Replicat 모드
| 소스 트랜잭션(동일한 테이블 및 열 목록으로 간주) | 일반 모드의 Replicat 트랜잭션 | BATCHSQL 모드의 Replicat 트랜잭션 |
소스 모드에서 트랜잭션 복제 |
|---|---|---|---|
트랜잭션 1: `삽입` `삭제` Transaction2: `삽입` `삭제` 트랜잭션 3: `삽입` `삭제` |
`삽입` `삭제` `삽입` `삭제` `삽입` `삭제` |
`삽입`(x3) `삭제`(x3) |
트랜잭션 1: `삽입` `삭제` 트랜잭션 2: `삽입` `삭제` 트랜잭션 3: `삽입` `삭제` |
BATCHSQL 작동 방식
BATCHSQL 모드에서 Replicat는 유사한 SQL 문을 메모리 대기열 내의 일괄 처리로 구성한 다음 각 일괄 처리를 하나의 데이터베이스 작업에 적용합니다. 일괄 처리에는 동일한 테이블, 작업 유형(삽입, 갱신 또는 삭제) 및 열 리스트에 영향을 주는 SQL 문이 포함됩니다. 예를 들어, 다음은 각각 일괄 처리입니다.
-
테이블 A에 삽입
-
테이블 B에 삽입
-
테이블 A 업데이트
-
테이블 B 업데이트
-
테이블 A에서 삭제합니다.
-
테이블 B에서 삭제 참고: Oracle GoldenGate는 실행하기 전에 뱃치의 외래 키 참조 종속성을 분석합니다. 서로 다른 일괄 처리에 있는 명령문 간에 종속성이 있는 경우 참조 무결성을 유지 관리하려면 일괄 처리당 두 개 이상의 SQL 문이 필요할 수 있습니다.
캐시에 저장된 명령문 수 제어
MAXSQLSTATEMENTS 매개변수는 캐시된 명령문 수를 제어합니다. 자세한 내용은 "MAXSQLSTATEMENTS"을 참조하십시오. 오래된 명령문은 가장 오래 전에 사용된 알고리즘을 사용하여 재활용됩니다. 일괄 처리는 지정된 임계값을 기반으로 실행됩니다(참조).
기본값
사용 안함(일반 Replicat 모드의 프로세스)
구문
BATCHSQL
[CHECKUNIQUEKEYS | NOCHECKUNIQUEKEYS]
[THREADS (<threadID>[, <threadID>][, ...][, <thread_range> [,<thread_range>][, ...])]
[CHECKUNIQUEKEYS |
NOCHECKUNIQUEKEYS] |
Replicat에 적합합니다.
CHECKUNIQUEKEYS는 BATCHSQL 처리를 우회하는 고유 키가 있는 테이블이 발견될 때 강제로 비웁니다. 이렇게 하면 고유 키가 변경될 경우 원래 작업 순서가 유지됩니다.
기본값은 NOCHECKUNIQUEKEYS이며 BATCHSQL 처리를 계속할 수 있는 고유 키가 있는 테이블이 발견될 때 강제로 비우지 않습니다.
THREADS (<threadID>[, <threadID>][, ...][, <thread_range>[, <thread_range>][, ...])
BATCHESPERQUEUE, BATCHTRANSOPS 및 BYTESPERQUEUE에 적합합니다. 이러한 옵션을 조정 Replicat의 지정된 스레드에 적용합니다.
<threadID>[, <threadID>][, ...]
스레드 ID 또는 threadID, threadID, threadID 형식의 콤마로 구분된 스레드 목록을 지정합니다.
[, <thread_range>[, <thread_range>][, ...]
threadIDlow-threadIDhigh 형식의 스레드 범위 또는 threadIDlow-threadIDhigh, threadIDlow-threadIDhigh 형식의 콤마로 구분된 범위 목록을 지정합니다.
threadID, threadID, threadIDlow-threadIDhigh 등의 형식 조합이 허용됩니다.