Com o dimensionamento de RAM, é importante saber qual é o seu "conjunto de trabalho" provável e certificar-se de que você tenha RAM suficiente para isso multiplicado algumas vezes, no mínimo. Seu conjunto de trabalho normal é todas as páginas de índice e dados que são comumente usadas e poder armazenar tudo na RAM com espaço suficiente para consultas "mais excepcionais, mas ainda não incomuns" reduzirá a E / S de disco necessária para operações de leitura consideravelmente .
Por exemplo, um banco de dados de 10 Gb (menor que o seu por uma quantidade considerável, mas a teoria contém o tamanho de seus dados) para um dos aplicativos do cliente contém cerca de 1Gb de páginas de dados ativos: índices e linhas de tabela ser acessado rotineiramente conforme os usuários realizam seus negócios normais. Outros ~ 4Gb são dados mais antigos que não são lidos na maioria das sessões normais (como a maioria das exibições padrão exibe apenas no máximo um mês ou três dados, e os dados, índices e consultas são bem planejados o suficiente para que as páginas de dados mais antigas não sejam vai ser lido a menos que o usuário pede para ver algo mais para trás no tempo (o que é relativamente raro no dia-a-dia) .O final ~ 5Gb é blobs - documentos que os usuários anexaram aos registros e que raramente são acessados mais do que um pouco depois de ser adicionado, exceto durante uma auditoria.Mesmo com esse tamanho de dados, duvido de 2Gb RAM seria suficiente para manter o acesso rápido (o DB que eu estou falando vive em um servidor de 4Gb dedicado a executar MSSQL, outra máquina atua como servidor web e outros serviços relacionados ao aplicativo), então talvez seja necessário repensar o tamanho da RAM para o tamanho dos dados - a RAM é relativamente barata atualmente, portanto, supondo que seu servidor consiga extrair até 8, 12 ou até mesmo 16Gb podem dar um bom retorno sobre o desempenho do investimento.
Quando a E / S do disco não puder ser evitada, eu me afastaria do RAID5 e do RAID6 se os dados veem muita atividade de gravação. O RAID10 padrão (ou arranjos RAID10 um pouco menos padronizados, como aqueles oferecidos pelo driver Linux RAID10 e algumas soluções de hardware) funcionarão também para a maioria das cargas de leitura, notavelmente melhores para a maioria das cargas de gravação e oferecem redundância semelhante (qualquer unidade pode falhar). Se você não quiser pular para quatro unidades, poderá tentar o RAID10 de três unidades (chamado RAID1E pela maioria dos controladores IBM) se suportado pelo seu ambiente. Também vale muito a pena considerar dividir seu array em dois, como a TomTom sugere. Para operações de gravação, você provavelmente descobrirá que ter o log de transações no array RAID1 de duas unidades e os arquivos de dados em outra funcionará significativamente melhor do que usando RAID10 - o desempenho RAID10 de RAID10 pode ser rapidamente eliminado pelo RAID10. natureza de acesso aleatório de gravações de bancos de dados (atualização de dados e páginas de índice que podem estar espalhadas pelo espaço no arquivo, atualizando o log de transações antes de confirmar os dados e marcando-os como confirmados no log quando feito e assim por diante). Separar o log e a atividade do arquivo de dados em diferentes eixos pode significativamente aumentar o desempenho do banco de dados em muitos casos. Se você tiver espaço suficiente para as unidades requeridas, manter o tempdb (ou qualquer que seja o equivalente do RDBMS ao tempdb do MS) e em um terceiro array pode fazer uma diferença significativa também se suas consultas e procedimentos armazenados usarem tabelas temporárias em algum momento pode ser surpreendente em quantas circunstâncias o planejador de consulta considerará usando tempdb nas suas costas!). É claro que o uso de SSDs também pode ser uma resposta para o desempenho de acesso aleatório - se você obter uma melhor relação preço / desempenho com esses ou outros arranjos de matriz (ou os outros e outros arranjos de matriz) depende significativamente seu DB (s) e padrões de acesso típicos.
Uma outra coisa: antes de investir tempo + esforço + dinheiro em reorganizar seu subsistema de E / S, certifique-se de executar algumas métricas de desempenho em horários de pico para garantir que não haja procedimentos incorretos que estejam sobrecarregados com CPU. Às vezes, procedimentos complexos (particularmente aqueles que usam cursores de maneiras menos ideais) podem atrelar o subsistema de memória da CPU por longos períodos (adicionar mais RAM e melhor capacidade de E / S farão pouca diferença aqui) e podem ser otimizados significativamente repensando a cursores / loops ou conseguindo removê-los completamente. Uma mistura de log de rastreamento SQL personalizado e log do Windows Performance Monitor (ou ferramentas de monitoramento equivalentes para pessoas usando uma combinação OS + DB diferente) pode ser uma grande ajuda para descobrir onde estão os principais afunilamentos (falta de memória, desempenho de E / S do que o código ideal, ...) e você deve tentar corrigir um problema até ter certeza de que está corrigindo o problema certo.