External Table Cache를 사용하여 Query 성능 향상

전용 Exadata 인프라의 자율운영 AI 데이터베이스에서 외부 테이블 캐시를 사용하여 데이터베이스 내의 외부 테이블에서 데이터를 캐시할 수 있습니다.

External Table 캐시는 데이터베이스에 스키마 객체로 생성되며 테이블과 인덱스가 데이터 파일에 저장되는 방식과 유사한 물리적 공간이 할당됩니다. External Table 캐시를 생성하면 스키마에 새 테이블이 생성되고 스키마에 대해 설정된 공간 할당량 제한도 External Table 캐시에 적용됩니다.

자율운영 AI 데이터베이스의 외부 테이블 캐시 정보

외부 테이블 캐시는 외부 테이블의 데이터를 저장하는 자율운영 AI 데이터베이스의 저장 영역입니다.

외부 데이터는 데이터베이스에 의해 관리되지 않지만 외부 테이블을 사용하여 데이터베이스 외부의 데이터를 query할 수 있습니다. External Table의 Query는 데이터베이스 테이블에 대한 Query만큼 빠르지 않습니다. 데이터에 액세스할 때마다 Object Store에 저장된 외부 파일에서 데이터를 패치(fetch)해야 하기 때문입니다.

외부 테이블 캐시 기능을 사용하면 데이터에 액세스하는 애플리케이션을 수정하지 않고도 자율운영 AI 데이터베이스 내의 외부 테이블에서 자주 액세스되는 데이터를 캐시에 저장할 수 있으므로 외부 테이블에 더 빠르게 액세스할 수 있습니다.

다음은 External Table 캐시를 사용할 때의 몇 가지 이점입니다.

다음 파일 유형에서 생성된 분할된 테이블과 분할되지 않은 테이블에 대해 External Table 캐시를 생성할 수 있습니다.

자세한 내용은 외부 데이터 질의를 참조하십시오.

필수 조건

External Table 캐시를 생성하기 위한 필요 조건을 나열합니다.

제한사항

자율운영 AI 데이터베이스에서 외부 테이블 캐시 사용에 대한 중요 메모 및 제한 사항을 나열합니다.

외부 테이블을 생성합니다.

DBMS_EXT_TABLE_CACHE.CREATE_CACHE를 실행하여 외부 테이블 캐시를 생성합니다.

캐시가 생성되면 처음에는 비어 있고 채우기에 대해 사용으로 설정됩니다. 캐시 크기는 지정된 한계에 도달할 때까지 스키마에 대해 정의된 공간 할당량 한계에 따라 파일이 추가될 때마다 증가합니다. 자세한 내용은 외부 테이블 캐시에 대한 선택적 크기 조정 기본 설정 지정을 참조하십시오.

  1. DBMS_EXT_TABLE_CACHE.CREATE_CACHE를 사용하여 스키마에 대한 외부 테이블 캐시를 생성합니다. 예:

     BEGIN
         DBMS_EXT_TABLE_CACHE.CREATE_CACHE (
           owner          => 'SALES',
           table_name     => 'STORE_SALES',
           partition_type => 'PATH');
     END;
     /
    

    그러면 SALES 스키마에 STORE_SALES 테이블에 대한 캐시가 생성됩니다. STORE_SALES는 객체 저장소에 저장된 데이터를 가리키는 외부 테이블입니다.

    owner 매개변수는 스키마 이름을 지정합니다. 이 예에서는 SALES 사용자에 대한 외부 테이블 캐시를 만듭니다.

    partition_type 매개변수는 외부 테이블 캐시에 사용할 분할 방식을 지정합니다. 이 예제에서는 FILE$PATH 열을 사용하여 캐시를 분할합니다. FILE$PATH는 객체 이름 시작까지 파일 경로 텍스트를 지정하는 보이지 않는 열입니다.

    자세한 내용은 외부 테이블 메타데이터 열CREATE_CACHE 프로시저를 참조하십시오.

  2. External Table 캐시를 처음 생성하면 메타 데이터는 데이터 딕셔너리에 저장되지만 캐시 데이터에 대해서는 공간이 할당되지 않습니다. USER_EXTERNAL_TAB_CACHES 뷰를 질의하여 캐시 생성을 확인할 수 있습니다.

     SELECT external_table_name, cached, disabled
       FROM user_external_tab_caches;
    

    자세한 내용은 DBA_EXTERNAL_TAB_CACHES and USER_EXTERNAL_TAB_CACHES Views를 참조하십시오.

    DBMS_EXT_TABLE_CACHE.VALIDATE 프로시저를 사용하여 외부 테이블 캐시를 검증합니다. 데이터베이스에서 참조된 외부 테이블을 찾을 수 없는 경우 오류가 보고됩니다.

    예:

     BEGIN
       DBMS_EXT_TABLE_CACHE.VALIDATE (
         owner         => 'SALES',
         table_name    => 'STORE_SALES',
         raise_errors  => TRUE);
     END;
     /
    

    자세한 내용은 VALIDATE Procedure를 참조하십시오.

External Table 캐시에 파일 채우기

External Table 캐시에 파일을 채우는 예제를 보여줍니다.

캐시를 생성한 후 캐시로 파일을 채울 수 있습니다. 파일을 채우면 지정된 External Table 파일의 내용이 캐시에 로드됩니다. 테이블에서 모든 파일을 채우거나 테이블의 특정 백분율을 채우거나 필터 조건을 지정하여 채울 파일을 제한할 수 있습니다. 예를 들어, 해당 이름 또는 날짜 범위를 기준으로 파일을 필터링할 수 있습니다.

스키마에 할당된 공간 할당량에 따라 Oracle은 캐시로 파일을 채우려고 시도합니다. 할당된 할당량 제한에 도달하면 Oracle은 필요한 공간이 할당되지 않는 한 파일 채우기를 중지합니다.

External Table 캐시는 자동으로 Refresh되지 않습니다. 객체 저장소의 파일이 수정될 때 캐시를 업데이트하려면 파일을 다시 채워야 합니다.

객체 저장소에서 파일을 삭제하면 해당 캐시된 데이터가 즉시 부적합해지므로 검색할 수 없습니다.

외부 테이블 캐시에 테이블 추가

DBMS_EXT_TABLE_CACHE.ADD_TABLE를 사용하여 전체 테이블 또는 특정 비율의 외부 테이블을 캐시에 채웁니다.

예제

BEGIN
  DBMS_EXT_TABLE_CACHE.ADD_TABLE (
    owner         => 'SALES',
    table_name    => 'STORE_SALES');
END;
/

이 예에서는 이미 채워진 기존 파일을 건너뛰고 캐시에 STORE_SALES 테이블을 채우려고 시도합니다.

BEGIN
  DBMS_EXT_TABLE_CACHE.ADD_TABLE (
    owner         => 'SALES',
    table_name    => 'STORE_SALES',
    percent_files => 80);
END;
/

이 예에서는 STORE_SALES 테이블의 80%를 캐시에 채우고 이미 채워진 기존 파일을 건너뜁니다.

percent_files 매개변수는 선택 사항이며, 이 매개변수를 지정하지 않으면 전체 테이블이 캐시에 채워집니다.

자세한 내용은 ADD_TABLE 프로시저를 참조하십시오.

외부 테이블 캐시에 파일 추가

다음 프로시저를 사용하여 하나 이상의 파일을 External Table 캐시에 추가할 수 있습니다.

예제

DBMS_EXT_TABLE_CACHE.ADD_FILE 프로시저를 사용하여 외부 테이블 캐시에 단일 파일을 채웁니다. 예:

BEGIN
  DBMS_EXT_TABLE_CACHE.ADD_FILE (
    owner        => 'SALES',
    table_name   => 'STORE_SALES',
    file_url     => 'https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata.parquet'
);
END;
/

이 예에서는 salesdata.parquet 파일의 데이터를 캐시로 채웁니다.

이 예에서는 지정된 파일이 캐시에 있고 파일이 마지막으로 캐시된 이후 수정되지 않은 경우 캐시로 파일 채우기를 건너뜁니다.

자세한 내용은 ADD_FILE 프로시저를 참조하십시오.

DBMS_EXT_TABLE_CACHE.ADD_BY_LIKE 프로시저를 사용하여 하나 이상의 파일을 External Table 캐시에 채웁니다. 예:

BEGIN
  DBMS_EXT_TABLE_CACHE.ADD_BY_LIKE (
    owner        => 'SALES',
    table_name   => 'STORE_SALES',
    path_filters => '["https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata.parquet",
                      "https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata1.parquet"]'
);
END;
/

이 예에서는 salesdata.parquetsalesdata1.parquet 파일의 데이터를 캐시에 채우고 이미 채워진 기존 파일을 건너뜁니다.

BEGIN
  DBMS_EXT_TABLE_CACHE.ADD_BY_LIKE (
    owner        => 'SALES',
    table_name   => 'STORE_SALES',
    path_filters => '["https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/sales#_data1.parquet",
                      "https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/sales#_data2.parquet"]',
    esc_char     => '#',
    force        => TRUE);
END;
/

이 예에서는 sales_data1.parquetsales_data2.parquet 파일을 캐시에 채웁니다.

이 예에서 '#' 문자는 이스케이프 문자로 정의됩니다. '#' 다음에 오는 '_' 문자는 단일 문자와 일치하는 와일드카드가 아닌 리터럴 밑줄로 처리됩니다.

자세한 내용은 ADD_BY_LIKE 프로시저를 참조하십시오.

DBMS_EXT_TABLE_CACHE.ADD_LATEST_FILES 프로시저를 사용하여 마지막 수정 날짜를 기준으로 하나 이상의 파일을 External Table 캐시로 채웁니다. 예:

BEGIN
  DBMS_EXT_TABLE_CACHE.ADD_LATEST_FILES (
    owner        => 'SALES',
    table_name   => 'STORE_SALES',
    since        => INTERVAL '7' DAY,
    max_files    => 5,
    force        => TRUE);
END;
/

since 매개변수는 시간 간격을 지정하며, 최근 7일 이내에 수정된 파일만 캐시에 채울 수 있습니다.

max_files 매개변수는 캐시에 채울 수 있는 파일 수를 제한합니다. 이 예에서는 5개의 파일만 채웁니다.

force 매개변수는 파일이 수정되지 않은 경우에도 지정된 파일을 캐시에 강제로 덮어씁니다.

자세한 내용은 ADD_LATEST_FILES 프로시저를 참조하십시오.

다음 데이터 딕셔너리 뷰를 query하여 External Table 캐시에 캐시된 파일을 나열합니다.

외부 테이블 캐시에서 파일 삭제

External Table 캐시에서 파일을 삭제하는 예제를 보여줍니다.

캐시에서 모든 파일을 제거하거나 필터 조건을 지정하여 캐시에서 하나 이상의 파일을 삭제할 수 있습니다. 예를 들어, 파일 이름을 기준으로 또는 특정 시간 간격을 기준으로 파일을 필터링할 수 있습니다.

외부 테이블 캐시 지우기

DBMS_EXT_TABLE_CACHE.CLEAR를 사용하여 외부 테이블 캐시에서 모든 파일을 삭제합니다. 예:

BEGIN
  DBMS_EXT_TABLE_CACHE.CLEAR (
    owner         => 'SALES',
    table_name    => 'STORE_SALES');
END;
/

이 예에서는 STORE_SALES 캐시에서 모든 파일을 삭제하고 제거된 파일에 사용되는 모든 공간을 할당 해제합니다.

자세한 내용은 CLEAR 프로시저를 참조하십시오.

외부 테이블 캐시에서 파일 삭제

다음 프로시저를 사용하여 External Table 캐시에서 하나 이상의 파일을 삭제할 수 있습니다.

예제

DBMS_EXT_TABLE_CACHE.DROP_FILE를 사용하여 외부 테이블 캐시에서 파일을 삭제합니다. 예:

BEGIN
  DBMS_EXT_TABLE_CACHE.DROP_FILE (
    owner        => 'SALES',
    table_name   => 'STORE_SALES',
    file_url     => 'https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata.parquet'
);
END;
/

이 예에서는 캐시에서 salesdata.parquet 파일을 삭제하고 제거된 파일에 사용되는 모든 공간을 할당 해제합니다.

자세한 내용은 DROP_FILE 프로시저를 참조하십시오.

DBMS_EXT_TABLE_CACHE.DROP_BY_LIKE를 사용하여 path_filters 매개변수를 기반으로 하나 이상의 파일을 삭제합니다. 예:

BEGIN
  DBMS_EXT_TABLE_CACHE.DROP_BY_LIKE (
    owner        => 'SALES',
    table_name   => 'STORE_SALES',
    path_filters => '["https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata.parquet",
                      "https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata1.parquet"]'
);
END;
/

이 예에서는 캐시에서 salesdata.parquetsalesdata1.parquet 파일을 삭제하고 제거된 파일에 사용되는 모든 공간을 할당 해제합니다.

BEGIN
  DBMS_EXT_TABLE_CACHE.DROP_BY_LIKE (
    owner        => 'SALES',
    table_name   => 'STORE_SALES',
    path_filters => '["https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/sales#_data1.parquet",
                      "https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/sales#_data1.parquet"]'
);
END;
/

이 예에서는 캐시에서 sales#_data1sales#_data2 파일을 삭제하고 제거된 파일에서 사용된 모든 공간을 할당 해제합니다.

이 예제에서 '#' 문자는 이스케이프 문자로 정의됩니다. '#' 다음에 오는 '_' 문자는 단일 문자와 일치하는 와일드카드가 아닌 리터럴 밑줄로 처리됩니다.

자세한 내용은 DROP_BY_LIKE 프로시저를 참조하십시오.

DBMS_EXT_TABLE_CACHE.RETIRE_FILES를 사용하여 지정된 간격에 따라 하나 이상의 파일을 삭제합니다. 예:

BEGIN
 DBMS_EXT_TABLE_CACHE.RETIRE_FILES (
    owner        => 'SALES',
    table_name   => 'STORE_SALES',
    before       => INTERVAL '30' DAY);
END;
/

이 예에서는 캐시에서 30일보다 오래된 파일을 삭제하고 제거된 파일에서 사용된 모든 공간을 할당 해제합니다.

자세한 내용은 RETIRE_FILES 프로시저를 참조하십시오.

위의 예에서는 캐시를 유지하면서 캐시에서 하나 이상의 파일을 제거합니다. 필요한 경우 파일을 캐시에 다시 로드할 수 있습니다. 자세한 내용은 Populate Files into External Table Cache를 참조하십시오.

외부 테이블 캐시 비활성화 및 활성화

External Table 캐시를 비활성화 및 활성화하는 예제를 보여줍니다.

DBMS_EXT_TABLE_CACHE.DISABLE를 실행하여 데이터베이스에서 외부 테이블 캐시를 사용 안함으로 설정합니다. 캐시를 사용 안함으로 설정해도 캐시에서 데이터가 삭제되지 않습니다. 대신 캐시가 DISABLED로 플래그 지정되고 옵티마이저가 질의 재작성에 캐시를 사용할 수 없습니다.

예제

BEGIN
    DBMS_EXT_TABLE_CACHE.DISABLE (
      owner          => 'SALES',
      table_name     => 'STORE_SALES');
END;
/

이 예에서는 STORE_SALES 캐시를 사용 안함으로 설정합니다.

자세한 내용은 DISABLE Procedure를 참조하십시오.

외부 테이블 캐시를 비활성화한 후 DBMS_EXT_TABLE_CACHE.ENABLE를 사용하여 캐시를 활성화합니다.

BEGIN
  DBMS_EXT_TABLE_CACHE.ENABLE (
    owner        => 'SALES',
    table_name   => 'STORE_SALES'
 );
END;
/

이 예에서는 STORE_SALES 캐시를 사용으로 설정합니다.

자세한 내용은 ENABLE 프로시저를 참조하십시오.

외부 테이블 캐시 삭제

External Table 캐시 삭제의 예를 보여줍니다.

DBMS_EXT_TABLE_CACHE.DROP_CACHE를 실행하여 외부 테이블 캐시를 삭제합니다. DBMS_EXT_TABLE_CACHE.DROP_CACHE 프로시저는 데이터베이스에서 지정된 외부 테이블 캐시를 제거하고 캐시와 연관된 저장 공간을 해제합니다.

BEGIN
    DBMS_EXT_TABLE_CACHE.DROP_CACHE (
      owner          => 'SALES',
      table_name     => 'STORE_SALES');
END;
/

이 예에서는 SALES 스키마에서 STORE_SALES 캐시를 삭제합니다.

캐시를 삭제하면 데이터 딕셔너리에서 해당 메타 데이터가 제거되고 캐시된 모든 데이터가 삭제됩니다.

자세한 내용은 DROP_CACHE 프로시저를 참조하십시오.

USER_EXTERNAL_TAB_CACHES 뷰를 query하여 캐시가 삭제되었는지 확인합니다. 예:

SELECT external_table_name, cached
  FROM user_external_tab_caches;

자세한 내용은 DBA_EXTERNAL_TAB_CACHES and USER_EXTERNAL_TAB_CACHES Views를 참조하십시오.

외부 테이블 캐시 정보 보기

자율운영 AI 데이터베이스는 외부 테이블 캐시를 모니터할 수 있는 뷰를 제공합니다.

보기 설명
DBA_EXTERNAL_TAB_CACHES 및 USER_EXTERNAL_TAB_CACHES 뷰 데이터베이스의 모든 외부 테이블 캐시 또는 사용자의 외부 테이블 캐시에 대한 정보를 제공합니다.
전체_외부_탭_캐시_위치 현재 사용자가 액세스할 수 있고 캐시에 저장된 External Table에 속하는 클라우드 저장 영역의 파일에 대한 정보를 제공합니다.
사용자_외부_탭_캐시_위치 현재 사용자가 소유하고 캐시에 저장된 External Table에 속하는 클라우드 저장 영역의 파일에 대한 정보를 제공합니다. 이 뷰는 OWNER 열을 표시하지 않습니다.

외부 테이블 캐시에 대한 선택적 크기 조정 환경 설정 지정

DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY 프로시저를 사용하여 외부 테이블 캐시에 대한 크기 조정 환경 설정 및 공간 할당량 제한을 설정할 수 있습니다.

기본적으로 유저에 대해서는 External Table 캐시가 비활성화됩니다. External Table 캐시를 활성화하고 생성하려면 DBMS_EXT_TABLE_CACHE.CREATE_CACHE 프로시저를 사용합니다. 캐시는 기본 스키마에 생성되며 스키마에 대해 정의된 모든 공간 할당량 제한을 상속합니다. 그러나 DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY 프로시저를 사용하여 External Table 캐시에 대한 공간 할당량을 정의할 수도 있습니다. DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY 프로시저의 PROPERTY_NAMEPROPERTY_VALUE 매개변수를 사용하여 공간 할당량 제한을 설정할 수 있습니다.

PROPERTY_NAME 매개변수는 MAX_CACHE_SIZEMAX_CACHE_PERCENT 값을 허용합니다. MAX_CACHE_SIZE 속성은 총 외부 캐시 크기를 바이트 단위로 지정합니다. MAX_CACHE_PERCENT 속성은 총 외부 캐시 크기를 지정된 사용자 할당량의 백분율로 지정합니다.

캐시 크기 등록 정보를 설정하기 전에 다음 우선 순위를 확인합니다.

예제

BEGIN
    DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY (
    property_name  => 'MAX_CACHE_PERCENT',
    property_value => 50,
    owner          => 'SALES');
END;
/

이 예에서는 SALES 스키마에 대해 캐싱 환경설정을 MAX_CACHE_PERCENT로 설정합니다.

property_value는 50%로, SALES 스키마에 대한 캐시 공간 할당량이 SALES에 대해 정의된 총 공간 할당량의 최대 50%임을 지정합니다.

BEGIN
    DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY (
    owner          => 'SALES',
    property_name  => 'MAX_CACHE_SIZE',
    property_value => 5368709120);
END;
/

이 예에서는 SALES 스키마에 대해 캐싱 환경설정을 MAX_CACHE_SIZE로 설정합니다.

property_value5368709120이며, SALES 스키마에 대한 최대 캐시 크기가 최대 5GB가 되도록 지정합니다.

자세한 내용은 SET_USER_PROPERTY 프로시저CREATE_CACHE 프로시저를 참조하십시오.

DBMS_EXT_TABLE_CACHE.GET_USER_PROPERTY를 사용하여 캐시 크기 속성을 검색합니다.

SET SERVEROUTPUT ON
    DECLARE
    max_cache_sz NUMBER,
    BEGIN
    max_cache_sz := DBMS_EXT_TABLE_CACHE.GET_USER_PROPERTY (
        property_name       => 'MAX_CACHE_SIZE',
        owner               => 'SALES');
END;
/

자세한 내용은 GET_USER_PROPERTY 함수를 참조하십시오.

외부 테이블 메타데이터 열

External Table 메타 데이터는 query를 수행할 때 데이터의 출처를 결정하는 데 유용합니다.

DBMS_CLOUD.CREATE_EXTERNAL_TABLE, DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE 또는 DBMS_CLOUD.CREATE_HYBRID_PART_TABLE를 사용하여 생성하는 외부 테이블에는 두 개의 보이지 않는 열 file$pathfile$name가 포함됩니다. 이러한 열은 레코드를 가져올 파일을 식별하는 데 도움이 됩니다.

SELECT genre_id, name, file\$name, file\$path FROM ext_genre
     WHERE rownum <= 2;
genre_id      name        file\$name     file\$path
--------      ---------   -----------   ----------------------
1             Action      genre.csv     https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_gold/o/genre
2             Adventure   genre.csv     https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_gold/o/genre

보이지 않는 열에 대한 자세한 내용은 표시되지 않는 열을 참조하십시오.

관련 항목

DBMS_EXT_CACHE 패키지