Devo executar meu banco de dados a partir de uma configuração RAID 5?

13

Ouvi dizer que o desempenho de gravação do RAID 5 pode ser assustador às vezes. Embora eu queira a redundância que ela fornece, não quero sacrificar os tempos de inserção / atualização do banco de dados.

É com isso que eu deveria me preocupar? Em caso afirmativo, qual seria a recomendação para obter redundância com bom desempenho de gravação?

Scott Saad
fonte
1
Qual banco de dados? O Oracle + RAID 5 costumava ser um não-não. Não tenho certeza se esse ainda é o caso.
Cagcowboy
Neste exemplo em particular, o banco de dados é executado no MySql e MSSQL.
30511 Scott Saad
Um pouco mais de especificidade na pergunta com relação ao aplicativo (mix de leitura / gravação de banco de dados, tempo de atividade e requisitos de tempo de recuperação) pode obter uma resposta mais aplicável; essas coisas podem fazer a diferença na melhor solução.
2119 Jay Stevens

Respostas:

23

O RAID 10 é geralmente recomendado, pois a E / S é muito aleatória. Aqui está um exemplo. Os cálculos são um pouco simplificados, mas bem representativos.

Digamos que você tenha uma matriz de 6 unidades e suas unidades possam fazer 100 I / Os por segundo (IOPS). Se você tiver 100% de leituras, todas as seis unidades serão usadas e você terá cerca de 600 IOPS para RAID 10 e RAID 5.

O pior cenário é 100% de gravações. Nesse cenário, o desempenho do RAID 10 será reduzido pela metade (uma vez que cada gravação vai para duas unidades), portanto, ele terá 300 IOPS. O RAID-5 converterá cada gravação em duas leituras seguidas de duas gravações, para obter 1/4 do desempenho ou cerca de 150 IOPS. Isso é um grande sucesso.

Seu padrão real de leitura / gravação estará entre esses dois extremos, mas é por isso que o RAID 10 geralmente é recomendado para bancos de dados.

No entanto, se você não tiver um servidor de banco de dados ocupado, poderá executar o RAID-6. Costumo fazer isso se souber que o banco de dados não será um gargalo, pois oferece muito mais segurança que o RAID 10 ou RAID 5.

TorgoGuy
fonte
22

Bancos de dados transacionais

O RAID-5 é relativamente lento para gravar, pois o controlador precisa carregar dados suficientes para recalcular a paridade em uma gravação. As operações de gravação incorrerão em pelo menos quatro operações de disco:

  • Leitura no bloco de paridade

  • Leitura no bloco antigo (supondo que ainda não esteja no cache) para XOR o valor com o bloco de paridade.

  • Escrevendo o novo bloco de paridade (bloco de paridade antigo XOR bloco de dados antigo XOR novo bloco de dados)

  • Escrevendo o novo bloco de dados.

Se o sistema não usar o cache de write-back, isso significa que todas essas operações estão no caminho crítico para a conclusão de E / S. Geralmente, esse é o caso das gravações de banco de dados - de fato, a Microsoft (por exemplo) possui um programa de certificação para equipamentos SAN para uso com o servidor SQL que exige que os fornecedores garantam esse comportamento. Às vezes, equipamentos RAID-5 mais antigos não usavam essa otimização e precisavam recalcular a paridade de toda a faixa.

O RAID-10 possui um espelho para cada unidade e não precisa ler dados adicionais para calcular a paridade. Isso significa que as gravações precisam de muito menos E / S física.

O RAID-50 fica em algum lugar no meio, com o volume dividido em vários volumes RAID-5, que por sua vez são distribuídos. Em um RAID-50 feito de grupos distribuídos em um esquema 3 + 1, uma gravação gera no máximo três solicitações de E / S de disco adicionais. Se você se sentir tão inclinado, poderá visualizar o RAID-5 e o RAID-10 como casos especiais do RAID-50. O RAID-50 é usado principalmente para fornecer grandes volumes em muitos discos físicos

Outros esquemas de paridade, como o RAID-6 (um esquema de paridade com dois discos redundantes por conjunto), também existem. Os discos modernos são grandes o suficiente para que a reimplantação de uma matriz possa demorar bastante tempo - tempo suficiente para o risco de uma segunda falha de disco durante o processo. reconstruir é bastante significativo. O RAID-6 reduz esse risco ao ter um segundo disco de paridade, exigindo três falhas de disco para causar perda de dados. Um truque semelhante aos esquemas RAID-50 pode ser usado para criar matrizes RAID-60.

Finalmente, um único par espelhado (conhecido como RAID-1) pode fornecer redundância e desempenho suficientemente bom para algumas tarefas. Em particular, você provavelmente descobrirá que o RAID-1 fornece uma taxa de transferência suficiente para bastante tráfego de log do banco de dados. Mais sobre isso abaixo.

Se você tiver uma carga de trabalho com muita gravação, provavelmente obterá um ganho de desempenho com um volume RAID-10. Isso pode ser uma vitória, pois você provavelmente pode obter a taxa de transferência necessária a partir de um número menor de discos físicos, desde que os discos tenham espaço suficiente). Alguns itens, como logs ou áreas temporárias em um servidor de banco de dados, devem estar nos volumes RAID-1 ou RAID-10, pois eles recebem muito tráfego de gravação.

Histórico

Os volumes de log são caracterizados por um padrão de acesso a dados principalmente seqüencial e são essencialmente um buffer de anel que consiste em comandos ao longo das linhas de 'gravar esses dados neste bloco'. Eles são gravados como produtor pelo mecanismo DBMS principal e processados ​​como um contador. pela função de leitor de log. Um único par espelhado realmente processa bastante tráfego de log.

Sistemas de leitura pesada e servidores de arquivos

Em um sistema com muita leitura, como um data warehouse, você pode querer usar um ou mais volumes RAID-5. Em um servidor de arquivos, os acessos ao disco serão em grande parte feitos com base em um arquivo inteiro; portanto, as gravações provavelmente gravarão a maioria dos blocos que compõem o bloco de paridade. Nesse caso, a penalização de desempenho para o RAID-5 será mais leve.

No passado, a economia de custos em disco pode ter sido significativa, mas é menos provável que isso seja um problema agora.

Cache de write-back e RAID-5

Em uma SAN ou em um controlador RAID interno com um cache com bateria, você poderá habilitar o cache 'Write-back'. Isso armazena em cache as gravações e retorna o controle para o aplicativo. A E / S é relatada pelo controlador como concluída. No entanto, ele não necessariamente grava os dados no disco imediatamente. Esse recurso permite que as operações de leitura / gravação por paridade RAID-5 sejam substancialmente otimizadas e pode diminuir a penalidade no desempenho de gravação para volumes RAID-5x.

No entanto, isso ainda apresenta um pequeno risco de problemas de integridade dos dados. Foi informado ao sistema host que essa gravação foi concluída quando esse não é realmente o caso. É possível que uma falha de hardware crie inconsistências de dados entre (digamos) logs e volumes de dados em um servidor de banco de dados. Por esse motivo, o cache de write-back não é recomendado para sistemas transacionais, embora possa ser uma conquista de desempenho para algo como um processo ETL.

Sumário

Atualmente, o espaço em disco é tão barato que os sistemas transacionais provavelmente devem usar RAID-1 ou RAID-10 para volumes de log e RAID-10 para volumes de dados. É provável que o tamanho do disco físico seja muito maior que o banco de dados e o RAID-10 permitirá maior taxa de transferência de gravação para o mesmo número de discos, reduzindo potencialmente o número de volumes de disco necessários para dar suporte ao sistema.

Em algo como um data warehouse, você ainda pode ocupar espaço com tabelas de fatos grandes e altamente indexadas para obter um pequeno ganho de preço com os volumes de dados RAID-5 ou RAID-50. No entanto, os logs e o tempdb ainda devem ser colocados em um volume RAID-10, pois provavelmente terão muito trabalho durante o processamento de ETL. No entanto, é provável que a economia de custos no disco seja bastante pequena.

ConcernedOfTunbridgeWells
fonte
Cache de write-back: se você estiver comprando um controlador RAID com um cache de write-back "com bateria", observe que a bateria parece não estar incluída. Certifique-se de que seu fornecedor inclua um.
David Hicks
Alguns sim, outros não. Eu tenho alguns Adaptec 2200s que não vêm com baterias. Alguns vêm com eles como padrão.
ConcernedOfTunbridgeWells
1
Você tem um erro na sua resposta. Você não precisa ler cada unidade de paridade recalcular. Uma gravação se torna 2 leituras e 2 gravações. As outras 12 unidades no seu exemplo de matriz de 14 unidades não serão tocadas pelo RAID5.
TorgoGuy
Na verdade, acredito que o homem está certo. Você pode ler e XOR a paridade com o valor antigo do bloco e novamente com o novo valor do bloco. Nunca vi isso descrito antes, mas funcionaria.
ConcernedOfTunbridgeWells
3

Bem, isso depende muito da sua tolerância a falhas / riscos. O RAID5 tem muitos problemas . Meu servidor de banco de dados atualmente tem duas unidades espelhadas e, se eu fosse escalar isso, eu procuraria algo com mais paridade, provavelmente RAID6 ou RAID10.

Além disso, se o seu aplicativo for crítico para o tempo de atividade, eu provavelmente recomendaria ter dois servidores de banco de dados com replicação, master master ou hot spare ou qualquer outra coisa. O RAID ajuda apenas contra falhas de disco, mas há muito mais que pode dar errado em um servidor :)

mikl
fonte
3

Depende de quanto você está escrevendo.

Se for um "aplicativo da web" bastante leve, é improvável que você veja qualquer desempenho atingido no RAID5.

Se você estiver construindo um data warehouse de vários GB com ETLs grandes, o buffer de gravação no RAID 5 transbordará rapidamente e você entrará no "baixo desempenho de gravação" do RAID 5.

Cada gravação RAID5 causará pelo menos 3 gravações (mais um cálculo CRC). Quando armazenado em buffer, isso é bom e rápido (pequenas breves explosões de atividade - atualizações e inserções de registros únicos). Se isso for gravações sustentadas (inserção / atualizações em massa grandes), será notado.

É um equilíbrio entre desempenho e espaço. O RAID 10 (espelho de unidades listradas) oferece desempenho e resiliência, mas redução de 50% na capacidade.

O RAID5 oferece maior capacidade, bom desempenho de leitura, mas baixo (grande) desempenho de gravação.

Cara
fonte
2

RAID 1, essa é minha resposta final

Razões:

par espelhado fornece redundância adequada para discos com falha e o RAID continua a funcionar no último disco.

par espelhado produz um desempenho de E / S maior para leituras se você colocar seus dados e índices cuidadosamente ... [dica: use volumes separados para dados e seu (s) índice (s)]. Você pode obter ainda mais desempenho duplexando seus controladores.

ninegrídeo
fonte
Por que não RAID 1 + 0?
Brian Knoblauch
2

Para alguns bons guias "por que não", isso sempre foi muito popular entre os DBAs da Oracle com os quais trabalhei ...

A batalha contra qualquer Raid Five - http://www.miracleas.com/BAARF/

Mark Regensberg
fonte
2

Resposta curta: não.

Resposta longa: a menos que você tenha um banco de dados muito pequeno ou requisitos muito mínimos, não. Recuperação de dados é fortemente dependente de disco I / O operações por segundo, e a sobrecarga de striping vai comer o seu acesso ao disco ao longo do tempo, especialmente com corridas consulta longa. A maioria dos bancos de dados é executada em uma configuração no estilo RAID 10 ou com volumes específicos que mantêm partições dos dados. Sim, RAID 10 vai custar-lhe em gravações, mas o seu desempenho de leitura (com a configuração direita) vai subir .

Avery Payne
fonte
1

qual seria a recomendação para obter redundância com bom desempenho de gravação?

Um cache de write-back grande. Aumente a RAM do seu controlador RAID de hardware ou a RAM disponível para a sua solução RAID de software (por exemplo, para o MDADM do Linux, aumente a RAM do sistema, balões MDADM para usar a RAM do sistema não utilizada como cache de gravação). Este conselho é válido para determinados valores de "grande" - se você costuma gravar (5% do tempo?) Dados a uma velocidade rápida o suficiente para preencher o cache de gravação, não importa quão grande seja, isso fará pouca diferença.

David Hicks
fonte
1

Realmente é sobre separar seus arquivos de dados, arquivos de log e arquivos do sistema operacional. Os registros gravam sequencialmente Os dados incorrem em muitas leituras aleatórias e algumas gravações aleatórias

Ao criar configurações RAID que suportam essas características, você aprimora muito o desempenho

Raid 1 - o espelhamento é ótimo para os arquivos de logs O Raid 10 é bom para seus arquivos de dados. Também vale a pena analisar a separação do TempbDB e dos backups em unidades separadas. Adicionar grupos de arquivos é outra maneira de aumentar o desempenho. Quando se trata de SANs, isso não é tão claro. Depende se você está criando configurações de raides específicas para cada LUN ou confiando no número de eixos-árvore.

CPU_BUSY
fonte
0

No espírito do recente artigo de blog StackOverflow dizendo que não devemos voltar a apresentar respostas já disponíveis na Internet, eu apontá-lo no presente

O RAID-5 não é único na redundância que fornece, apenas o consome menos discos adicionais do que algumas alternativas. Você pode escolher outra coisa com redundância igual ou melhor e melhor desempenho de gravação

O Arquetípico Paulo
fonte
0

Executar um banco de dados fora do RAID5 geralmente é um erro. Eu só vi isso em dois casos - bancos de dados bem projetados, com leitura intensiva e poucas gravações, e bancos de dados em que "desperdiçar espaço" devido ao RAID5 não era politicamente viável.

O RAID5 destruirá o desempenho transacional.

Além disso, se você estiver pensando em RAID5, veja se consegue fazer o RAID6 funcionar. A confiabilidade teórica é muito melhor, embora a confiabilidade do mundo real geralmente seja pior devido a implementações imaturas.

Carlito
fonte