Db2 pureScale 환경에서 CURRENT MEMBER 기본값을 사용하여 경합 문제 개선

Db2 pureScale 환경에서 컬럼의 기본값을 CURRENT MEMBER 특수 레지스터로 설정할 수 있습니다. 그런 다음 이 멤버 정보를 사용하여 테이블 또는 인덱스를 파티션할 수 있으므로 데이터베이스 경쟁을 줄일 수 있습니다.

다음 시나리오에서는 CURRENT MEMBER 컬럼을 사용하여 새 인덱스를 작성하면 데이터베이스 경쟁 문제가 개선되는 몇몇 상황에 대해 설명합니다. 이 새 인덱스가 작성되면 Db2 pureScale 클러스터는 멤버 번호 정보를 사용하여 테이블 인덱스를 참조할 때 멤버 간 활성 공유의 양을 줄일 수 있습니다. 이 자원 감소는 Db2 pureScale 환경의 속도 및 전반적인 성능을 향상시킬 수 있습니다.

고유하고 증가하는 시퀀스 값 또는 시간소인 삽입

테이블의 한 행을 지속적으로 증가하는 값 시퀀스(예: 구입 주문 수)를 저장하는 데 사용할 수 있습니다. 해당 값을 ID 컬럼으로 자동 생성하거나 외부 애플리케이션을 통해 프로그래밍 방식으로 생성할 수 있습니다. 그러나 이러한 삽입이 매우 빈번하게 발생하는 경우 경쟁 문제로 인해 사용자 쿼리가 느려집니다.

쿼리 성능을 향상시키기 위해 새 CURRENT MEMBER 컬럼을 작성한 후 시퀀스가 저장된 컬럼과 함께 해당 데이터를 인덱싱할 수 있습니다.
  1. 멤버 번호를 저장할 새 컬럼을 추가하십시오.
    ALTER TABLE ordernumber 
      ADD COLUMN curmem SMALLINT DEFAULT CURRENT MEMBER IMPLICITLY HIDDEN 
  2. 시퀀스 컬럼(이 예제에서는seqnumber)에서 인덱스를 작성(또는 삭제 및 재작성)하여 인덱스에 새 컬럼을 추가하십시오.
    CREATE INDEX seqindex 
      ON ordernumber (curmem, seqnumber)

시퀀스가 일련의 시간소인 값인 데이터베이스 디자인에서 유사한 접근법을 수행할 수 있습니다. 시간소인 컬럼의 인덱스가 PAGE SPLIT HIGH 옵션을 사용하고 새 CURRENT MEMBER 컬럼도 포함합니다.

소수의 고유 값만 있는 인덱스

일부 테이블에는 테이블의 행 수에 비해 적은 수의 값이 있는 컬럼이 있을 수 있습니다. 이 경우에도 CURRENT MEMBER 컬럼을 추가하는 것이 유용합니다.

이 경우 데이터베이스 성능을 향상시키려면 다음을 수행하십시오.
  1. 멤버 번호를 저장할 새 컬럼을 추가하십시오.
    ALTER TABLE customerinfo 
      ADD COLUMN curmem SMALLINT DEFAULT CURRENT MEMBER IMPLICITLY HIDDEN
  2. 몇 가지 다른 값(예: zipcodecountry)이 있는 하나 이상의 컬럼에서 인덱스를 작성(또는 삭제 및 재작성) 하십시오.
    CREATE INDEX lowvaridx 
      ON customerinfo (zipcode, country, curmem)

위의 모든 경우에 인덱스를 압축하면 새 CURRENT MEMBER 값의 인덱스 크기가 줄어듭니다.

기존 SQL문에 대한 영향을 줄이려면 CREATE TABLE 또는 ALTER TABLE 명령에서 IMPLICITY HIDDEN 옵션을 사용하여 새 컬럼을 숨기십시오. 이 숨겨진 컬럼 옵션을 지정하면 명시적 SQL문 참조에서만 멤버 정보를 사용할 수 있습니다.