데이터베이스 업데이트 마법사에서 생성된 SQL 쿼리 최적화
설명 description
환경
Adobe Campaign Adobe Campaign Classic
문제
Gold Standard 9032 빌드를 포함한 대부분의 Adobe Campaign 빌드에서 기존 스키마에 새 열을 추가할 때 여러 문제가 발생할 수 있습니다.
이 문서의 범위는 다음과 관련된 한 가지 특정 문제를 해결하기 위한 것입니다.
- 레코드가 이미 존재하는 경우 정수 필드를 기존 스키마에 추가합니다.
- 애플리케이션에서 생성된 SQL 쿼리를 Postgres SQL용 효율적인 쿼리로 최적화합니다.
원인
예를 들어 기존 수신자 테이블 또는 이미 백만 개의 레코드가 있는 다른 테이블이 있는 경우 이러한 문제가 발생할 수 있습니다.
이제 데이터 유형의 해당 테이블에 열을 하나 더 추가해야 하는 경우 Integer
.
그런 다음 스키마 정의에 해당 열을 추가하고 데이터베이스에서 변경 사항을 커밋합니다.
데이터베이스를 업데이트하는 동안 데이터베이스에 교착 상태가 발생하거나 쿼리가 다른 작업을 차단합니다.
이는 주로 모든 레코드를으로 업데이트하기 때문입니다. 0 데이터베이스 마법사에서 생성한 SQL 명령을 기반으로 합니다.
해결 방법 resolution
솔루션
정수 열을 추가할 때 다음과 유사하게 생성된 SQL 문을 가져옵니다.
ALTER TABLE NmsRecipient ADD column_name SMALLINT;
UPDATE NmsRecipient SET column_name = 0;
ALTER TABLE NmsRecipient ALTER COLUMN column_name SET Default 0;
ALTER TABLE NmsRecipient ALTER COLUMN icolumn_name SET NOT NULL;
여기서 문제는 데이터베이스에서 동시에 실행되는 4개의 명령이 성능 문제나 교착 상태를 초래할 수 있다는 것입니다.
해결 방법은 이 4개의 명령을 하나로 압축하고 다음과 같은 변경 작업을 수행하는 것입니다.
ALTER TABLE NmsRecipient ADD iFichierLiveDataCliqueurs SMALLINT NOT NULL SET Default 0 ;
필요한 모든 변경 작업을 수행하고, 열을 추가하고, 기본값을 설정하고, 설정합니다. NOT NULL
및 기존 레코드의 값을 로 설정 0 때문에 NOT NULL
제한.
참고:
추가해야 하는 정수 열이 여러 개 있으면 하나씩 추가하고 각 변경 사항에 대해 데이터베이스 마법사를 실행합니다.
문이 모두 업데이트되므로 원활한 작업을 보장하기 위한 것입니다 기존 레코드 대상 0 또한, 기록 수에 따라 시간이 걸릴 수 있습니다.