Vamos iniciar um novo tópico na nossa área DB2 LUW. Começaremos alguns posts falando sobre Performance em um ambiente DB2 LUW. Inicialmente dedicaremos os posts para ambientes OLTP (Transacionais).
SISTEMAS DE STORAGE
Atualmente os tão conhecidos Sistemas de Storage (por exemplo: IBM System Storage® DS6800 e DS8300) oferecem muitas vantagens quando comparados a discos individuais (servidores onde os discos são adicionados conforme necessidade e sem acesso ao um Sistema de Storage). Primeiramente o “overhead” de administração de discos é reduzida, teremos melhor performance, esses sistemas oferecem um grande “storage server cache”, acesso “multipath”, backup, confiabilidade e disponibilidade assegurada e melhorada.
Esses são alguns dos pontos importantes ao decidir entre alocação de discos individuais ou optar por um sistema de Storage.
Sem considerar o recente sucesso dos discos SSDs (Solid-State Devices), discos magnéticos são ainda a regra em data centers. Devido uma diferença de processamento entre a velocidade de um processador e os discos, o que chamamos de contenção de I/O logo se torna um problema para o ambiente quando o mesmo não foi bem estruturado. Lembre-se que o planejamento inicial e estruturação do ambiente são pontos onde o DBA deve atuar e aconselhar.
Como regra inicial e melhores práticas, para manter um banco de dados performando à um nível aceitável e diminuindo o gargalo de I/O devemos distribuir os dados do ambiente DB2 em vários discos. Com isso teremos paralelismo na busca pelos dados. Essa regra vale para ambientes onde exista um Sistema de Storage, assim como ambientes onde discos são adicionados conforme necessidade, ou seja, devemos ter volumes lógicos ou grupo de discos formados por um número X de discos, ao invés de apenas um disco de 100 GB podemos ter 5 discos de 20GB por volume lógico ou grupo de discos.
DISK ARRAYs
A maioria dos Sistemas de Storage e Sistemas Operacionais suportam o que chamamos de RAID de disco. Existem vários níveis de RAID, e cada nível de RAID indica como os arrays de discos estão arranjados e qual tipo de falha eles tolerarão. Isto indiretamente influenciará na performance do array de disco.
RAID0 – utiliza blocks de disco no formato “round-robin” ou também chamado de “striping” de disco. Não existe redundância para este nível, porém possuem a maior velocidade de escrita e leitura, pois todos os discos que pertencem a este array podem ser acessados de forma paralela durante operações de I/O.
RAID1 – também conhecido como “mirroring” ou espelhamento, requer uma redundância de disco para cada disco existente no array. Este nível prove a melhor solução em caso de falha. Por exemplo, metade dos discos no array podem ser perdidos sem que haja interrupção ou qualquer efeito no ambiente. Entretando, utilizando este nível um custo será aplicado, ou seja, ele duplica as necessidade de espaço em disco e diminui o “throughput”, pois cada escrita precisa ser executada duas vezes.
RAID2 e RAID3 – utiliza paridade de bit e byte como solução de redundância.
RAID4 e RAID5 – ambos utilizam paridade de bloco como solução de redundância, oferecendo tolerância a falha de um disco. RAID4 utiliza uma paridade dedicada de disco, e durante operações de escrita intensiva (sistemas OLTP) isso pode acarretar um gargalo no ambiente. RAID5 oferece uma melhora de performance utilizando paridade distribuida para eliminar o gargalo durante operações de escrita.
Para ambiente OLTP em DB2 LUW, o aconselhável é utilizar RAID5 para os containers das tablespaces onde performance não seja um problema. Onde performance é exigida, de preferência para os RAIDs 1 + 0 ou 0 + 1. Se possível, utilize storage-server-level RAID (implementação de RAID via storage – o que ocorre geralmente) ou adapter-level hardware RAID (implementado diretamente no hardware – placas ou cards para RAID).
Para os arrays de disco, desabilite a funcionalidade read-ahead do Storage, pois em ambientes OLTP as consultas não possuem um padrão sequencial. Habilite a funcionalidade write-behind para escritas rápidas. O write-behind quando habilitado não espera pela escrita em página do disco, quando a página é copiada para o server cache do storage a operação de escrita é considerada com sucesso pela engine do DB2 LUW. O write-behind também não causará nenhum problema mesmo em caso de queda de energia, pois a arquitetura de um Sistema de Storage possui tecnologia para mante-lo funcionando até que todas as páginas que estavam em cache sejam descarregadas para disco.
Não esquecendo dos logs transacionais, toda informação “committada” ou não precisa ser garantida, dai a necessidade também de pensarmos onde colocaremos nossos logs para serem aplicados em caso de falha ou qualquer outro problema onde a base de dados necessitar de recuperação.
Ambientes OLTP possuem uma carga pesada de operações de INSERT, UPDATE e DELETE que demandam muito da performance de I/O do ambiente. Embora RAID5 possa ser utilizado como solução de paridade para os logs transacionais, RAID1 seria o recomendado devido a segurança desses dados, mas RAID1 pode tornar-se um problema de performance. Caso isto ocorra utilize RAID 1 + 0, pois este nível irá prover espelhamento individual para cada disco e o striping irá distribuir os dados ao longo dos dos pares de discos espelhados. É possível também optar pela opção RAID 0 +1, onde ocorrera striping através dos discos e todo o conjunto será espelhado.
Uma outra funcionalidade oferecida atualmente pelos modernos Sistemas de Storage e Sistemas Operacionais é o famoso “Load Balacing e Failover para Multipath”. O Multipath conecta o servidor e sistema operacional ao Sistema de Storage. Durante operações normais o adapter fará o compartilhamento do workload, mas se um desses adapters falhar, então outro adapter continuará servindo as operações de I/O que estão ocorrendo no seu sistema de banco de dados. Essa tecnologia causará um pequeno ou quase nenhum impacto de performance ao seu ambiente.
Utilize as seguintes dicas quando estiver desenhando seu novo ambiente DB2 LUW:
- Utilize Sistemas de Storage e Sistemas Operacionais que possuem capacidade e funcionalidades de implementar RAID em discos ou no próprio hardware do servidor;
- RAID5 oferece um balanceamento entre custo e redundância, mas a performance é um pouco reduzida devido os recálculos de paridade;
- Desabilite a funcionalidade de Read-Ahead do nível de Storage para ambientes OLTP;
- Utilize RAID 1+0 ou 0 + 1 como solução de melhor performance, disponibilidade e escalabilidade para os logs transacionais e containers;
- Se o Sistema de Storage possui capacidade de limpeza de cache em caso de falta de energia, por exemplo, habilite a funcionalidade de Write-Behind do seu Sistema de Storage;
- Se o RAID a nível de Hardware não é suportado, utilize pelo menos RAID ao nível de Storage;
- E por último não menos importante, RAIDs a nível de Hardware são mais rápidos que RAIDs a nível de Software presentes em Sistemas Operacionais ou nível de Storage.
Por hoje é isso pessoal. Aguardem os próximos posts com mais dicas de performance para o seu ambiente OLTP rodando com DB2 LUW.
Qualquer dúvida ou sugestões estamos à disposição.
Abraço a todos.
Para maiores informações de melhores práticas de Storage, visite o Developerworks IBM.
Descordo do item “Utilize RAID 1+0 ou RAID5 como solução de melhor performance, disponibilidade e escalabilidade para os logs transacionais;”. RAID5 é mais lento que RAID 1+0 para gravação (é uma gravação a mais), e Logs Transacionais são pura gravação. Mesmo que o Storage possua um mecanismo de aceleração (Cache), o RAID 1+0 seria ainda mais rápido com este mecanismo.
Além disso, o benefício do RAID5 é espaço, e Logs Transacionais geralmente são as menores partes do banco de dados.
Um argumento para o RAID5 geralmente é “no meu ambiente funciona bem assim”. Se seu ambiente crescer em concorrência e carga, talvez não.
Fala ai Portilho….Essa parte é so um resumo. De uma olhada na parte onde falo de logs transacionais. Coloquei o RAID 0 + 1 como opcao de melhor performance.
O bom e velho “movimento contra o RAID 5” em servidor de banco de dados!
Sobre o RAID 5, trecho extraído do Oracle-Base (meu blog preferido sobre Oracle):
“This RAID level stripes data and parity information across 3 or more disks. The parity information, which is always stored on a separate disk to its corresponding data, allows the contents of lost blocks to be derived. The significant write overhead associated with this RAID level make it slower than the previous methods, especially when a disk failure occurs, but it requires far fewer disks so it is very cost effective. In the past people have avoided RAID 5 for database applications but improvements in disk speed and controller performance mean that it is a viable solution for datafiles if performance is not a consideration.”
Fala ai Milton. Pra mim RAID5 é o famoso custo-benefício, nem o céu nem o inferno….lembrando que poucas empresas estão dispostas a gastar realmente com TI….
Fala pessoal! Sempre é bom reler o BAARF.
É um site criado e assinado pelos maiores especialistas em bancos de dados do mundo, só para mostrar as desvantagens do RAID5 e similares. E com bom humor.
http://baarf.com/
Inclusive li hoje uma apresentação de Informix mostrando um teste do CERN que demonstra que o RAID 5 é até muito mais inseguro!
http://www.miracleas.com/BAARF/Why_RAID5_is_bad_news.pdf
RAID5, só em banco de dados de padarias, posto de gasolina, banca de jornal, etc….
De novo…..o escrito acima não é lei e sim um guide de melhores práticas. Até as melhores práticas incorrem em erros. Voce e sua experiencia irao dizer o que é melhor ou não para seu ambiente. Acima não foi citado nenhum ambiente em especifico. Concordo que RAID5 seja absolutamente pior que RAID 0+1. Digamos que você tenha dinheiro para andar de Ferrari, bom pra voce, mas alguns terão dinheiro apenas para andar de Golf 2003. É o mesmo caso dos RAIDs, você aplica o melhor e mais comodo ( que sua empresa pode pagar ) a sua empresa. Se ela tiver dinheiro para bancar RAID10 em tudo, voce DBA estara nos melhores dos mundos, caso contrario va de outros RAIDs incluindo os que aceitam paridade. Voce tera um custo por isto, mas ainda sim tera seu ambiente funcionando.
Eu sinceramente não sou Xiita e ja vi muitos ambientes rodando em RAID5. Alias ja vi varias empresas grandes que nao bancaram o RAID10, e olha que tem dinheiro para isso.
Agora uma pergunta Portilho, qual RAID é utilizado na sua empresa? Todos sao RAID 10? RAID1?
O BAARF é sobre grandíssimos ambientes. Esses caras não lembram o que é MB.
Como eu disse antes, se você não tem grande carga, funciona.
Se você tem grande carga e pouco dinheiro, funcionará mal.
Não há problema em andar de Golf. A não ser que você precise andar a 280km/h.
Na empresa onde trabalho, todos os grandes que arquiteto são RAID 1+0 ou 1, se faltar dinheiro e/ou espaço. Até temos um RAID0 para um DW que pode sacrificar a disponibilidade. Nos pequenos/pouco utilizados nem me meto. E todos grandes / ocupados com problemas de gravação que chegam lá estão em RAID 5 ou similares.
Portilho, revisei o texto do post e encontrei realmente algumas coisas que causavam dúbio e diziam mesmo que o RAID5 nesse caso seria melhor que outros formatos de RAID que nao utilizam paridade. Acredito que agora não causará mais polemica. Alias nao conhecia o site dos gurus ai acima. Muito legal como referência.
Polêmica é crescimento, evolução!
Também prefiro do jeito que está agora. Muito bom Otavio!
Por acaso, acabei de ganhar um novo cliente (a 30 minutos), reclamando de lentidão extrema em seu ambiete. Ele dizia que era uma coisa, mas eu verifiquei seu ambiente e a lentidão é claramente causada por lentidão de gravação de Redo Logs, algo que ele não imaginava. Perguntei, chutando, se era RAID5, e era pior: RAID50, onde se perde quase todo o espaço do RAID10, mas fica-se com o pior desempenho do RAID5.
Pedi para mudar. Veremos os próximox capítulos…
Exatamente. Polêmica nos mostra outros pontos de vista. 🙂
Obrigado pelos comentários no post.
Alias quando o cliente mudar o RAID se puder postar o resultado seria legal.
Abraços Portilho.
RAID50 até parece uma piadinha em meio tantas informações e essa eu sinceramente não imaginaria que iria ‘ver’, estou de cara.
Show de bola a discussão de vocês!!
Abraços
capin
Vou colocar o resultado aqui sim. Logo mais. Abraço !
Top Wait do cliente, antes, em RAID 50 em Storage Motherfucker:
Top 5 Timed Events Avg %Total
~~~~~~~~~~~~~~~~~~ wait Call
Event Waits Time (s) (ms) Time Wait Class
—————————— ———— ———– —— —— ———-
log file sync 1,448,849 887,626 613 84.5 Commit
Top Wait do cliente, depois, em RAID1 em discos locais (mesmo período):
Top 5 Timed Events Avg %Total
~~~~~~~~~~~~~~~~~~ wait Call
Event Waits Time (s) (ms) Time Wait Class
—————————— ———— ———– —— —— ———-
log file sync 906,737 431,809 476 74.8 Commit
Mas ainda está ruim. Deve ter um autocommit, ou commit desnecessário dentro de um loop, em algum lugar da aplicação.