3.2.1 デフォルトのキャッシュ・ポリシーのオーバーライド

Exadataスマート・フラッシュ・キャッシュは、頻繁にアクセスされるデータを高パフォーマンスのフラッシュ・ストレージに格納します。自動的にOracle Databaseと連携し、頻繁にアクセスされるデータや価値の高いデータを優先することで、キャッシュ効率をインテリジェントに最適化します。同様に重要なのは、再利用されないデータやキャッシュに収まらないデータのキャッシュを回避します。

デフォルトでは、キャッシュは自動的に発生し、ユーザーや管理者による作業は必要ありません。

通常は必須ではなくお薦めもしませんが、Oracle Exadata System Softwareでは、CELL_FLASH_CACHEセグメント・ストレージ・オプションを使用することで、管理者がデフォルトのキャッシング・ポリシーをオーバーライドし、特定のデータベース・セグメントをキャッシュ内に保持したり、キャッシュから締め出すことができます。CELL_FLASH_CACHEオプションは、通常の表と索引、パーティション表と索引、索引構成表など、様々なデータベース・オブジェクトのSQL CREATEまたはALTERコマンドの一部としてSTORAGE句に含めることができます。

次に例を示します:

SQL> CREATE TABLE t1 (c1 number, c2 varchar2(200)) STORAGE (CELL_FLASH_CACHE NONE);
SQL> ALTER TABLE t2 STORAGE (CELL_FLASH_CACHE KEEP);

CELL_FLASH_CACHEオプションは、次の設定をサポートしています。

  • NONE: この値により、Exadataスマート・フラッシュ・キャッシュは対応するセグメントをキャッシュしなくなります。周辺のデータベース・セグメントでこの設定を使用すると、より重要でアクセス頻度の高いデータベース・セグメントで、より多くのキャッシュ領域を使用できます。
  • DEFAULT: この値は、データベース・セグメントが、Exadataスマート・フラッシュ・キャッシュをサポートするインテリジェント・アルゴリズムを使用して自動的にキャッシュされることを指定します。この値は、CELL_FLASH_CACHEのデフォルト設定です。
  • KEEP: この値は、Exadataスマート・フラッシュ・キャッシュのセグメントを優先させ、非KEEPオブジェクトに属するデータよりも先にそのデータがキャッシュされるようにします。セグメントが常にキャッシュされることを保証するわけではありませんが、この設定により、セグメントがキャッシュ内に保持される可能性が大幅に高まります。

    ノート:

    • 一般に、この設定はお薦めしません。過剰に使用すると、頻繁にアクセスされる非KEEPオブジェクトに使用できる領域が制限されて、パフォーマンスに悪影響を及ぼす可能性があります。

    • この設定では、データのすべてのミラー・コピーについてキャッシュ優先度が引き上げられます。このオプションを高冗長性ストレージで使用すると、3つのデータ・コピーはすべて、3つの別個のストレージ・サーバー上にあるExadataスマート・フラッシュ・キャッシュで、キャッシュ優先度が引き上げられます。これに対し、デフォルトのキャッシュ・アルゴリズムでは、第3ミラーはプライマリ・データ・コピーより早くキャッシュから追い出されます。

    • Oracle Exadata System Softwareリリース24.1.0およびOracle Database 23ai以降、この設定のセグメントはExadataスマート・フラッシュ・キャッシュに自動的に移入されます。以前は、セグメントの読取り時にセグメント・データが移入されていました。

CELL_FLASH_CACHEセグメント・ストレージ・オプションは、パーティション化されたセグメントのパーティションごとに個別に設定できます。これは、予測可能な使用パターンに基づいて異なるパーティションのキャッシュ優先度に影響を与える場合に、特に役立ちます。CELL_FLASH_CACHEセグメント・ストレージ・オプションをパーティションに設定するときに、DEFERRED INVALIDATION句を追加できます。次に例を示します:

SQL> ALTER TABLE ptable MODIFY PARTITION p1 STORAGE (CELL_FLASH_CACHE KEEP) DEFERRED INVALIDATION;

DEFERRED INVALIDATION句を使用すると、依存カーソルをすぐに無効化することなく、セグメント・ストレージ・オプションを動的に変更できます。このオプションには、Oracle Databaseバージョン19.15とOracle Databaseバージョン21.6以降のリリースに含まれるバグ33456703のパッチが含まれているOracle Databaseソフトウェアが必要です。

例3-1 パーティションに対するCELL_FLASH_CACHEの設定

この例は、CREATE TABLEコマンドで複数のパーティションに個別にCELL_FLASH_CACHEを設定する方法を示しています。

CREATE TABLE ptable (c1 number, c2 clob) TABLESPACE TBS_1
          PARTITION BY RANGE(c1) ( PARTITION p1 VALUES LESS THAN (100)
             TABLESPACE TBS_2 STORAGE (CELL_FLASH_CACHE DEFAULT),
          PARTITION p2 VALUES LESS THAN (200) TABLESPACE TBS_3
             STORAGE (CELL_FLASH_CACHE KEEP));

例3-2 LOBセグメントに対するCELL_FLASH_CACHEの設定

この例は、CREATE TABLEコマンドでLOBセグメントにCELL_FLASH_CACHEを設定する方法を示しています。

CREATE TABLE tkbcsrbc (c1 number, l1 clob)
           lob (l1) STORE AS securefile 
              (cache nologging STORAGE (CELL_FLASH_CACHE NONE))
           PCTFREE 0 TABLESPACE tbs_93 STORAGE 
              (initial 128K next 128K pctincrease 0);

例3-3 CELL_FLASH_CACHEと組み合せたALTER TABLEの使用

STORAGE句の変更が許可されるオブジェクトの場合、これらの例に示すように、CELL_FLASH_CACHEと組み合せてALTERコマンドを使用できます。

ALTER TABLE tkbcsrbc STORAGE(CELL_FLASH_CACHE KEEP);

ALTER TABLE tkbcsrbc MODIFY LOB (l1) (STORAGE (CELL_FLASH_CACHE DEFAULT));

例3-4 ビューを使用したCELL_FLASH_CACHEストレージ句の問合せ

CELL_FLASH_CACHE STORAGE句属性は、関連するオブジェクトに基づいたデータベース・ビューを使用して問い合せることができます。

SELECT TABLESPACE_NAME, TABLE_NAME, CELL_FLASH_CACHE FROM user_tables WHERE table_name='TKBCSRBC';

SELECT CELL_FLASH_CACHE FROM ALL_INDEXES WHERE index_name='TKBCIDX';