Otimizando Bancos de Dados Oracle com Database Smart Flash Cache 
Autor: Hudson leandro | Publicado: 2014-03-27T19:12:00-07:00







•
&nbsp; 
Olá pessoal,



&nbsp; &nbsp; &nbsp;Hoje vou comentar sobre um recurso muito bom que surgiu no Oracle&nbsp;Database&nbsp;11GR2 e que chama-se&nbsp;Database&nbsp;Smart&nbsp;Flash Cache (DSFC). Ele
 serve&nbsp;para&nbsp;otimizar a performance de um Banco de Dados (BD) quando a 
memória RAM disponível no Servidor é insuficiente para atender a demanda
 da Buffer Cache,&nbsp;criando uma nova área de memória chamada&nbsp;Flash Cache, que ao invés de armazenar seus dados em memória RAM, armazena-os&nbsp;em disco(s) SSD (Solid State Disk).

&nbsp; &nbsp; &nbsp;Ao utilizar DSFC, a Flash Cache&nbsp;funciona como uma extensão da Buffer Cache e permite armazenar dados que não caberiam ou que consumiriam muito espaço nela. Isso
 permite evitar o I/O físico que seria gerado caso a Buffer Cache 
estivesse cheia, pois neste caso ocorreriam leituras/escritas físicas 
diretas nos datafiles, que estão armazenados em discos rígidos 
tradicionais. O grande segredo para ganhar desempenho utilizando&nbsp;DSFC&nbsp;é 
que evita-se o I/O físico nos discos rígidos substituindo-os por I/O nos discos SSD, que apesar de serem bem mais caros e de menor capacidade, são também mais rápidos (média de 2x à 3x mais rápidos). Mas tome cuidado!
 Apesar de gerar menos I/O, o consumo de CPU irá aumentar. Outro ponto 
que devemos nos atentar para obter boa performance com DSFC é utilizar somente DRAM SSD e não Flash SSD. Jamais utilize Flash SSD!

&nbsp;&nbsp;



&nbsp; &nbsp; &nbsp;É importante ressaltar que o I/O na&nbsp;Flash Cache&nbsp;(em discos SSD) é menos eficiente do que o I/O na Buffer Cache&nbsp;(em memória RAM), portanto, devemos utilizar DSFC somente quando identificarmos depois de um bom diagnóstico prévio (conhecimento que pode ser adquirido nos treinamentos Performance Tuning for Oracle DBAs), que o uso da Buffer Cache não está sendo suficiente, que não há mais memória RAM disponível no Servidor para aumentar a SGA (e consequentemente a Buffer Cache), e quando temos discos SSD no Servidor, disponíveis para a Flash Cache.
&nbsp; &nbsp; &nbsp;

&nbsp; &nbsp; &nbsp;DSFC é bom para uso em ambientes OLTP e ambientes com Oracle RAC, e está disponível somente para o Oracle Database Enterprise Edition&nbsp;(versão 11GR2 ou superior) e Sistemas Operacionais (SO) Enterprise Linux ou Solaris (mais um motivo para você evitar instalar Oracle em SO Windows).&nbsp;


&nbsp; &nbsp; &nbsp;Após habilitar DSFC, devemos configurar individualmente cada objeto (tabela ou visão materializada)&nbsp;que
 desejamos armazenar na Flash Cache. Uma dica é configurar apenas 
aqueles objetos grandes e/ou objetos que não são utilizados 
constantemente, e que poderiam gerar I/O físico nos discos rígidos. Em 
um benchmark realizado no Oracle White Paper "Optimizing Oracle Database Performance on Oracle Linux with Flash" (ver referências), o ganho de desempenho ao habilitar DSFC foi de 228% no tempo de resposta das instruções SQL que foram executadas durantes os testes.
&nbsp; &nbsp; &nbsp;DSFC introduz no BD 2 novos parâmetros (ver Imagem 01), que devem ser configurados para utilizar o recurso:&nbsp;

&nbsp;&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1- DB_FLASH_CACHE_FILE: 
identifica o dispositivo flash (raw device, arquivo em um disco SSD ou 
ASM disk group). No Oracle DB 11GR2 &nbsp;(patchset 11.2.0.4 ou 11.2.0.3 + 
Patch 12949806) é possível especificar somente 1 dispositivo flash, mas 
no 12C já é possível utilizar múltiplos dispositivos. Em ambientes RAC, 
cada nó deve possuir o seu próprio dispositivo;
&nbsp;&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2- DB_FLASH_CACHE_SIZE: identifica o tamanho máximo de armazenamento flash. Indica-se configurar entre 2 à 10 vezes o tamanho da SGA.




&nbsp;Segue abaixo um roteiro para vermos um exemplo de como habilitar DSFC e 
configurar um objeto para que seus dados sejam armazenados na Flash 
Cache:




1- Habilitando a Flash Cache:

&nbsp; &nbsp; Conectado na instância do BD, com privilégios de DBA, execute o 
comando abaixo para habilitar o dispositivo flash, substituindo o texto 
em cor&nbsp;cinza&nbsp;pelo valor desejado:


&nbsp; &nbsp; SQL&gt; alter system set db_flash_cache_file = '/tmp/teste.fc' scope=spfile;&nbsp;

2- Configurando o tamanho da Flash Cache:


&nbsp; &nbsp; Conectado na instância do BD, com privilégios de DBA, execute o 
comando abaixo para configurar o tamanho da Flash Cache, substituindo o 
texto em cor&nbsp;cinza&nbsp;pelo valor desejado:

&nbsp; &nbsp; SQL&gt;&nbsp;alter system set&nbsp;db_flash_cache_size&nbsp;= 100M&nbsp;scope=spfile;&nbsp;


3- Reinicie o BD:

&nbsp; &nbsp; Execute os comandos abaixo para reiniciar o BD e permitir que as 
configurações efetuadas nos itens anteriores passem a vigorar:


&nbsp; &nbsp; SQL&gt; shutdown immediate;
&nbsp; &nbsp; SQL&gt;&nbsp;startup;
4- Configure um objeto para que ele utilize a Flash Cache:

&nbsp; &nbsp; Execute o comando abaixo para que uma tabela seja armazenada na Flash Cache, substituindo o texto em cor&nbsp;cinza&nbsp;pelo valor desejado:
&nbsp; &nbsp; SQL&gt;&nbsp;alter table schema.table storage (flash_cache keep);


Referências:
&nbsp; &nbsp;-&nbsp;Optimizing Oracle Database Performance on&nbsp;Oracle Linux with Flash, An Oracle White Paper, November 2013;
&nbsp; &nbsp;-&nbsp;Oracle Database Smart Flash Cache, An Oracle White Paper, September 2010;
&nbsp; &nbsp;- Oracle flash_cache tips,&nbsp;IT Tips by Burleson Consulting,&nbsp;September 5,&nbsp; 2012