페더레이티드 데이터베이스에서 원격 SQL 생성 및 전역 최적화

관계 별칭을 사용하는 페더레이티드 데이터베이스 쿼리의 경우 액세스 전략에는 원래의 쿼리를 원격 쿼리 단위 세트로 구분한 후 결과를 조합하는 작업이 포함될 수 있습니다. 이러한 원격 SQL 생성은 쿼리에 맞게 전역으로 최적화된 액세스 전략을 작성하는 데 도움이 됩니다.

옵티마이저는 푸시다운 분석의 출력을 사용하여 각 연산을 Db2® 서버에서 로컬로 평가할지 또는 데이터 소스에서 원격으로 평가할지 여부를 결정합니다. 이 결정은 연산 평가 비용 뿐만 아니라 DB2 서버와 원격 데이터 소스 간 데이터 및 메시지 전달 비용을 포함하여 비용 모델의 출력에 대한 결정에 기초합니다.

최적화된 쿼리를 작성하기 위한 것이지만 다음의 요인은 전역 최적화 및 쿼리 성능에 상당한 영향을 줍니다.

전역 최적화에 영향을 주는 서버 옵션

다음의 데이터 소스 서버 옵션은 전역 최적화에 영향을 줄 수 있습니다.
  • 처리 속도의 상대적 비율

    CPU_RATIO 서버 옵션을 사용하여 데이터 소스에서 처리 속도를 DB2 서버에서 처리 속도와 관련하여 지정하십시오. 비율이 낮으면 데이터 소스에서 처리 속도가 DB2 서버에서 처리 속도보다 빠름을 표시합니다. 이 경우 DB2 옵티마이저는 프로세서 집중 연산을 데이터 소스로 푸시다운하려고 고려할 수 있습니다.

  • 입출력 속도의 상대적 비율

    IO_RATIO 서버 옵션을 사용하여 데이터 소스의 시스템 입출력 속도를 DB2 서버의 시스템 입출력 속도와 관련하여 지정하십시오. 비율이 낮으면 DB2 서버에서 입출력 속도가 DB2 서버에서 입출력 속도보다 빠름을 표시합니다. 이 경우 옵티마이저는 입출력 집중 연산을 데이터 소스로 푸시다운하려고 고려할 수 있습니다.

  • DB2 서버와 데이터 소스 간 통신 비율

    COMM_RATE 서버 옵션을 사용하여 네트워크 용량을 지정하십시오. 비율이 낮으면 DB2 서버와 데이터 소스 간 네트워크 통신 속도가 느림을 표시하며 DB2 옵티마이저는 이 데이터 소스와 서로 송수신하는 메시지 수를 줄이는 것이 좋습니다. 비율이 0으로 설정된 경우 옵티마이저는 최소 네트워크 트래픽이 필요한 액세스 플랜을 작성합니다.

  • 데이터 소스 데이터 정렬 시퀀스

    COLLATING_SEQUENCE 서버 옵션을 사용하여 데이터 소스 데이터 정렬 시퀀스와 로컬 DB2 데이터베이스 데이터 정렬 시퀀스의 일치 여부를 지정하십시오. 이 옵션이 Y로 설정되지 않은 경우 DB2 옵티마이저는 이 데이터 소스에서 검색된 데이터가 정렬되지 않은 것으로 간주합니다.

  • 원격 플랜 힌트

    PLAN_HINTS 서버 옵션을 사용하여 데이터 소스에서 플랜 힌트를 생성하거나 사용해야 함을 지정하십시오. 기본적으로 DB2 서버는 데이터 소스로 플랜 힌트를 보내지 않습니다.

    플랜 힌트는 데이터 소스에서 옵티마이저에게 추가 정보를 제공하는 명령문 조각입니다. 일부 쿼리의 경우 이 정보를 통해 성능을 향상시킬 수 있습니다. 플랜 힌트는 데이터 소스의 옵티마이저가 인덱스 사용 여부, 사용할 인덱스 또는 사용할 테이블 조인 시퀀스를 결정하는 데 도움이 될 수 있습니다.

    플랜 힌트를 사용할 수 있는 경우 데이터 소스로 보내는 쿼리에는 추가 정보가 들어 있습니다. 예를 들어, Oracle 옵티마이저로 보내는 플랜 힌트가 포함된 명령문은 다음과 비슷합니다.
       select /*+ INDEX (table1, t1index)*/
           col1
         from table1
    
    플랜 힌트는 다음 문자열입니다. /*+ INDEX (table1, t1index)*/
  • DB2 옵티마이저 지식 기반의 정보

    DB2 서버에는 원시 데이터 소스에 대한 데이터가 들어 있는 옵티마이저 지식 기반이 있습니다. DB2 옵티마이저는 특정 데이터베이스 관리 시스템(DBMS)에서 생성할 수 없는 원격 액세스 플랜을 생성하지 않습니다. 즉, DB2 서버는 원격 데이터 소스의 옵티마이저가 이해하거나 승인할 수 없는 플랜을 생성하지 않습니다.

전역 최적화에 영향을 주는 별칭 특성

다음의 별칭 특정 요인이 전역 최적화에 영향을 줄 수 있습니다.
  • 인덱스 고려사항

    쿼리를 최적화하기 위해 DB2 서버는 데이터 소스에서 인덱스에 대한 정보를 사용할 수 있습니다. 이러한 이유로 인해 사용 가능한 인덱스 정보가 최신 상태여야 합니다. 별칭에 대한 인덱스 정보는 별칭을 작성할 때 처음 획득합니다. 뷰 별칭에 대한 인덱스 정보는 수집하지 않습니다.

  • 별칭에 대한 인덱스 스펙 작성
    별칭의 인덱스 스펙을 작성할 수 있습니다. 인덱스 스펙은 DB2 옵티마이저가 사용할 카탈로그에서 인덱스 정의(실제 인덱스가 아님)를 빌드합니다. CREATE INDEX SPECIFICATION ONLY문을 사용하여 인덱스 스펙을 작성하십시오. 별칭에 대한 인덱스 스펙을 작성할 때 사용하는 구문은 로컬 테이블에 대한 인덱스를 작성할 때 사용하는 구문과 비슷합니다. 다음과 같은 경우에 인덱스 스펙을 작성하십시오.
    • DB2 서버가 별칭 작성 중 데이터 소스에서 인덱스 정보를 검색할 수 없는 경우
    • 뷰 별칭의 인덱스를 원하는 경우
    • DB2 옵티마이저가 특정 별칭을 중첩된 루프 조인의 내부 테이블로 사용하도록 권장할 경우. 조인 컬럼에서 인덱스를 작성할 수 있습니다(없는 경우).

    뷰의 별칭에 대해 CREATE INDEX문을 발행하기 전에 필요 여부를 고려하십시오. 뷰가 인덱스가 있는 테이블에서 간단한 SELECT인 경우 데이터 소스에서 테이블에 대한 인덱스와 일치시키기 위해 별칭에 대한 로컬 인덱스를 작성하면 쿼리 성능을 상당히 향상시킬 수 있습니다. 그러나 간단한 SELECT문이 아닌 뷰(예: 두 테이블을 조인하여 작성하는 뷰)에서 인덱스를 로컬로 작성하는 경우 쿼리 성능이 낮아질 수 있습니다. 예를 들어, 두 테이블 간 조인인 뷰에서 인덱스를 작성하는 경우 옵티마이저는 이 뷰를 중첩된 루프 조인의 내부 요소로 선택할 수 있습니다. 조인이 여러 번 평가되므로 쿼리 성능이 낮아집니다. 대체 방법으로 데이터 소스 뷰에 참조된 각 테이블의 별칭을 작성한 후 두 별칭을 참조하는 DB2 서버에서 로컬 뷰를 작성할 수 있습니다.

  • 카탈로그 통계 고려사항

    시스템 카탈로그 통계는 별칭의 전체 크기와 연관된 컬럼에서 값의 범위에 대해 설명합니다. 옵티마이저는 별칭이 들어 있는 쿼리를 처리하기 위해 최저 비용 경로를 계산할 때 이러한 통계를 사용합니다. 별칭 통계는 테이블 통계와 동일한 카탈로그 뷰에 저장됩니다.

    DB2 서버는 데이터 소스에 저장된 통계 데이터를 검색할 수 있지만 이 데이터에 대한 갱신사항을 자동으로 발견할 수 없습니다. 또한 DB2 서버는 데이터 소스에서 오브젝트 정의의 변경사항을 자동으로 발견할 수 없습니다. 오브젝트의 통계 데이터(또는 정의)가 변경된 경우 다음을 수행할 수 있습니다.
    • 데이터 소스에서 RUNSTATS 명령과 동등한 명령을 실행하고 현재 별칭을 삭제(drop)한 후 재작성할 수 있습니다. 오브젝트의 정의가 변경된 경우에 이 방법을 사용하십시오.
    • SYSSTAT.TABLES 카탈로그 뷰에서 통계를 수동으로 갱신할 수 있습니다. 이 방법에서는 많은 단계가 필요하지 않지만 오브젝트의 정의가 변경된 경우에는 작동하지 않습니다.