SQL Server 2K / 2K5 / 2K8 e discos de estado sólido: otimizações específicas?

9

Alguém aqui está executando o SQL Server em unidades de estado sólido? Você encontrou alguma dica específica de otimização? Estou especificamente interessado em maneiras de reduzir a frequência com que o SQL Server executa pequenas operações de gravação aleatória, uma vez que são o inimigo do desempenho do SSD, principalmente as unidades SSD MLC.

Existem algumas otimizações óbvias que podemos fazer, é claro: dados pesados ​​de leitura devem ser fornecidos a partir do SSD e coisas pesadas de gravação devem ser deixadas para os discos giratórios tradicionais. Isso inclui logs de transações, naturalmente!

Dado um orçamento suficiente, é claro, alguém desejaria usar discos SSD SLC como as séries X25-E ou Vertex Ex ou várias ofertas em nível empresarial. Mas também estou interessado em dicas que possam beneficiar as configurações de SSD da MLC. Eu acho que é uma área interessante. Um dos clientes de meus clientes tem um orçamento pequeno e um conjunto de dados que cresce imensamente e eles estão enfrentando uma reescrita completa de quase uma centena de consultas para manter um nível de desempenho decente. No entanto, tenho uma suspeita furtiva de que menos de US $ 500 em espaço em RAM e SSD podem proporcionar um ganho de desempenho maior que milhares (possivelmente dezenas de milhares) de dólares em tempo de desenvolvedor.

John Rose
fonte

Respostas:

3

Não sei o que você quer dizer com reduzir a quantidade de gravações aleatórias pequenas que o SQL Server faz. O SQL Server grava páginas de dados somente durante os pontos de verificação - portanto, a única maneira de limitar o número de gravações é alterar o intervalo do ponto de verificação ou não fazer tantas operações de DIU. Você quis dizer outra coisa?

Em todas as implementações de SSDs que eu vi (algumas), é exatamente o oposto do que você está sugerindo - o melhor uso de SSDs parece ser para logs de transações com gravação pesada e tempdb - basicamente, onde está o maior I / O gargalo do subsistema e cole os SSDs nele - pois o tempo e a latência de busca são reduzidos a uma constante baixa.

Confira este documento de pesquisa que a MS produziu (infelizmente não muito detalhado sobre os detalhes do SQL Server): Migrando o armazenamento do servidor para SSDs: análise de tradeoffs .

Espero que isto ajude!

Paul Randal
fonte
Obrigado por esse link para o artigo da MS. É frustrantemente curto em detalhes, não é? :) Infelizmente, pequenas gravações aleatórias são realmente algo que pode dar um encaixe nos SSDs. Em poucas palavras, mesmo para uma gravação pequena (ou seja, 4KB), o SSD deve ler um bloco inteiro na memória, modificá-lo e gravá-lo novamente. É assim que a memória flash da geração atual funciona. Grande SSD overview artigo: anandtech.com/storage/showdoc.aspx?i=3531&p=1
John Rose
2

Você não pode modificar as características de E / S dos Servidores SQL. Sua unidade básica de acesso ao disco, para arquivos de dados, é uma página de 8 KB. Ele os escreverá principalmente durante um ponto de verificação, mas também os escreverá preguiçosamente quando puder.
O SQL não espera que as gravações no disco de dados sejam concluídas antes de retornar, são apenas as gravações de log que devem ser concluídas. Se você puder manter apenas um log de banco de dados em um disco, ele será gravado em seqüência e ficará bem em discos rígidos rápidos e normais.
O impacto no desempenho do ponto de vista do SQL é quando ele precisa ler os discos. Se você puder fornecer mais memória, o SQL manterá mais páginas de dados na memória, o que é mais rápido do que qualquer tipo de disco, SSD ou outro. Obviamente, você também pode reduzir o número de leituras de disco criando índices apropriados. Espero que um SSD também ajude com essas leituras, porque é provável que sejam aleatórias e permaneçam aguardando a movimentação dos cabeçotes.
Não sei de que tamanho de banco de dados estamos falando aqui, mas você pode dar uma olhada no HyperOS. Eles criam discos sata que são na verdade apenas uma carga de RAM DDR2, com um disco SSD ou de 2,5 polegadas como backup. O padrão de acesso do servidor não terá importância. Eu não colocaria os logs em nada parecido com isso. Os logs são o que mantêm seus dados consistentes, eles precisam ser executados em um meio confiável e, apesar do SSD e da bateria de backup, e o servidor provavelmente possui um no-break etc., eu ainda me sentiria pouco à vontade por não ter meus logs em um disco rígido real em algum tipo de matriz RAID tolerante a falhas.

pipTheGeek
fonte
1

Pequenas operações aleatórias são o inimigo dos discos tradicionais, devido à latência de busca principal ... Os SSDs são ótimos para resolver exatamente isso.

Com operações longas e seqüenciais, os discos padrão têm um desempenho muito bom, portanto não haveria sentido em usar SSDs (do ponto de vista do desempenho, é claro).

Massimo
fonte
2
Os SSDs são fantásticos em operações de leitura aleatória devido à latência de busca quase zero. Eles são menos hábeis em operações de gravação aleatória devido ao fato de que uma operação de gravação SSD envolve a leitura de um bloco flash inteiro (normalmente, 128 KB), a modificação do conteúdo e a gravação do bloco inteiro novamente em flash. Quanto às operações seqüenciais longas, os melhores SSDs no nível do consumidor (Intel, OCZ Vertex, Samsung) alcançam bem mais de 200 MB / s de leituras e 80 MB-150 MB de gravações, bem acima do que um único disco giratório pode produzir.
314 John Rose
Você tem certeza? Não entendo por que uma operação de gravação deve envolver a leitura de um bloco de dados antes de escrevê-lo novamente ... os dados a serem gravados devem estar na memória do computador, não deveriam?
Massimo
2
@ Massimo: porque o sistema operacional grava apenas alguns bytes, mas o SSD funciona em unidades (páginas) de 128 KB (geralmente). Só pode escrever uma página de 128 KB, nada menos, nada mais. Portanto, quando você modifica, digamos, no meio de uma página, a unidade lê a página inteira, atualiza o meio e depois grava a nova página normalmente em outro lugar, enquanto invalida o local antigo.
Cristian Ciupitu
Cristian Ciupitu está correto. Em alguns SSDs, isso é atenuado por um cache integrado (todas as unidades que usam o controlador Indilinx possuem 64 MB de cache, acredito) e talvez também pelo cache de gravação do sistema operacional, se ativado. Mesmo um cache de 64 MB tem suas limitações - para um servidor de banco de dados fazendo muitas gravações, 64 MB pode não ser suficiente. Os fabricantes de firmware não divulgam muitos detalhes, mas seria de se supor que os melhores firmwares (Intel, Indilinx) realizem reordenamentos / lotes inteligentes para manter pequenas gravações aleatórias em uma página de 128 KB para minimizar essa sobrecarga.
314 John Rose
Pelo meu entendimento do cache, você economizará muitas dessas pequenas gravações com as quais você está tão preocupado. Isso nem importa tanto, pois os bancos de dados são projetados para executar muitas leituras / gravações lineares. Aposto que o SSD ainda funcionaria melhor, pois é uma leitura linear, não uma seq. Isso significa que ainda haverá lacunas entre os dados e o SSD removeria o tempo de busca.
Pyrolistical
0

Não basta apontar aqui ainda para adicionar ao thread de comentários, mas se você definir o tamanho da página do banco de dados / contagem de várias leituras para qualquer coisa nos SSDs para um múltiplo do tamanho da página do SSD, isso não deve ser um problema.

Não trabalho há muito tempo no SQL Server, por isso não tenho certeza se essas opções estão disponíveis lá. Trabalho com Oracle e DB2 nos últimos anos e isso resolveria suas preocupações, pois o banco de dados seria ajustado adequadamente às características do disco.

Kevin K
fonte
0

Eu recomendaria alinhar a partição onde os arquivos do banco de dados são armazenados.

Eu também recomendaria decidir o que acontece no RAID 0 para perf (ldf e TempDB) e colocar dados críticos no RAID 1 (mdf).

Em terceiro lugar, você realmente deve atualizar o firmware da unidade, bem como o firmware / drivers do controlador SATA. Ao fazer isso, você oferece à empresa de hardware e aos desenvolvedores a chance de otimizar o desempenho para você.

GregC
fonte
O RAID 0 nunca deve ser usado para um servidor de banco de dados. Se uma única unidade falhar, o banco de dados ficará inativo até que o disco seja substituído e os dados ausentes restaurados da fita (isso inclui o log).
21410 mrdenny
Em um mundo onde o dinheiro não é objeto, tudo deve ser executado no cache L1 com bateria. No setor bancário, o arquivo LDF é tão importante quanto o mdf. Para a computação científica, o MDF é o único arquivo que realmente precisa ser 100%.
7139 GregC