데이터베이스 업데이트 마법사에서 생성된 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 또한, 기록 수에 따라 시간이 걸릴 수 있습니다.

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f