外部表キャッシュを使用した外部表のパフォーマンスの向上
Oracle Autonomous Databaseの外部表キャッシュを使用すると、アクセス頻度の高いデータをデータベースの外部表からキャッシュできます。
外部表キャッシュは、Oracle Database 23aiでのみサポートされています。
- Autonomous Databaseの外部表キャッシュについて
外部表キャッシュは、外部表からのデータを格納するAutonomous Databaseの記憶域です。 - 外部表キャッシュを作成するための前提条件
外部表キャッシュを作成するための前提条件をリストします。 - Autonomous Databaseでの外部表キャッシュの作成および管理
外部表キャッシュを使用して、データベース内の外部表のデータをキャッシュできます。 - 外部表キャッシュのオプションのサイズ設定プリファレンスの設定
DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY
プロシージャを使用して、外部表キャッシュのサイズ設定プリファレンスおよび領域割当て制限を設定できます。 - 外部表キャッシュ・ノート
Autonomous Databaseでの外部表キャッシュの使用に関する重要なノートおよび制限事項を示します。
親トピック: 機能
Autonomous Databaseの外部表キャッシュについて
外部表キャッシュは、外部表からのデータを格納するAutonomous Databaseの記憶域です。
外部データはデータベースによって管理されませんが、外部表を使用してデータベース外部のデータを問い合せることができます。外部表に対する問合せは、データにアクセスするたびにオブジェクト・ストアに格納されている外部ファイルからフェッチする必要があるため、データベース表に対する問合せほど高速ではありません。
外部表キャッシュ機能を使用すると、データにアクセスするアプリケーションを変更することなく、Autonomous Database内の外部表から頻繁にアクセスされるデータをキャッシュできるため、外部表への高速アクセスが可能になります。
-
パフォーマンスの向上: 頻繁にアクセスされる外部データに対して問合せが数倍高速になります。同じデータに定期的にアクセスするダッシュボード、レポートおよび分析ツールに最適です。
-
100%透過的: キャッシュ・メカニズムは完全に透過的です。アプリケーションは、問合せ、ダッシュボードまたはアプリケーションに変更を加えることなく、高速化の恩恵を受けることができます。
-
クラウド・コストの削減: マルチクラウド・アプリケーションでは、キャッシュによってリモート・ストレージからの外部データ取得を繰り返す必要性が軽減されるため、リージョンまたはクラウド間のデータへのアクセスに関連するデータ・エグレス料金が削減されます。
-
Parquet
-
ORC
-
AVRO
-
アイスバーグ表
詳細は、外部データのクエリを参照してください。
親トピック: 外部表キャッシュを使用した外部表のパフォーマンスの向上
外部表キャッシュの作成の前提条件
外部表キャッシュを作成するための前提条件をリストします。
-
DBMS_EXT_TABLE_CACHE
パッケージに対するEXECUTE
権限が必要です。外部表キャッシュは、独自のスキーマおよび所有する外部表に対してのみ作成できます。 -
キャッシュ・データに十分なストレージ容量があることを確認するために、スキーマに適切な領域割当て制限が割り当てられている必要があります。
-
オブジェクト・ストアに格納されている外部表ファイルにアクセスするには、資格証明が必要です。Oracle Cloud Infrastructure Object Storeにアクセスするためにリソース・プリンシパル資格証明を有効にする場合は、資格証明を作成する必要はありません。
親トピック: 外部表キャッシュを使用した外部表のパフォーマンスの向上
Autonomous Databaseでの外部表キャッシュの作成および管理
外部表キャッシュを使用すると、データベース内の外部表のデータをキャッシュできます。
外部表キャッシュは、データベース内にスキーマ・オブジェクトとして作成されます。このスキーマ・オブジェクトには、表および索引がデータファイルに格納される方法と同様の物理領域が割り当てられます。外部表キャッシュを作成すると、スキーマに新しい表が作成され、スキーマに設定された領域割当て制限も外部表キャッシュに適用されます。
- 外部表キャッシュの作成
DBMS_EXT_TABLE_CACHE.CREATE_CACHE
を実行して、外部表キャッシュを作成します。 - 外部表キャッシュへのファイルの移入
外部表キャッシュにファイルを移入する例を示します。 - 外部表キャッシュからのファイルの削除
外部表キャッシュからファイルを削除する例を示します。 - 外部表キャッシュの無効化および有効化
外部表キャッシュの無効化および有効化の例を示します。 - 外部表キャッシュの削除
外部表キャッシュを削除する例を示します。 - 外部表キャッシュ情報の表示
Autonomous Databaseには、外部表キャッシュをモニターできるビューが用意されています。
親トピック: 外部表キャッシュを使用した外部表のパフォーマンスの向上
外部表のキャッシュの作成
DBMS_EXT_TABLE_CACHE.CREATE_CACHE
を実行して、外部表キャッシュを作成します。
キャッシュが作成されると、最初は空になり、移入が有効になります。キャッシュ・サイズは、スキーマに定義された領域割当て制限に応じて、割り当てられた制限に達するまで、ファイルが追加されるたびに増加します。詳細は、外部表キャッシュのオプション・サイズ設定プリファレンスの設定を参照してください。
外部表キャッシュへのファイルの移入
外部表キャッシュにファイルを移入する例を示します。
キャッシュを作成したら、ファイルをキャッシュに移入できます。移入ファイルは、指定された外部表ファイルの内容をキャッシュにロードします。表からすべてのファイルを移入するか、表の特定の割合を移入するか、または移入するファイルを制限するフィルタ条件を指定できます。たとえば、ファイル名または日付範囲に基づいてファイルをフィルタできます。
-
スキーマに割り当てられた領域割当て容量に応じて、Oracleはファイルをキャッシュに移入しようとします。割り当てられた割当て制限に達すると、必要な領域が割り当てられていないかぎり、Oracleはファイルの移入を停止します。
-
外部表キャッシュは自動的にはリフレッシュされません。オブジェクト・ストア上のファイルが変更されたときにキャッシュを更新するには、ファイルを再移入する必要があります。
-
ファイルがオブジェクト・ストアから削除されると、対応するキャッシュ・データはただちに無効になり、取得できなくなります。
外部表キャッシュへの表の追加
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
: 指定されたパス・フィルタに基づいて、指定された1つ以上のファイルを追加します。 -
ADD_LATEST_FILES
: 指定された時間間隔に基づいて1つ以上のファイルを追加します。
例
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
プロシージャを使用して、1つ以上のファイルを外部表キャッシュに移入します。たとえば: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
ファイルをキャッシュに移入します。
この例では、#
文字がエスケープ文字として定義されています。'#
'に続く'_
'文字は、任意の1文字に一致するワイルドカードとしてではなく、リテラル・アンダースコアとして扱われます。
詳細は、ADD_BY_LIKEプロシージャを参照してください。
DBMS_EXT_TABLE_CACHE.ADD_LATEST_FILES
プロシージャを使用して、最終変更日に基づいて1つ以上のファイルを外部表キャッシュに移入します。たとえば: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プロシージャを参照してください。
外部表キャッシュからのファイルの削除
外部表キャッシュからファイルを削除する例を示します。
外部表キャッシュのクリア
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
: 指定されたパス・フィルタに基づいてキャッシュから1つ以上のファイルを削除します。 -
RETIRE_FILES
: 指定した間隔に基づいてキャッシュから1つ以上のファイルを削除します。
例
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
パラメータに基づいて1つ以上のファイルを削除します。たとえば:
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
ファイルをキャッシュから削除し、削除されたファイルによって使用されているすべての領域を割当て解除します。
この例では、#
文字がエスケープ文字として定義されています。'#
'に続く'_
'文字は、任意の1文字に一致するワイルドカードとしてではなく、リテラル・アンダースコアとして扱われます。
詳細は、DROP_BY_LIKEプロシージャを参照してください。
DBMS_EXT_TABLE_CACHE.RETIRE_FILES
を使用して、指定した間隔に基づいて1つ以上のファイルを削除します。たとえば:
BEGIN
DBMS_EXT_TABLE_CACHE.RETIRE_FILES
(
owner => 'SALES',
table_name => 'STORE_SALES',
before => INTERVAL '30' DAY);
END;
/
この例では、キャッシュから30日より古いファイルを削除し、削除されたファイルで使用されるすべての領域を割当て解除します。
詳細は、RETIRE_FILESプロシージャを参照してください。
前述の例では、キャッシュの保持中にキャッシュから1つ以上のファイルを削除します。必要に応じて、ファイルを再度キャッシュにロードできます。詳細は、外部表キャッシュへのファイルの移入を参照してください。
外部表キャッシュの無効化および有効化
外部表キャッシュを無効化および有効化する例を示します。
DBMS_EXT_TABLE_CACHE.DISABLE
を実行して、データベースからの外部表キャッシュを無効にします。キャッシュを無効にしても、キャッシュからデータは削除されません。かわりに、キャッシュにはDISABLEDのフラグが付けられ、オプティマイザではクエリー・リライトにキャッシュを使用できません。
例
BEGIN
DBMS_EXT_TABLE_CACHE.DISABLE
(
owner => 'SALES',
table_name => 'STORE_SALES');
END;
/
この例では、STORE_SALES
キャッシュを無効にします。
詳細は、DISABLEプロシージャを参照してください。
外部表キャッシュを無効にした後、DBMS_EXT_TABLE_CACHE.ENABLE
を使用してキャッシュを有効にします。
BEGIN
DBMS_EXT_TABLE_CACHE.ENABLE
(
owner => 'SALES',
table_name => 'STORE_SALES'
);
END;
/
この例では、STORE_SALES
キャッシュを有効にします。
詳細は、ENABLEプロシージャを参照してください。
外部表キャッシュの削除
外部表キャッシュを削除する例を示します。
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
ビューを問い合せて、キャッシュが削除されたことを確認します。たとえば:SELECT external_table_name, cached
FROM user_external_tab_caches;
詳細は、DBA_EXTERNAL_TAB_CACHESビューおよびUSER_EXTERNAL_TAB_CACHESビューを参照してください。
外部表キャッシュ情報の表示
Autonomous Databaseには、外部表キャッシュをモニターできるビューが用意されています。
表示 | 説明 |
---|---|
DBA_EXTERNAL_TAB_CACHESビューおよびUSER_EXTERNAL_TAB_CACHESビュー |
データベース内のすべての外部表キャッシュまたはユーザーの外部表キャッシュに関する情報を提供します。 |
現在のユーザーがアクセスでき、キャッシュされた外部表に属するクラウド・ストレージ内のファイルに関する情報を提供します。 |
|
現在のユーザーが所有し、キャッシュされた外部表に属するクラウド・ストレージ内のファイルに関する情報を提供します。このビューは、 |
外部表キャッシュのオプション・サイズ設定プリファレンスの設定
DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY
プロシージャを使用して、外部表キャッシュのサイズ設定プリファレンスおよび領域割当て制限を設定できます。
デフォルトでは、ユーザーの外部表キャッシュは無効になっています。外部表キャッシュを有効化および作成するには、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ファンクションを参照してください。
親トピック: 外部表キャッシュを使用した外部表のパフォーマンスの向上
外部表キャッシュ・ノート
Autonomous Databaseでの外部表キャッシュの使用に関する重要なノートおよび制限をリストします。
-
外部表キャッシュは、独自のスキーマおよび所有する外部表に対してのみ作成できます。
-
外部表キャッシュには、単一の外部表からのファイルのみを含めることができます。
-
外部表キャッシュに対する権限を付与することはできず、所有している外部表キャッシュのデータにのみアクセスできます。
-
ファイルがオブジェクト・ストアから削除されると、キャッシュ内の対応するデータには無効のフラグが付けられ、アクセスできません。
親トピック: 外部表キャッシュを使用した外部表のパフォーマンスの向上