“Pinando” tabela na Flash Cache

“Pinando” tabela na Flash Cache

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