Configurando o SQL para desempenho ideal ... SSD ou HDD?


8

Alguém conhece alguma comparação que mostre como os SSDs se comparam aos HDDs para desempenho em um ambiente SQL?

Estou tentando entender que tipo de benefício de desempenho pode ser obtido mudando para SSD.


11
Tenho certeza de que uma cópia do padrão SQL terá um desempenho igualmente bom em SSDs e em discos rígidos de prato giratório. Ou talvez você esteja interessado em uma tentativa de implementação específica do padrão SQL?
womble

Respostas:


14

Se você estiver fazendo uma grande quantidade de pequenas leituras, os SSDs serão muito mais rápidos. Aqui está uma das poucas comparações sobre o desempenho do banco de dados. Veja a resposta curta no gráfico inferior.

Para desempenho bruto, os SSDs oferecem muitas vantagens, a principal delas é que o tempo de busca é efetivamente 0, o que significa que todos os pequenos acessos em HD de um banco de dados são tratados muito mais rapidamente.

No entanto, existem algumas preocupações com a geração atual sobre a vida útil da gravação, pois após tantas gravações, um bloco não é mais utilizável. Eles podem escrever um pouco, acredito que as informações da Intel rondam um petabyte de bytes para seus drives de 32GB antes de começarem a atingir níveis perigosos de mercadorias ... isso só vai melhorar com o tempo.

Para entender melhor por que eles têm um desempenho muito melhor, leia este artigo da Anandtech sobre SSDs . Ele detalha as unidades, o que é bom, o que não é e os detalhes de como eles funcionam. Na parte superior, também há um link para artigos de acompanhamento que abrangem as últimas séries de unidades.


2
Atualmente, em termos de desgaste devido a ciclos de gravação limitados, bons SSDs estão chegando perto da segurança de discos giratórios devido a uma combinação de maior capacidade de ciclo de gravação de células individuais, "truques" de fusão para reduzir os ciclos de bloco de gravação necessários e nivelamento de desgaste algoritmos. Mesmo para aplicativos com alta carga de E / S, como um banco de dados muito ativo, um bom SSD não tem muito mais probabilidade de sair antes da substituição rotineira do que um disco giratório. Apenas mantenha backups regulares e testados regularmente, como em qualquer solução de armazenamento.
David Spillett

Eu concordo, é por isso que chamo de preocupação, não de parar o show ... um disco barato tem um problema real com isso agora, e é mais um problema de firmware. Dentro de seis meses, acho que o nível de desgaste ainda não será mais aprimorado, progrediu muito bem, muito rapidamente.
Nick Craver

11
Boa resposta. Apenas para acrescentar, eu pensaria que, na maioria das circunstâncias, o registro deve permanecer em um disco rígido normal, pois é gravado seqüencialmente e os discos rígidos são baratos. Basta ter o banco de dados real em um SSD, pois é aí que está o acesso aleatório.
Petet

@PeteT - varia / depende um pouco, lembre-se de que um log específico é seqüencial sim, mas em um servidor que hospeda muitos bancos de dados (como o Stack Exchange que hospeda muitos sites em um banco de dados por) o comportamento real é muito mais próximo do acesso aleatório / gravações do que seqüencial, portanto depende de quanto / quanto você está executando.
Nick Craver

Uma coisa bonita é que, quando um SSD chega ao fim da vida útil e não pode mais ser gravado, ainda é legível. Você não pode dizer isso sobre um disco giratório que quebra.
djangofan

4

Você pode instalar o sistema operacional e o software SQL em um disco rígido padrão e adicionar um SSD para armazenar apenas os arquivos do banco de dados. Isso deve limitar o número de gravações experimentadas pela unidade SSD e também maximizar a quantidade de espaço disponível para seus dados na unidade.



2

A resposta de Nick Craver é boa; Eu só quero adicionar duas advertências aos SSDs que acho que as pessoas devem estar cientes:

a) Os problemas do SSD com o desgaste da gravação não desaparecem, são fundamentais para as células flash usadas. As células SLC têm uma resistência de gravação muito maior que a MLC, portanto, o OP deve considerar obter uma unidade SLC sobre MLC. Obviamente, o SLC também é significativamente mais caro.

b) As unidades atuais armazenam em cache os dados na unidade antes de escrevê-los. Portanto, há um risco de perda de dados se a energia for cortada durante uma operação de gravação. É algo que você pode solucionar, mas o cache existe tanto para desempenho quanto para reduzir a amplificação de gravação.

IMHO nenhum dos itens acima são violadores. Eu estaria pronto para implantar SSDs na produção hoje, mas com um planejamento primeiro.

  1. Se um pequeno risco de perda de dados for inaceitável, os discos rígidos SAS convencionais com o cache de dados desativado podem ser uma escolha melhor.
  2. Eu acho que você deve medir a quantidade de dados gravados na unidade SSD em um dia normal. Com base nisso, e os fabricantes usam especificações, calcule a vida útil esperada do SSD com seu padrão de uso. Se a vida útil esperada for menor que a vida útil planejada dos servidores, defina uma data de substituição preventiva para o SSD. Assim como as peças do avião, troque-o antes que haja probabilidade de falha.

Peças de avião? Não é a melhor analogia se você a estender aos ônibus NASAs, que são executados em computadores IBM AP101S com 1 GB de RAM e sem HDD. A necessidade de previsibilidade e confiabilidade está acima de todas as outras considerações.
CJM

1

Alguma coisa a ter em mente.

Se você estiver acessando o banco de dados o suficiente para que suas leituras estejam mais lentas e precisar de SSDs, será necessário corrigir seus índices ou adicionar mais RAM ao servidor.

A maioria dos servidores de banco de dados, uma vez totalmente ajustados, não precisa de SSDs para funcionar bem.


Minhas leituras não estão diminuindo a velocidade. Estamos tentando otimizar uma consulta de "primeiro acesso", em que leva de 120 a 130 ms na primeira vez em que a consulta é executada e 80 ms depois disso. Esses horários excluem a criação dos planos de consulta e a leitura das estatísticas relevantes. Podemos ver que a diferença de tempo no nosso caso é gasta lendo do disco, tentando explorar como posso fazer com que o primeiro hit se aproxime dos 80ms.
spoon16

Então, mesmo após a primeira corrida, ainda leva 80ms? Isso é principalmente leitura de dados ou muita CPU (agregação ou classificação)? Ainda acho que há muito espaço para otimização "tradicional" antes de ir para tecnologias de armazenamento exóticas.
BradC

Se você precisar acessar o disco na primeira execução da consulta, o SQL está expulsando os dados do cache por algum motivo. Você pode primeiro verificar qual é a expectativa de vida da sua página. Se estiver baixo, mais RAM estará em ordem. Qual é a taxa de acertos do cache antes, durante e após a consulta? Se estiver abaixo de 99,8% ou mais, a indexação e mais RAM estarão em ordem. Você está fazendo alguma digitalização? Nesse caso, mais indexação pode estar em ordem.
mrdenny

Em uma carga de trabalho de gravação pesada com armazenamento em cache de gravação (ou seja, dados fisicamente confirmados no disco antes do retorno da chamada), você deve obter um desempenho notavelmente melhor de gravação de um SSD, assumindo que seu aplicativo realmente esteja vinculado à E / S. Observe que esta é a estratégia de cache preferencial para o SQL Server, especialmente em SANs, e a MS exige que as SANs garantam esse comportamento para obter a certificação para uso com o SQL Server.
ConcernedOfTunbridgeWells

1

Leia este artigo (bastante antigo - 2009):

Resumo: substitua as unidades SAS de 24 x 15k RPM por 6 (sim seis) SSDs e ainda obtenha 35% mais desempenho. Isso ocorreu com os Intel X25Ms, que não são mais os principais SSDs.

Para as pessoas do banco de dados, isso é fantástico, pois você pode ter servidores menores e mais rápidos, usando menos energia.


1

Uma coisa a considerar é ter o log de transação em um disco rígido e seu MDF em um SSD. Além disso, a vida útil dependerá muito do tipo de aplicativo. O OLTP pode queimar rapidamente, onde dados razoavelmente estáticos não devem ter problemas.


1

Minha própria experiência foi misturada aqui ...

Teste no windows 7 com sql server 2008 express r2. Executando em um desktop i7 com um Sandy Bridge e uma ram instalada de 12G (DDR3, eu acho?). Com a configuração de desktop, eu estava logo após ver quantos registros eu posso gerenciar na plataforma i7 antes de criar um servidor.

Executei esses testes pela primeira vez na unidade de 1.5TB 7200rpm instalada para obter os tempos de base.

Registros de 10k com procs de atualização, otimizamos as tabelas para armazenar os dados relacionados anteriormente em uma tabela simples, adicionamos índices até que eu diminuísse o tempo de alguns segundos como ponto de partida, depois dupliquei os registros até 1,2 milhão e obtive um tempo de 0: 3: 37 para as mesmas atualizações. 3 1/2 minutos não são ruins para esta configuração não invasiva.

Dupar os registros de até 2,56 milhões me deu um tempo de 0:15:57 - quase um aumento de 5x. Provavelmente devido principalmente à paginação após a memória 12G instalada.

Instalou a unidade SSD e moveu os bancos de dados, o tempo aumentou para pouco mais de 20 minutos. Estou assumindo que isso ocorre porque os arquivos de paginação são por disco rígido e não havia nenhum por padrão na unidade SSD, pois ela não foi instalada como a unidade do SO (abundância de telas azuis quando tentei isso).

Adicionado um arquivo de paginação à unidade SSD e refazendo o teste 0: 5: 52 -m, para que o arquivo de paginação pareça ter funcionado, mas não tenho certeza se um arquivo de paginação é adequado para uma unidade SSD pelas razões acima, eles estão fortemente gravados e podem adicionar desgaste e desgaste indevidos na unidade.

Uma ressalva, também habilitei o Smartboost nessa unidade e que também pode ter influenciado os tempos, será executada novamente sem ela.

Meu melhor senso é que é mais fácil adicionar memória hoje em dia e, pelo custo, talvez um ataque 0 + 1 de discos híbridos fizesse um trabalho quase tão bom sem os problemas.

edit: desativou o arquivo de paginação no SSD e deixou o impulso inteligente fazer o seu trabalho, o tempo melhorou de 5:52 minutos para 4:55 minutos para 2,56 milhões de registros com uma série de 3 atualizações cada. Vou tentar o cache SSD 8G na unidade híbrida Seagate 750G a seguir. então se isso não é ruim, vou experimentá-los no ataque 0 + 1.

última atualização sobre isso, pois este é um tópico antigo - mas eu queria colocar os resultados que obtive lá para que alguém possa encontrá-los.

Movendo o banco de dados para o Seagate 750G Hybrid com um cache SSD de 8G, executei o teste algumas vezes para que o cache do SSD pudesse aprender. Isso me dá um tempo de 5:15 m: s para o mesmo teste, atualizando 2,56 milhões de registros - o que é quase o suficiente para o desempenho do SSD (4:55 m: s com o Intel Smartboost) para que eu considere o custo.

Por cerca de US $ 50 a mais (US $ 239 versus US $ 189 no momento), o híbrido fornece mais de 6x o armazenamento e quase o mesmo desempenho, sem executar nenhum software adicional para otimização. Em um ataque 0 + 1, espero que os tempos sejam muito melhorados e esta unidade tenha uma garantia de 5 anos, espero que eu não precise disso.


0

Pessoalmente, eu não usaria SSDs pelos motivos já mencionados; eles diminuirão gradualmente antes de eventualmente falhar. Ainda não sabemos realmente quando isso será - as estimativas atuais são apenas isso - estimativas. Lembra quando todos compramos esses CDs 'indestrutíveis' no início / meados dos anos 80? Alguns anos depois, consideramos o armazenamento de dados em CD tão insensato quanto o uso de disquetes.

Se você tiver seu hardware, sistema operacional e banco de dados configurados corretamente, não precisará apostar em SSDs.

Em alguns anos, quando os produtos amadurecerem um pouco, será um cenário diferente. Mas até então ...


0

O artigo da Microsoft Research se preocupa com o custo por Gb, e não com o ganho de desempenho. Na verdade, ele não cabe e testa as unidades, mas usa um algoritmo de retrocesso baseado nos arquivos de log dos servidores reais.

Algumas coisas que vêm à mente com SSD e SQL:

1 / Se você deixar de adicionar os índices corretos, o SSD será muito mais tolerante, pois os tempos de busca aleatória são muito baixos.

2 / Os custos são muito baixos quando esse estudo foi realizado e, para pequenos aplicativos da Web, por exemplo, para executar o back-end de um aplicativo de telefone, não para servidores corporativos do Exchange, o desempenho poderia economizar despesas com a contratação de um consultor para ajustar o SQL Server.

3 / Um único drive SSD com cópia de sombra certamente deve ser mais barato do que um monte de eixos em um gabinete RAID, o controlador e as conexões. Sem mencionar a energia, aquecimento e espaço no rack.

4 / Os fusos são notórios por serem a parte que mais morre em um computador. O SSD não possui partes móveis e uma hora de inatividade nos negócios pode custar o preço de um SSD de uma só vez.

5 / O desgaste é um problema, mas eles têm maneiras de gerenciá-lo (envolvendo blocos de dispersão), o que é possível porque dados fragmentados aleatoriamente não retardam um SSD. Além disso, um pequeno banco de dados em um disco grande provavelmente não se desgastará a tempo de comprar um novo mais barato no futuro.

6 / Há uma tendência para bancos de dados não relacionais e para fazer junções na camada intermediária. Isso pode realmente mudar as coisas: E / S para tabelas simples não indexadas em unidades SSD em shards sem penalidade no desempenho e com uma proposta de dimensionamento muito mais simples. Também economizando em licenças do SQL Server por shard.

7 / Tudo isso é teórico. Se alguém tiver testes de desempenho do mundo real contra eixos, eu adoraria ver.

Lucas

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.