복제 테이블 구현

Objective

After completing this lesson, you will be able to 복제본을 통해 성능을 개선합니다.

복제 테이블

데이터의 가상화와 복제 중에서 선택할 수 있는 방법을 배웠습니다. 하지만 가상화로 시작하기로 결정했지만 나중에 성능이 저하되어 복제로 전환하려면 어떻게 해야 할까요?

처음에는 가상 테이블 위에 리포트를 생성하는 것이 좋을 수 있습니다. 이 접근법은 빠른 구현과 손쉬운 유지보수를 지원하기 때문입니다.

이 슬라이드에는 가상 테이블에 대해 실행되는 리포트가 나와 있습니다.

그러나 경우에 따라 원격 데이터를 로컬 SAP HANA 시스템에 복제하면 원격 테이블의 데이터에 액세스하는 것보다 쿼리 성능이 향상될 수 있습니다. 따라서 가상화 접근 방식을 포기하고 복제 접근 방식을 재구현하는 것을 고려할 수 있습니다.

그러나 데이터 프로비저닝 접근법을 전환할 때의 문제는 복제된 데이터가 로드되는 새로운 대상 테이블을 가리키도록 모든 어플리케이션을 조정해야 한다는 것입니다. 이렇게 하면 부담 없이 수행할 수 있는 전송 및 테스트 태스크가 생성됩니다.

이 시나리오의 솔루션은 복제 테이블을 구현하는 것입니다. 이는 데이터 복제의 기능입니다.

이 슬라이드에는 복제된 테이블에 대해 실행되는 리포트가 나와 있습니다.

복제 테이블은 가상 테이블 옆에 위치하며 동일한 구조를 갖습니다. 복제 테이블은 데이터를 실시간으로 캡처하고 저장합니다.

이 슬라이드에서는 실행 중인 리포트를 가상 테이블과 복제된 테이블을 비교합니다.

복제 테이블을 구현하는 주요 기능은 가상 테이블과 복제 테이블 간에 쉽게 전환할 수 있는 토글입니다. 즉, 성능이 저하되고 성능이 향상될 때 다시 전환하기 시작하면 복제 테이블로 전환할 수 있습니다.

언제 전환하시겠습니까?

문제가 있는 원격 쿼리 및 두 개의 모니터링 뷰를 사용하는 것이 도움이 될 수 있는 케이스를 쉽게 식별할 수 있습니다.

  • M_EXPENSIVE_STATEMENTS
  • M_REMOTE_STATEMENTS

가상 테이블에서 실행되는 SQL 문의 실행 시간이 특정 임계값을 초과하면 M_EXPENSIVE_STATEMENTS 모니터링 뷰에 포함됩니다.

M_EXPENSIVE_STATEMENTS 모니터링 뷰와 M_REMOTE_STATEMENTS 모니터링 뷰의 공통 필드를 사용하여 느린 SQL 문의 원격 쿼리를 찾을 수 있으므로 가상 테이블을 통해 복제로 전환할 수 있습니다.

복제 테이블 정의

복제된 데이터와 가상 테이블 간에 전환하려면 가상 테이블에 해당 복제 테이블이 추가되어야 합니다.

다음은 복제 테이블의 몇 가지 특징입니다.

  • 각 가상 테이블에는 복제 테이블이 하나만 포함될 수 있습니다.
  • 복제 테이블은 소스 테이블이 업데이트될 때 실시간으로 업데이트됩니다.

    실시간 복제는 실시간 변경 데이터 캡처(CDC)를 지원하는 원격 소스에서만 지원됩니다.

    그렇지 않으면 경우에 따라 테이블로 데이터를 로드할 수 있습니다. 그런 다음 복제는 스냅샷 복제본이 됩니다.

  • 복제 테이블은 내부 사용자가 관리하는 내부 스키마에 자동으로 생성되어 저장됩니다. 그들은 뒤에서 숨어있다.

노트

복제 테이블 구조를 변경할 수 있는 사용자 소유 복제 테이블이라는 기능이 있습니다(예: 복제 테이블의 쿼리 성능 향상을 위해 분할 추가).

이 유형의 복제 테이블은 사용자 스키마에 생성되므로 수정할 수 있습니다.

Replica로 전환 후 가상 테이블로 다시 전환

  • 가상 테이블에 복제를 추가하려면 다음 명령문을 실행합니다.
    Code Snippet
    12
    ALTER VIRTUAL TABLE <virtual_table_name> ADD SHARED [SNAPSHOT] REPLICA;
  • 가상 테이블에 직접 다시 액세스하려면 다음 중 하나를 수행해야 합니다.
    • 특정 쿼리의 경우 HINT를 사용하여 복제 항목이 아닌 가상 테이블을 사용하도록 읽기 모드를 재정의합니다.

      Code Snippet
      12
      SELECT * FROM <virtual_table_name> WITH HINT(NO_VIRTUAL_TABLE_REPLICA);

      또는 쿼리를 실행하기 전에 SET 문을 사용하십시오.

      Code Snippet
      12
      SET 'VIRTUAL_TABLE_REPLICA' = 'FALSE'; SELECT * FROM <virtual_table_name>;

    • ALTER 문을 사용하여 복제를 일시적으로 비활성화합니다.

      Code Snippet
      1
      ALTER VIRTUAL TABLE <virtual_table_name> DISABLE REPLICA;

      나중에 다시 활성화할 수 있습니다. (사용 안 함 을 ENABLE 로 대체).

    • DROP 명령어를 사용하여 복제를 삭제합니다.

      Code Snippet
      12
      ALTER VIRTUAL TABLE <virtual_table_name> DROP REPLICA;

이 단원의 마지막에 도달하여 데이터 복제를 위한 다양한 접근 방식에 대해 배웠습니다.