Configuração recomendada de disco / partição para um SQL Server

14

Estou procurando conselhos sobre a melhor maneira de configurar meus discos / partições para o SQL Server. Aqui estão algumas das minhas principais preocupações:

Como os arquivos SQL devem ser separados (arquivos de dados, logs, temp)?

É melhor RAID para muitos HDDs e particionar o espaço ou criar vários RAIDs com menos discos para cada RAID?

Os arquivos de dados e log devem estar em um tipo de RAID diferente?

Os bancos de dados padrão (mestre, msdb, etc ...) devem estar localizados no C: ou devem estar no mesmo local que os outros arquivos de dados / log?

Sean Howat
fonte

Respostas:

14

Aqui está uma boa postagem no blog: http://sqlserveradvisor.blogspot.com/2009/03/sql-server-disk-configuration.html

White paper sobre alinhamento de disco: http://msdn.microsoft.com/en-us/library/dd758814.aspx

Em resumo, seu sistema operacional deve estar no RAID 1, seus arquivos de dados no RAID 10 (de preferência) e arquivos de log no RAID 1.

Artigo sobre desempenho do SQL: http://www.sql-server-performance.com/faq/raid_1_raid_5_p1.aspx

PDF nas 10 melhores dicas de desempenho: http://www.stlssug.org/docs/Best_Practices_for_Performance.pdf

Lembre-se também de colocar seu TEMPDB em um disco separado por motivos de desempenho. Tenho certeza de que Paul Randal entrará aqui e ficará impressionado com o porquê daqui a pouco.

A Microsoft diz o motivo do tempdb: http://msdn.microsoft.com/en-us/library/ms175527.aspx

SQLChicken
fonte
@SQLChicken: Se houver uma preferência pelo tipo de unidade -> SATA vs SAS, há uma recomendação? SAS sobre SATA? (independentemente do tipo RAID, etc).
Pure.Krome 30/06/09
1
As unidades SAS, se você tiver o dinheiro, são preferidas às SATA devido à velocidade e confiabilidade.
precisa saber é o seguinte
11

Esta é uma grande questão 'depende'.

Não consigo responder à pergunta sobre como criar as matrizes RAID individuais para você, pois não sou especialista em armazenamento, mas posso ajudá-lo com o resto.

A primeira coisa que você precisa considerar é qual é a carga de trabalho nos vários bancos de dados - OLTP (leitura / gravação) ou DSS / DW (principalmente leitura). Para cargas de trabalho de leitura / gravação, observe RAID 1 ou RAID 10 (RAID 1 + 0), pois elas fornecem redundância e ótimo desempenho de leitura / gravação. Para cargas de trabalho de leitura principalmente, você pode usar o RAID 5. O motivo pelo qual o RAID 5 não deve ser usado para cargas de trabalho de leitura / gravação é que você paga uma penalidade de desempenho nas gravações.

Os logs de transações, por sua própria natureza, são de leitura / gravação (ou principalmente de gravação, dependendo de você estar usando o log de transações para alguma coisa - por exemplo, backups ou replicação de log) e, portanto, nunca devem ser colocados no RAID 5.

Isso significa que, para alguns bancos de dados e cargas de trabalho, você pode ter arquivos de dados no RAID 5 e arquivos de log no RAID 1/10, e para outros bancos de dados, você pode ter tudo no RAID 1/10. Indo além, se você tiver um banco de dados particionado, ele poderá conter alguns dados de leitura / gravação, principalmente de leitura e gravação, possivelmente até na mesma tabela. Isso pode ser dividido em grupos de arquivos separados e, em seguida, cada grupo de arquivos é colocado em um nível RAID apropriado.

A separação dos bancos de dados reais novamente depende da carga de trabalho e dos recursos do subsistema IO subjacente - pode ser necessário um grau mais alto de separação para armazenar itens em matrizes RAID individuais do que em uma SAN, por exemplo.

O Tempdb é um caso especial por si só, como geralmente um banco de dados muito carregado e deve ser armazenado separadamente dos outros bancos de dados. Os bancos de dados do sistema não devem ser muito usados ​​e podem ser colocados em qualquer lugar, desde que haja redundância.

Aqui está um link para um whitepaper que ajudei a escrever que deve ajudá-lo: Design físico de armazenamento de banco de dados . Também certifique-se o subsistema de IO pode lidar com a carga de trabalho antecipada - veja este whitepaper: pré-implantação i o Melhores Práticas / . Por fim, verifique se você usa o tamanho de faixa RAID correto (geralmente 64 K ou superior em sistemas mais recentes), o tamanho correto da unidade de alocação NTFS (geralmente 64 K) e que em sistemas anteriores ao Windows Server 2008, você define o deslocamento da partição de disco corretamente . Para obter informações sobre isso e dicas para obter mais informações sobre eles e por que você deve configurá-los dessa maneira, consulte esta postagem no blog: Os deslocamentos da partição de disco, os tamanhos das faixas de RAID e as unidades de alocação NTFS estão definidos corretamente? .

Linha Bototm: conheça sua carga de trabalho e seus recursos de subsistema de E / S e implemente de acordo.

Espero que isso seja útil para você.

PS No que diz respeito ao tempdb, é uma grande lata de worms sobre como você deve configurá-lo e há todos os tipos de informações conflitantes. Eu escrevi um post abrangente sobre a configuração do arquivo de dados tempdb em Equívocos em torno do TF 1118 .

Paul Randal
fonte
Ótimo post Paul :)
Pure.Krome
1

A resposta curta para os servidores que eu configurei sempre foi

Efetua logon em discos físicos separados, raid 1 ou 10 (distribuição + espelhamento)

Banco de dados em discos próprios, dependendo das necessidades de desempenho geralmente RAID5

Muito cache no (s) controlador (es) RAID

De preferência, cole novamente o seu arquivo de paginação do sistema operacional e do Windows em uma matriz separada, geralmente apenas um espelho (Raid 1). Isso mantém todas as operações de gravação separadas para que o desempenho pesado não arraste tudo para baixo.

O que eu experimentei no passado é que ter gravações de banco de dados + gravações de log + gravações de arquivo de paginação atolará uma matriz Raid5 e o desempenho será prejudicado em uma cesta de mão. O problema é que seu desempenho será bom nos testes, desenvolvedores etc. Mas, quando você entrar em disparos de produção e uso, esse problema parecerá "inesperado" e as reclamações dos usuários dispararão.

hellimat
fonte
1

Existem caras MSSQL muito melhores aqui do que eu, mas em termos gerais, sugiro o seguinte;

SO e código em C: - devem ser os discos locais, devem ser um par de matrizes RAID1 - usamos 2 discos SAS 146GB 10krpm de 2,5 polegadas para isso, mas você pode usar 2 discos SATA 7.2. Os dados devem estar em uma matriz RAID 1/10, 5/50/6/60 do tamanho que você precisar, bastante rápida (10 krpm ou melhor) - mantemos o nosso em SAN SAN LUNs, geralmente em um grupo de discos 'tier 2' / 10 krpm . Os logs devem estar em um par de matriz RAID 1 MUITO RÁPIDO (15krpm) pequeno (10GB ou menos?) Separado - mantemos o nosso em FC SAN LUNs, geralmente em um grupo de discos muito pequeno 'tier1' / 15krpm ou em um 'tier0' / grupo ssd.

De qualquer maneira, você deseja que cada parte delas em eixos / matrizes separados para desempenho - é claro que tudo funcionará em um único disco, mas acho que você está procurando um equilíbrio entre desempenho e custo.

Armazenamos nosso master / tempdb em nossos bancos de dados regulares, mas você pode dividi-lo em um LUN de matriz de dados separado.

Espero que isto ajude.

Chopper3
fonte
Ponto interessante sobre as unidades de log serem pequenas. Isso ajuda na velocidade de gravação? É uma boa idéia tentar fazer com que suas unidades de arquivos de log sejam tão pequenas quanto seus dados possam suportar?
21330 Sean Howat
Estou longe de ser um especialista, mas parece que encontramos eles ficam pequena - sua milhagem pode variar :)
Chopper3