Objekty jsou automaticky ukládány do mezipaměti Exadata Smart Flash Cache (ESFC), avšak DBA může vynutit, aby byl objekt uchováván ve flash mezipaměti. CELL_FLASH_CACHE atribut storage clause řídí prioritizaci bloků v rámci ESFC a také zacházení s bloky Smart Scan. Existují tři možná nastavení
- VÝCHOZÍ:Mechanismus automatického ukládání do mezipaměti je aktivní. Toto je výchozí hodnota.
- ŽÁDNÉ:Tento objekt nikdy neukládat do mezipaměti.
- PONECHAT:Objekt by měl mít přednostní status.
Všimněte si, že toto označení také mění výchozí chování Smart Scans, které jim umožňuje číst z mezipaměti i disku.
Zde je příklad změny klauzule úložiště CELL_FLASH_CACHE pomocí příkazu „ALTER TABLE“:
Chcete-li připnout stůl v ESFC:
SQL> ALTER TABLE llamadas STORAGE (CELL_FLASH_CACHE KEEP); Table altered.
Tento atribut úložiště lze také zadat při vytváření tabulky:
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.
Nastavení klauzule úložiště CELL_FLASH_CACHE PONECHAT Smart Scan se pokusí načíst data přímo z paměti. Tuto situaci lze analyzovat zkontrolováním „zásahů čtení mezipaměti flash buňky “:
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
Operace skenování na velké tabulce nejsou ovlivněny mezipamětí Flash pokud není tabulka spojena s klauzulí CELL_FLASH_CACHE KEEP, jak je znázorněno na obrázku 1.
Odepnutí tabulky v ESFC:
SQL> ALTER TABLE llamadas STORAGE (CELL_FLASH_CACHE DEFAULT);
Může prozkoumat aktuální nastavení klauzule CELL_FLASH_CACHE dotazem na DBA_SEGMENTS, DBA_TABLES nebo DBA_INDEXES:
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