オブジェクトは自動的にExadataSmartFlash Cache(ESFC)にキャッシュされますが、DBAはオブジェクトがフラッシュ・キャッシュに保持されるように強制できます。 CELL_FLASH_CACHE storage句属性は、ESFC内のブロックの優先順位付けと、スマートスキャンブロックの処理を制御します。 3つの可能な設定があります
- デフォルト:自動キャッシュメカニズムが有効になっています。これがデフォルト値です。
- なし:このオブジェクトをキャッシュしないでください。
- KEEP:オブジェクトに優先ステータスを与える必要があります。
この指定により、スマートスキャンのデフォルトの動作も変更され、キャッシュとディスクの両方から読み取ることができるようになります。
「ALTERTABLE」コマンドを使用してCELL_FLASH_CACHEストレージ句を変更する例を次に示します。
ESFCでテーブルを固定するには:
SQL> ALTER TABLE llamadas STORAGE (CELL_FLASH_CACHE KEEP); Table altered.
このストレージ属性は、テーブルの作成時に指定することもできます:
SQL> create table region 2 ( 3 name varchar2(30 byte) not null enable, 4 num number not null enable, 5 buddy_region number default null, 6 change_state char(1 byte) default null, 7 weights varchar2(500 byte) default null, 8 primary key (name) 9 using index pctfree 10 initrans 2 maxtrans 255 compute statistics 10 tablespace tbs_idx enable 11 ) 12 (cell_flash_cache keep) 13 tablespace tbs_data; Table created.
ストレージ句の設定CELL_FLASH_CACHE 維持する 、スマートスキャンはメモリから直接データを読み取ろうとします。この状況は、「セルフラッシュキャッシュの読み取りヒット」を確認することで分析できます。 「:
SQL> select * from llamadas; SQL> select name, value from v$sysstat where name in ('physical read total IO requests','cell flash cache read hits'); NAME VALUE ------ ------------ physical read total IO requests 1274902412 cell flash cache read hits 984578330
大きなテーブルでのスキャン操作は、フラッシュキャッシュの影響を受けません。 図1に示すように、テーブルがCELL_FLASH_CACHEKEEP句に関連付けられていない場合。
図1:ESFCでのCELL_FLASH_CACHEストレージ設定の結果
ESFCでテーブルの固定を解除するには:
SQL> ALTER TABLE llamadas STORAGE (CELL_FLASH_CACHE DEFAULT);
DBA_SEGMENTS、DBA_TABLES、またはDBA_INDEXESを照会することにより、CELL_FLASH_CACHE句の現在の設定を調べることができます。
SQL> SELECT segment_name,segment_type,cell_flash_cache FROM dba_segments where segment_name = 'LLAMADAS'; SEGMENT_NAME SEGMENT_TYPE CELL_FLASH_CACHE ------------- ------------- --------------- LLAMADAS TABLE KEEP