External Table Cache를 사용하여 Query 성능 향상
External Table 캐시는 데이터베이스에 스키마 객체로 생성되며 테이블과 인덱스가 데이터 파일에 저장되는 방식과 유사한 물리적 공간이 할당됩니다. External Table 캐시를 생성하면 스키마에 새 테이블이 생성되고 스키마에 대해 설정된 공간 할당량 제한도 External Table 캐시에 적용됩니다.
관련 항목
Autonomous Database의 외부 테이블 캐시 정보
외부 테이블 캐시는 외부 테이블의 데이터를 저장하는 Autonomous Database의 저장 영역입니다.
외부 데이터는 데이터베이스에 의해 관리되지 않지만 외부 테이블을 사용하여 데이터베이스 외부의 데이터를 query할 수 있습니다. External Table의 Query는 데이터베이스 테이블에 대한 Query만큼 빠르지 않습니다. 데이터에 액세스할 때마다 Object Store에 저장된 외부 파일에서 데이터를 패치(fetch)해야 하기 때문입니다.
외부 테이블 캐시 기능을 사용하면 데이터에 액세스하는 응용 프로그램을 수정할 필요 없이 Autonomous Database 내의 외부 테이블에서 자주 액세스하는 데이터를 캐시할 수 있으므로 외부 테이블에 더 빠르게 액세스할 수 있습니다.
-
성능 향상: 자주 액세스하는 외부 데이터에 대해 쿼리가 몇 배 더 빨라집니다. 동일한 데이터에 정기적으로 액세스하는 대시보드, 보고서 및 분석 도구에 이상적입니다.
-
100% 투명성: 캐싱 메커니즘은 완전히 투명합니다. 애플리케이션은 쿼리, 대시보드 또는 애플리케이션을 변경하지 않고도 향상된 속도의 이점을 누릴 수 있습니다.
-
하한 클라우드 비용: 멀티 클라우드 애플리케이션에서 캐싱은 원격 스토리지에서 반복되는 외부 데이터 검색의 필요성을 줄여주므로 리전 또는 클라우드 전반의 데이터 액세스와 관련된 데이터 송신 비용이 줄어듭니다.
-
Parquet
-
ORC
-
AVRO
-
빙산 테이블
자세한 내용은 외부 데이터 질의를 참조하십시오.
필수 조건
External Table 캐시를 생성하기 위한 필요 조건을 나열합니다.
-
DBMS_EXT_TABLE_CACHE
패키지에 대한EXECUTE
권한이 있어야 합니다. 자신의 스키마와 자신이 소유한 External Table에 대해서만 External Table 캐시를 생성할 수 있습니다. -
캐시 데이터에 대한 충분한 스토리지 용량이 있는지 확인하려면 스키마에 대해 적절한 공간 할당량이 할당되어 있어야 합니다.
-
객체 저장소에 저장된 외부 테이블 파일에 액세스하려면 인증서가 있어야 합니다. Oracle Cloud Infrastructure 객체 저장소에 액세스하기 위해 리소스 주체 인증서를 사용으로 설정하는 경우 인증서를 생성할 필요가 없습니다.
제한사항
Autonomous Database에서 외부 테이블 캐시 사용에 대한 중요한 참고 사항 및 제한 사항을 나열합니다.
-
자신의 스키마와 자신이 소유한 External Table에 대해서만 External Table 캐시를 생성할 수 있습니다.
-
External Table 캐시는 단일 External Table의 파일만 포함할 수 있습니다.
-
External Table 캐시에 대한 권한을 부여할 수 없으며 자신이 소유한 External Table 캐시의 데이터만 액세스할 수 있습니다.
-
객체가 객체 저장소에서 삭제되면 캐시에 있는 해당 데이터가 부적합으로 플래그 지정되며 액세스할 수 없습니다.
외부 테이블을 생성합니다.
DBMS_EXT_TABLE_CACHE.CREATE_CACHE
를 실행하여 외부 테이블 캐시를 만듭니다.
캐시가 생성되면 처음에는 비어 있고 채우기에 대해 사용으로 설정됩니다. 캐시 크기는 지정된 한계에 도달할 때까지 스키마에 대해 정의된 공간 할당량 제한에 따라 파일이 추가될 때마다 증가합니다. 자세한 내용은 외부 테이블 캐시에 대한 선택적 크기 조정 환경설정 설정을 참조하십시오.
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 프로시저를 참조하십시오.
외부 테이블 캐시에 파일 추가
-
ADD_FILE
: 캐시에 단일 파일을 추가합니다. -
ADD_BY_LIKE
: 지정된 경로 필터를 기반으로 지정된 파일을 하나 이상 추가합니다. -
ADD_LATEST_FILES
: 지정된 시간 간격에 따라 하나 이상의 파일을 추가합니다.
예
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
프로시저를 사용하여 하나 이상의 파일을 외부 테이블 캐시에 채웁니다. 예: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.parquet
및 salesdata1.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.parquet
및 sales_data2.parquet
파일을 캐시에 채웁니다.
이 예에서 '#
' 문자는 이스케이프 문자로 정의됩니다. '#
' 다음에 나오는 '_
' 문자는 단일 문자와 일치하는 와일드카드가 아닌 리터럴 밑줄로 처리됩니다.
자세한 내용은 ADD_BY_LIKE 프로시저를 참조하십시오.
DBMS_EXT_TABLE_CACHE.ADD_LATEST_FILES
프로시저를 사용하여 마지막 수정 날짜를 기준으로 하나 이상의 파일을 외부 테이블 캐시로 채웁니다. 예: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 프로시저를 참조하십시오.
외부 테이블 캐시에서 파일 삭제
External Table 캐시에서 파일을 삭제하는 예제를 보여줍니다.
외부 테이블 캐시 지우기
DBMS_EXT_TABLE_CACHE.CLEAR
를 사용하여 외부 테이블 캐시에서 모든 파일을 삭제합니다. 예:
BEGIN
DBMS_EXT_TABLE_CACHE.CLEAR
(
owner => 'SALES',
table_name => 'STORE_SALES');
END;
/
이 예제에서는 STORE_SALES
캐시에서 모든 파일을 삭제하고 제거된 파일에 사용되는 모든 공간을 할당 해제합니다.
자세한 내용은 CLEAR 프로시저를 참조하십시오.
외부 테이블 캐시에서 파일 삭제
-
DROP_FILE
: 캐시에서 단일 파일을 삭제합니다. -
DROP_BY_LIKE
: 지정된 경로 필터를 기반으로 캐시에서 하나 이상의 파일을 삭제합니다. -
RETIRE_FILES
: 지정된 간격에 따라 캐시에서 하나 이상의 파일을 삭제합니다.
예
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.parquet
및 salesdata1.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#_data1
및 sales#_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 프로시저를 참조하십시오.
위의 예에서는 캐시를 유지하면서 캐시에서 하나 이상의 파일을 제거합니다. 필요한 경우 파일을 캐시에 다시 로드할 수 있습니다. 자세한 내용은 외부 테이블 캐시에 파일 채우기를 참조하십시오.
외부 테이블 캐시 비활성화 및 활성화
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 및 USER_EXTERNAL_TAB_CACHES 뷰를 참조하십시오.
외부 테이블 캐시 정보 보기
Autonomous Database는 외부 테이블 캐시를 모니터할 수 있는 뷰를 제공합니다.
보기 | 설명 |
---|---|
데이터베이스의 모든 외부 테이블 캐시 또는 사용자의 외부 테이블 캐시에 대한 정보를 제공합니다. |
|
현재 사용자가 액세스할 수 있고 캐시에 저장된 External Table에 속하는 클라우드 저장 영역의 파일에 대한 정보를 제공합니다. |
|
현재 사용자가 소유하고 캐시에 저장된 External Table에 속하는 클라우드 저장 영역의 파일에 대한 정보를 제공합니다. 이 뷰는 |
외부 테이블 캐시에 대한 선택적 크기 조정 환경 설정 지정
DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY
절차를 사용하여 외부 테이블 캐시에 대한 크기 조정 기본 설정 및 공간 할당량 제한을 설정할 수 있습니다.
기본적으로 유저에 대해서는 External Table 캐시가 비활성화됩니다. 외부 테이블 캐시를 사용으로 설정하고 만들려면 DBMS_EXT_TABLE_CACHE.CREATE_CACHE
프로시저를 사용합니다. 캐시는 기본 스키마에 생성되며 스키마에 대해 정의된 모든 공간 할당량 제한을 상속합니다. 그러나 DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY
프로시저를 사용하여 외부 테이블 캐시에 대한 공간 쿼터를 정의할 수도 있습니다. DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY
프로시저의 PROPERTY_NAME
및 PROPERTY_VALUE
매개변수를 사용하여 공간 할당량 제한을 설정합니다.
PROPERTY_NAME
매개변수는 MAX_CACHE_SIZE
및 MAX_CACHE_PERCENT
값을 허용합니다. MAX_CACHE_SIZE
속성은 총 외부 캐시 크기를 바이트 단위로 지정합니다. MAX_CACHE_PERCENT
속성은 총 외부 캐시 크기를 지정된 사용자 할당량의 백분율로 지정합니다.
-
MAX_CACHE_SIZE
,MAX_CACHE_PERCENT
및 공간 할당량이 정의된 경우MAX_CACHE_PERCENT
가MAX_CACHE_SIZE
보다 우선합니다. -
MAX_CACHE_SIZE
만 정의되고MAX_CACHE_PERCENT
또는 공간 할당량이 정의되지 않은 경우MAX_CACHE_SIZE
가 우선합니다. -
공간 할당량만 정의되고
MAX_CACHE_SIZE
및MAX_CACHE_PERCENT
가 정의되지 않은 경우 캐시 크기 할당량은 기본적으로 총 스키마 할당량의 10%로 설정됩니다. -
MAX_CACHE_SIZE
,MAX_CACHE_PERCENT
또는 공간 할당량이 정의되지 않은 경우 캐시 공간 할당량은 기본적으로UNLIMITED
로 설정됩니다.
예
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_value
는 5368709120
이며, 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$path
및 file$name
가 포함됩니다. 이러한 열은 레코드를 가져올 파일을 식별하는 데 도움이 됩니다.
-
file$path
: 객체 이름의 시작 부분까지 파일 경로 텍스트를 지정합니다. -
file$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
보이지 않는 열에 대한 자세한 내용은 표시되지 않는 열을 참조하십시오.
For information about Oracle's commitment to accessibility, visit the Oracle Accessibility Program website at http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc.
오라클 고객지원센터 액세스
오라클 고객의 오라클 지원 서비스 접근 및 이용은 해당 서비스의 오라클 주문서에 명시된 조항들에 따릅니다.