데이터베이스 업데이트 마법사에서 생성된 SQL 쿼리 최적화

이 문서에서는 특히 레코드가 이미 존재하는 경우 Adobe Campaign의 기존 스키마에 정수 필드를 추가하는 문제를 해결합니다. 이 문제를 해결하려면 4개의 명령(이 문서에서 설명한 대로)을 하나로 압축하여 SQL 쿼리를 최적화합니다. 이를 통해 성능 문제나 교착 상태 없이 효율적으로 운영할 수 있어야 한다.

설명 description

환경

  • Adobe Campaign
  • Adobe Campaign Classic

문제/증상

Gold Standard 9032 빌드를 포함한 대부분의 Adobe Campaign 빌드에서 기존 스키마에 새 열을 추가할 때 여러 문제가 발생할 수 있습니다.

이 문서의 범위는 다음과 관련된 한 가지 특정 문제를 해결하기 위한 것입니다.

  • 레코드가 이미 존재하는 경우 기존 스키마에 정수 필드 추가.
  • 애플리케이션에서 생성된 SQL 쿼리를 Postgres 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 i<column_name> SET NOT NULL;

여기서 문제는 데이터베이스에서 동시에 실행되는 4개의 명령이 있어 성능 문제나 교착 상태를 초래할 수 있다는 것입니다.
해결 방법은 이러한 네 가지 명령을 하나로 압축하고 다음과 같이 동일하게 변경하는 것입니다.

ALTER TABLE NmsRecipient ADD iFichierLiveDataCliqueurs SMALLINT NOT NULL SET Default 0 ;

필요한 모든 변경 작업을 수행합니다. 열을 추가하고, 기본값을 설정하고, NOT NULL을(를) 설정하고, NOT NULL 제약 조건 때문에 기존 레코드의 값을 0(으)로 설정합니다.

참고:

추가해야 하는 정수 열이 여러 개 있으면 하나씩 추가하고 각 변경 사항에 대해 데이터베이스 마법사를 실행합니다.

문이 모든 기존 레코드를 0(레코드 수에 따라 시간이 걸릴 수 있음)으로 업데이트하므로 원활한 작동을 보장하기 위한 것입니다.

원인

예를 들어 기존 수신자 테이블 또는 이미 백만 개의 레코드가 있는 다른 테이블이 있는 경우 이러한 문제가 발생할 수 있습니다.

이제 해당 테이블에 Integer 데이터 형식의 열을 하나 더 추가해야 하는 경우 이 경우 스키마 정의에 해당 열을 추가하고 데이터베이스에서 변경 사항을 커밋하려고 합니다.

데이터베이스를 업데이트하는 동안 데이터베이스에 교착 상태가 발생하거나 쿼리가 다른 작업을 차단합니다.

이는 주로 데이터베이스 마법사에서 생성한 SQL 명령을 기반으로 모든 레코드를 0(으)로 업데이트하기 때문입니다.

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