Os objetos são automaticamente armazenados em cache no ESFC (Exadata Smart Flash Cache), no entanto o DBA pode impor que um objeto seja mantido na “Flash Cache”. A cláusula de storage CELL_FLASH_CACHE controla a priorização dos blocos no ESFC e também o tratamento “Smart Scan”. Existem três configurações possíveis:
- DEFAULT: Especifica que o cache é gerenciado automaticamente. Este é o valor padrão.
- NONE: Especifica que o objeto nunca será armazenado em cache.
- KEEP: Especifica que o objeto deve ser mantido em cache.
Observe que essa configuração altera o comportamento padrão do “Smart Scan” permitindo a leitura do cache e do disco.
Segue exemplo de alteração da cláusula CELL_FLASH_CACHE usando o comando “ALTER TABLE”:
Para “Pinar” uma tabela no ESFC:
SQL> ALTER TABLE llamadas STORAGE (CELL_FLASH_CACHE KEEP); Table altered.
Este atributo também pode ser especificado quando a tabela é criada:
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 storage(cell_flash_cache keep) 13 tablespace tbs_data;
Configurando a cláusula de storage CELL_FLASH_CACHE para KEEP o smart scan irá tentar ler os dados diretamente da memória. Essa situação pode ser analisada verificando as estatísticas “cell flash cache read hits“:
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
As operações de varredura, em uma tabela grande, geralmente não são afetadas pela Flash Cache a menos que a configuração CELL_FLASH_CACHE STORAGE esteja definida como KEEP como mostra a figura 1.
Figura 1: Resultados da Configuração da cláusula de storage CELL_FLASH_CACHE no ESFC
Para retirar uma tabela do ESFC:
SQL> ALTER TABLE llamadas STORAGE (CELL_FLASH_CACHE DEFAULT);
É possível verificar as configurações atuais da cláusula CELL_FLASH_CACHE consultando as views DBA_SEGMENTS, DBA_TABLES ou 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