Páginas

27 de mar. de 2014

Otimizando Bancos de Dados Oracle com Database Smart Flash Cache



 
Olá pessoal,


     Hoje vou comentar sobre um recurso muito bom que surgiu no Oracle Database 11GR2 e que chama-se Database Smart Flash Cache (DSFC). Ele serve para 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, criando uma nova área de memória chamada Flash Cache, que ao invés de armazenar seus dados em memória RAM, armazena-os em disco(s) SSD (Solid State Disk).

     Ao utilizar DSFC, a Flash Cache 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 DSFC é 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 bem mais rápidos (média de 2x à 3x mais rápidos). Mas tome cuidado! Apesar de ganhar tempo no 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!
  
     É importante ressaltar que o I/O na Flash Cache (em discos SSD) é menos eficiente do que o I/O na Buffer Cache (em memória RAM), portanto, devemos utilizar DSFC somente quando identificarmos depois de um bom diagnóstico (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.
     
     DSFC é bom para uso em ambientes OLTP e ambientes com Oracle RAC, e está disponível somente para o Oracle Database Enterprise Edition (versão 11GR2 ou superior) e Sistemas Operacionais (SO) Enterprise Linux ou Solaris (mais um motivo para você evitar instalar Oracle em SO Windows)

     Após habilitar DSFC, devemos configurar individualmente cada objeto (tabela ou visão materializada) 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.
   
     DSFC introduz no BD 2 novos parâmetros (ver Imagem 01), que devem ser configurados para utilizar o recurso: 
  
          1- DB_FLASH_CACHE_FILE: identifica o dispositivo flash (raw device, arquivo em um disco SSD ou ASM disk group). No Oracle DB 11GR2  (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;
  
          2- DB_FLASH_CACHE_SIZE: identifica o tamanho máximo de armazenamento flash. Indica-se configurar entre 2 à 10 vezes o tamanho da SGA.


Imagem 01 - Representação gráfica simplificada do que é Flash Cache
Fonte: Oracle Corporation
 
     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:
    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 cinza pelo valor desejado:
    SQL> alter system set db_flash_cache_file = '/tmp/teste.fc' scope=spfile; 

2- Configurando o tamanho da Flash Cache:
    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 cinza pelo valor desejado:
    SQL> alter system set db_flash_cache_size = 100M scope=spfile; 

3- Reinicie o BD:
    Execute os comandos abaixo para reiniciar o BD e permitir que as configurações efetuadas nos itens anteriores passem a vigorar:
    SQL> shutdown immediate;
    SQL> startup;

4- Configure um objeto para que ele utilize a Flash Cache:
    Execute o comando abaixo para que uma tabela seja armazenada na Flash Cache, substituindo o texto em cor cinza pelo valor desejado:
    SQL> alter table schema.table storage (flash_cache keep);


Bom pessoal, por hoje é só!
Espero que tenham gostado! Qualquer dúvida é só deixar um comentário!

[]s


Referências:
   - Optimizing Oracle Database Performance on Oracle Linux with Flash, An Oracle White Paper, November 2013;
   - Oracle Database Smart Flash Cache, An Oracle White Paper, September 2010;
   - Oracle flash_cache tipsIT Tips by Burleson Consulting, September 5,  2012   
   - HD, SSD ou disco híbrido, qual o melhor para você?, Marco Chiappetta, PCWorld EUA
      

12 comentários:

  1. Mestre Fábio, excelente artigo.
    Valew!
    Reiner

    ResponderExcluir
  2. Parabéns pelo artigo Fábio.Muita gente desconhece desse recurso.

    ResponderExcluir
  3. Reiner, Lucas e Paulo, muito obrigado pelos seus comentários!

    ResponderExcluir
  4. Fábio, muito interessante o artigo. Aproveitando, queria tirar algumas dúvidas:

    Ao adicionar o DSFC, há algum tamanho mínimo para a extensão da Buffer Cache? Quero dizer um tamanho performático, porque em alguns casos após a análise do ambiente mencionada no artigo, devemos usar algum tamanho mínimo.

    E outra coisa que me chamou a atenção, foi a cláusula keep, quando se armazena uma tabela na flash cache. Gostaria de saber qual a vantagem no uso da cláusula, ou se a mesma é recomendada, acredito que seu uso seria recomendado apenas com tabelas pequenas, uma vez que com grandes tabelas sobraria muito pouco espaço na flash cache. Estaria correto, ou as tabelas candidatas precisam ser selecionadas com uma análise rigorosa?

    Agradeço sua atenção.

    ResponderExcluir
    Respostas
    1. Ernani, não há tamanho mínimo p/ o DSFC, mas é importante que ele tenha tamanho suficiente para comportar os dados das tabelas que vc configurar p/ usá-lo.

      A cláusula KEEP na Flash Cache segue o mesmo raciocínio de uso da mesma cláusula na Buffer Cache, ou seja, devemos utilizá-la p/ objetos que são constantemente acessados, e de preferência,que sejam pequenos, como vc mesmo disse, ok?

      Mais detalhes sobre KEEP POOL eu comento nos treinamentos Performance Tuning for Oracle DBAs.

      []s

      Excluir
  5. Bom artigo, mas me diz uma coisa você já viu ambientes que com o hardware nesse nivel, se o dono tem dinheiro para colocar um disco SSD, não era mais barato ele colocar uma quantidade maior de memória?

    Abraços

    ResponderExcluir
    Respostas
    1. Eli, o último servidor que adquirimos onde trabalho, a gente optou por investir em mais RAM ao invés de SSD e fizemos exatamente isso... mas é importante ressaltar que SSD é bem mais barato que RAM, portanto, se vc tiver já tiver discos SSD em um servidor e foi detectado que está faltando RAM, eu não recomendaria comprar mais RAM. Eu economizaria e utilizaria Smart Flash Cache.

      []s

      Excluir
  6. Fabio, você tem alguma recomendação para utilizar SSD em um banco oracle 10g?

    ResponderExcluir