Configuração de Disco do SQL Server 2005: RAID 1 + 0 ou RAID 1 + 0s múltiplos?

2

Assumindo que a carga de trabalho para o SQL Server é apenas um banco de dados OLTP normal e que há um total de 20 discos disponíveis, qual configuração faria mais sentido?

Um único RAID 1 + 0, contendo todos os 20 discos. Esse volume físico conteria os arquivos de dados e os arquivos de log de transações, mas duas unidades lógicas seriam criadas a partir desse RAID: uma para os arquivos de dados e outra para os arquivos de log.

Ou ...

Dois RAID 1 + 0s, cada um contendo 10 discos. Um volume físico conteria os arquivos de dados e o outro conteria os arquivos de registro.

O motivo desta pergunta é devido a um desacordo entre eu (SQL Developer) e um colega de trabalho (DBA).

Para cada configuração que eu fiz ou vi outras pessoas fazer, os arquivos de dados e os arquivos de log de transações foram separados no nível físico e colocados em RAIDs separados.

No entanto, meu argumento de colegas de trabalho é que colocando todos os discos em um único RAID 1 + 0, qualquer IO feito pelo servidor é potencialmente compartilhado entre todos os 20 discos, em vez de apenas 10 discos no meu sugerido configuração.

Conceitualmente, seu argumento faz sentido para mim. Além disso, encontrei algumas informações da Microsoft que parecem apoiar sua posição.

link

Na seção intitulada "3. Configuração do RAID10", mostrando uma configuração na qual todos os 20 discos são alocados para um único RAID 1 + 0, ele afirma:

In this scenario, the I/O parallelism can be used to its fullest by all partitions. Therefore, distribution of I/O workload is among 20 physical spindles instead of four at the partition level.

Mas ... todas as outras configurações que vi sugerem separar fisicamente os dados e os arquivos de log em RAIDs separados. Tudo o que encontrei aqui no Server Fault sugere o mesmo.

Eu entendo que os arquivos de log ficarão pesados, e que os arquivos de dados serão uma combinação de leituras e gravações, mas isso requer que os arquivos sejam colocados em RAIDs separados em vez de um único RAID?

    
por Michael Fredrickson 28.02.2011 / 20:58

5 respostas

3

O argumento do DBA faz sentido, mas aqui está o problema: Se eu estiver lendo o artigo corretamente, o MS está falando sobre o desempenho na partição do banco de dados e no nível da tabela, não no nível de partição do sistema de disco / arquivo. Eu acredito que o DBA venceria o debate SE você estivesse falando sobre que tipo de array criar para os arquivos de dados SOMENTE. Desde que você está falando sobre o tipo de matriz para criar os dados e arquivos de log eu acredito que seu argumento faz mais sentido, a partir de uma perspectiva de desempenho do sistema de disco / arquivo. Arquivos de banco de dados são sempre acessados aleatoriamente, os arquivos de log são sempre acessados seqüencialmente. Você nunca deve misturar esses dois tipos de E / S na mesma unidade física ou lógica. Além disso, a criação de várias partições lógicas no mesmo disco físico (ou matriz de disco) não compra nada, pois os bancos de dados e logs estarão disputando o mesmo recurso físico.

A minha reflexão é esta:

Crie um array físico (RAID10) para os arquivos do banco de dados e crie um array físico separado (RAID10) para os arquivos de registro.

    
por 28.02.2011 / 21:19
2

Vai depender da carga de trabalho que você está colocando no sistema. Se você tem uma carga de trabalho alta, deseja separá-los porque os arquivos de dados serão uma carga de trabalho muito aleatória, enquanto o log de transações é uma carga de trabalho muito sequencial. Normalmente, você obterá um melhor desempenho ao separá-los, pois não fará com que o IO do log fique lento ou seja afetado pela carga dos arquivos de dados.

    
por 28.02.2011 / 21:10
1

Odeio ser sarcástico, mas os DBAs são ... DBAs.

Eles são infinitamente mais inteligentes do que o administrador do servidor quando se trata de construir uma consulta complexa que não faz uma varredura de tabela bazillion, mas o administrador de hardware / servidor é infinitamente mais inteligente da mesma forma ao alocar recursos apropriados (supondo que ele tenha um cabelo grisalho ou quatro). :)

Minha resposta curta: É tudo sobre os fusos, e é tudo sobre fusos e, a partir dos últimos anos, a escolha do sistema de arquivos e a quantidade de memória RAM que esse sistema de arquivos pode absorver.

Eu tive um sucesso incrível segregando dbdata / logs / transacional entre (a) diferentes controladores físicos, (b) usando parâmetros de sistema de arquivos (especificamente, e este é um grande problema, combinando com os parâmetros do seu db escreve / lê / comete para o mesmo setor de tamanho / bloco que o fs foi construído sob) e (c) "Escolhendo meu veneno".

Dados não críticos, registros, reversão de dados e tais podem mais ou menos entrar em sistemas de arquivos "vulneráveis" (memfs, fast-io-fs sem registro no diário / preflight / precommit cache) enquanto arquivos de dados reais (dependendo do tipo de db) são bem espalhados em coisas tão baratas quanto um zpool bem construído.

O pôster anterior está absolutamente certo em que os logs trans são sequenciais, e podem / devem ir em volumes feitos para gravação rápida, não leitura (e sem dúvida não necessariamente "estabilidade"), como uma grande faixa. O respondente ("aqui está o atrito") também está na direita: Contenção de disco é desagradável se os dados não estiverem em memória RAM ou em cache de disco, e sem grave (pronunciado "longo, monótono, tedioso e propenso a adivinhar erro" ), você deve absolutamente evitar misturar discos com bancos de dados que funcionam de maneira diferente. (por exemplo, High trans read e low trans bigdata write - totalmente qualquer estratégia de cache do fubar).

Meu conselho "ISO Camada 8" é o seguinte: Aproxime-se do DBA e diga, hey, não vou dizer que você está errado e, em troca, você não vai me dizer como arquitetar meus sistemas: ) Eles frequentemente seguem recomendações padronizadas que, no longo prazo, raramente são ótimas. Não porque eles não saibam o que estão fazendo - mas porque estão depositando confiança em um documento intermediário empurrado pelo vendedor como "projetado para incomodar o menor número de clientes", resultando em menos ajuda chamadas ".

Se você quiser me enviar uma mensagem direta, fique à vontade; Mas tenha em mente - não há configuração ideal global. O número de linhas, as varreduras previstas, a cardinalidade e a eficiência de suas chaves / índices, consultas / s, tabelas completas por intervalo etc. É um jogo difícil de jogar.

Me lembra de WARGAMES ..

Would you like to play a game?

Sim. Vamos jogar a guerra termonuclear global.

..

How about a nice game of Database Architecture?

[Estratégia global de guerra termonuclear teria sido mais fácil ..]

:)

    
por 28.02.2011 / 23:44
0

A resposta grosseiramente simplificada é que dependerá da sua proporção de leitura / gravação. Dado o OLTP, você provavelmente tem uma boa combinação, e manter os logs de trans separados dos bancos de dados permitirá que a transação para o array de banco de dados "perseguir" a matriz de log em vez de um array saltando entre os dois.

    
por 28.02.2011 / 21:12
0

O log de transações normalmente é gravado apenas e é gravado sequencialmente. Se você mantiver os logs em um conjunto próprio de discos, esses discos dificilmente terão qualquer tipo de busca (exceto quando atualizar os metadados do sistema de arquivos), apenas avançando um setor de cada vez.

Se você tiver os logs e os dados misturados no mesmo conjunto RAID (mesmo que eles estejam em unidades lógicas diferentes), você perderá o aumento de desempenho da gravação seqüencial dos logs de transação.

Eu acho que se você estiver escrevendo pequenas quantidades de dados em cada transação, você ganhará desempenho mantendo os logs em uma matriz própria. Se você tem tantos dados que o tempo de gravação dos dados nos discos é substancial comparado ao tempo de busca, pode ser melhor ter um array grande.

    
por 28.02.2011 / 21:19