Não preste atenção a essa SAN atrás da cortina

35

Era uma vez, eu construí meus próprios servidores SQL e tinha controle sobre configuração de unidade, níveis de RAID, etc. O conselho tradicional de separação de dados, logs, tempdb, backups, (dependendo do orçamento!) era sempre um parte muito importante do processo de design do servidor SQL.

Agora, com uma SAN de nível empresarial, solicito apenas uma quantidade específica de espaço em disco para um novo servidor SQL, dividido em unidades lógicas para dados, backups e compartilhamentos de arquivos. Certamente faz o meu trabalho mais fácil, mas há uma parte de mim que não se sente completamente confortável que eu não posso realmente espiar "atrás da cortina" para ver o que realmente está acontecendo lá atrás.

Meu entendimento é que a equipe de SAN não configura diferentes "tipos" de unidades de maneira diferente (otimização de unidades de dados para acesso aleatório versus unidades de log para gravações de fluxo). Parte disso pode depender do próprio produto SAN (temos um HP XP12000 e um HP XP24000), mas tenho certeza de que o software da HP faz todos os tipos de configuração dinâmica de desempenho (observando pontos de acesso IO e reconfigurando em tempo real para otimizar esses LUNs), para que as equipes de aplicativos e os DBAs não precisem se preocupar com nada disso. Algo sobre "espalhar a carga de todos os servidores em um grande número de fusos" ou algo assim.

Minhas perguntas / discussão:

  1. Sem criar inimigos na equipe SAN, como posso garantir a mim e aos desenvolvedores de aplicativos que nossos servidores SQL não estão sofrendo com armazenamento mal configurado? Apenas use estatísticas de perfmon? Outros benchmarks como o sqlio?

  2. Se eu carregar o teste nessas unidades SAN, isso realmente me dará uma medida confiável e repetível do que veremos quando formos ao ar? (supondo que o software SAN possa "configurar dinamicamente" de maneira diferente em diferentes momentos).

  3. O IO pesado em uma parte da SAN (digamos, o servidor Exchange) afeta meus servidores SQL? (assumindo que eles não estão dando discos dedicados para cada servidor, o que me foi dito que não são)

  4. Solicitar a separação de unidades lógicas para diferentes funções unidades lógicas (dados vs log vs tempdb) ajuda aqui? A SAN veria as diferentes atividades de IO sobre elas e as configuraria de maneira ideal de maneira diferente?

  5. Estamos com uma crise no espaço agora. As equipes de aplicativos foram instruídas a cortar arquivos de dados, etc. As preocupações de espaço levariam a equipe da SAN a tomar decisões diferentes sobre como configurar o armazenamento interno (níveis de RAID, etc.) que poderiam afetar o desempenho do servidor?

Obrigado por seus pensamentos (tópico semelhante brevemente discutido nesta questão do SF )

    
por BradC 08.05.2009 / 01:16

5 respostas

16

Sem criar inimigos na equipe da SAN, como posso garantir a mim e aos desenvolvedores de aplicativos que nossos servidores SQL não estão sofrendo com armazenamento mal configurado? Apenas use estatísticas de perfmon? Outros benchmarks como o sqlio?

Em suma, provavelmente não há como ter certeza absoluta. O que eu diria (sou administrador de SAN) é que, se os aplicativos estiverem funcionando de acordo com as suas expectativas, não se preocupe. Se você começar a ver problemas de desempenho que acredita estarem relacionados ao desempenho do SAN / Disk IO, convém consultar. Eu não uso muito armazenamento da HP como você, mas no mundo da IBM / NetApp eu posso dizer por experiência que não há muitas opções que permitam configurá-lo "mal". A maior parte do armazenamento corporativo nos dias de hoje exige muito do trabalho de adivinhação da construção de arrays de raid, e realmente não permite que você faça errado. A menos que eles estejam misturando velocidades e capacidades de unidade nos mesmos grupos de raids, você pode ficar tranqüilo na maioria dos casos em que seu disco está funcionando bem.

Se eu carregar o teste nessas unidades SAN, isso realmente me dará uma medida confiável e repetível do que veremos quando formos ao ar? (supondo que o software SAN possa "configurar dinamicamente" de maneira diferente em diferentes momentos).

O teste de carga deve ser bastante confiável. Lembre-se de que, quando você está testando a carga de uma caixa, que está em uma SAN / Disk Array compartilhada, seu desempenho pode (e será) afetado por outros sistemas que usam o mesmo armazenamento.

O IO pesado em uma parte da SAN (digamos, o servidor Exchange) afeta meus servidores SQL? (assumindo que eles não estão dando discos dedicados para cada servidor, o que me foi dito que não são)

Pode. Não é tudo sobre os discos, ou quais discos, os servidores estão ligados. Todos os dados estão sendo servidos por meio de um controlador de disco e, em seguida, por um comutador SAN. O desempenho que você verá dependerá muito de como o controlador de disco está conectado às prateleiras de disco correspondentes e à SAN correspondente. Se o array inteiro se conectar ao backbone SAN em um único fio de fibra de 4 Gbps, então, claramente, o desempenho será afetado. Se a matriz estiver conectada através de duas SANs redundantes com carga balanceada, usando links troncalizados, então seria impossível para a troca absorver muita largura de banda. Outra coisa que precisa ser considerada é a quantidade de I / o da matriz que a matriz é capaz. Contanto que o array e o SAN ao qual ele está conectado sejam dimensionados corretamente, o IO pesado em outras partes do ambiente SAN não deve afetar seu desempenho do SQL.

Solicitar a separação de unidades lógicas para diferentes unidades lógicas de funções (dados vs log vs tempdb) ajuda aqui? A SAN veria as diferentes atividades de IO sobre elas e as configuraria de maneira ideal de maneira diferente?

Isso é provavelmente uma questão de preferência e também depende muito de como seus administradores de armazenamento a configuram. Eles podem fornecer três LUNs no mesmo array ou volume, e nesse caso, é tudo igual. Se eles lhe deram LUNs individuais em matrizes diferentes, em volumes diferentes (discos fisicamente diferentes), talvez valha a pena separá-los.

Estamos com um pouco de falta de espaço agora. As equipes de aplicativos foram instruídas a cortar arquivos de dados, etc. As preocupações com espaço levariam a equipe de SAN a tomar decisões diferentes sobre como configurar o armazenamento interno (níveis de RAID, etc.) que poderiam afetar o desempenho do meu servidor?

Não imagino que o seu administrador de armazenamento altere o nível de invasão para liberar espaço. Se ele quisesse, então ele provavelmente deveria ser demitido. As preocupações com o espaço podem levar as coisas a serem configuradas de maneira diferente, mas normalmente não de forma impactante no desempenho. Eles podem se tornar um pouco mais restritos sobre quanto espaço eles te dão. Eles podem ativar recursos como deduplicação de dados (se a matriz suportar), o que pode prejudicar o desempenho da matriz enquanto o processo é executado, mas não o tempo todo.

    
por 13.05.2009 / 18:23
6

A equipe da SAN deve ter ferramentas que possam ajudar você a revelar se seu aplicativo é hotspotting. Obviamente, você deve monitorar e medir o seu fim também.

A maior parte da minha experiência é com a EMC, portanto YMMV. Mas o seguinte deve se aplicar à maioria dos equipamentos SAN.

Existem apenas tantos portais indo para o array. Às vezes, há um switch de SAN entre o que você pode definir zonas. Só porque o array é essencialmente um grande pool de armazenamento não significa que você não deve se preocupar com o desempenho do IO.

Então, se você acha que está tendo problemas de IO, precisa restringir o gargalo. Se estiver em algum lugar entre o HBA e o array, será possível descobrir se o HBA está com o máximo ou se a porta SAN no lado do comutador / matriz está com excesso de assinaturas. Além disso, você deve fazer com que a equipe de SAN monitore os padrões de acesso do seu aplicativo, seja de uma inicialização a frio, seja de um hot running.

Obviamente, o armazenamento subjacente faz uma diferença, digamos, rodar o RAID5 lento e o RAID10 mais veloz, já que em algum momento você terá que acertar o disco, independentemente dos diferentes níveis de cache.

HTH. Você pode me fazer um ping off-line se tiver um problema específico, já que isso pode demorar um pouco para se aprofundar.

    
por 08.05.2009 / 02:17
5

Sem criar inimigos na equipe da SAN, como posso garantir a mim e aos desenvolvedores de aplicativos que nossos servidores SQL não estão sofrendo com armazenamento mal configurado? Apenas use estatísticas de perfmon? Outros benchmarks como o sqlio?

A primeira coisa que você precisa saber antes de fazer qualquer tipo de benchmarking é a tolerância com a qual sua própria carga de trabalho precisa ser executada. Então, faça um benchmark de suas próprias coisas antes de verificar o novo sistema. Dessa forma, se você perceber que está chegando a um máximo de, digamos, 56 MB / s durante picos de carga (backups?), Descobrindo que a matriz de disco conectada à SAN 'apenas' envia 110 MB / s sob cargas de pico simuladas, garantiu que o limite não será o canal de E / S.

Ao verificar uma nova matriz de disco, fiz esse tipo de teste de desempenho. A nova matriz usava unidades SATA em vez de unidades de canal de fibra (SCSI), e eu precisava me assegurar de que funcionaria em nosso ambiente. Eu estava profundamente duvidosa. Mas depois da caracterização, descobri que o novo sistema tinha sobrecarga de E / S suficiente no pico para acompanhar o pico medido nos discos mais confiáveis. Isso me surpreendeu.

Se eu carregar o teste nessas unidades SAN, isso realmente me dará uma medida confiável e repetível do que veremos quando formos ao ar? (supondo que o software SAN possa "configurar dinamicamente" de maneira diferente em diferentes momentos).

Devido à natureza compartilhada dos arrays de disco conectados ao SAN, o desempenho é variável durante a semana. Se você já sabe quando seu pico de carga de E / S é, faça uma série de testes de carga durante o período do dia em que seu pico de carga de E / S é. Dessa forma, você pode caracterizar melhor o tipo de sobrecarga de E / S disponível durante os períodos em que você está mais interessado. Testes de carga em horários de pico lhe darão uma ideia de como as coisas ficarão agitadas, mas o teste de pico dar-lhe verificações de limites verdadeiros.

O IO pesado em uma parte da SAN (digamos, o servidor Exchange) afeta meus servidores SQL? (assumindo que eles não estão dando discos dedicados para cada servidor, o que me foi dito que não são)

Se os LUNs do Exchange compartilharem discos com seus LUNs SQL, eles absolutamente o farão. Usamos HP EVAs, não XPs, mas acho que eles usam a mesma terminologia de "grupo de discos". LUNs no mesmo disco do grupo de discos compartilham discos e, portanto, disputam a E / S nesses dispositivos físicos. Quanto mais discos você colocar em um grupo de discos, mais espaço de manobra a matriz terá para manipular a E / S. Os arrays (pelo menos os EVA fazem isso, e presumo que os XPs mais caros fazem o mesmo) distribuem blocos lógicos de LUN pelos discos físicos de maneira não seqüencial. Isso permite fazer o que você sugere, que distribui dinamicamente grupos de blocos acessados com freqüência para diferentes dispositivos físicos para aumentar o paralelismo e reduzir a contenção de E / S no nível do disco.

A questão a ser feita é quanto orçamento de I / O esse grupo de disco tem, e se os aplicativos que usam esses LUNs estão ou não com excesso de E / S. Essa é uma pergunta que os administradores de armazenamento precisarão acompanhar. Pode ser que o pico de E / S para o Exchange (provavelmente durante os backups) possa não coincidir com as cargas SQL e ambos os sistemas possam coexistir de forma feliz.

Solicitar a separação de unidades lógicas para diferentes unidades lógicas de funções (dados vs log vs tempdb) ajuda aqui? A SAN veria as diferentes atividades de IO sobre elas e as configuraria de maneira ideal de maneira diferente?

Para os arrays da HP, você precisaria colocar os diferentes padrões de E / S em diferentes grupos de grupos e não em LUNs. Os padrões de E / S de banco de dados não devem coexistir com padrões de acesso de veiculação da Web, por exemplo. Diferentes LUNs não melhoram significativamente seu desempenho, a menos que estejam em grupos de discos diferentes. Se estiverem no mesmo grupo de discos, a única vantagem real é o sistema operacional, no qual ele pode fazer o planejamento de E / S no kernel para melhorar o paralelismo com o subsistema de disco. Dito isto ...

Os arrays da HP, no meu entendimento, estão cientes dos diferentes padrões de acesso nos LUNs, mas preste muita atenção aos blocos lógicos reais. Colocar os logs em um LUN diferente coloca um limite nos blocos lógicos que receberão esse tipo de tráfego de E / S, e isso facilitará a tarefa de classificar corretamente os blocos lógicos nos discos físicos.

Estamos com um pouco de falta de espaço agora. As equipes de aplicativos foram instruídas a cortar arquivos de dados, etc. As preocupações com espaço levariam a equipe de SAN a tomar decisões diferentes sobre como configurar o armazenamento interno (níveis de RAID, etc.) que poderiam afetar o desempenho do meu servidor?

Definitivamente. Se o espaço for pequeno, você não obterá grupos de disco dedicados para sua E / S (a menos que seu ambiente de armazenamento seja grande o suficiente para justificar a dedicação de 7 TB de disco físico para seu uso exclusivo, quando isso pode acontecer) ). O debate Raid5 / Raid10 depende em grande parte das políticas da organização, e perguntar é sua melhor aposta.

    
por 18.05.2009 / 22:28
1

Sugiro que você abra uma caixa de diálogo com sua equipe SAN e o fornecedor para solucionar suas preocupações. Um dos problemas que você terá com a execução de seus próprios benchmarks é que seus testes podem não ter relação com o que acontece na produção, particularmente nos picos de carga. A maioria das SANs tem toneladas de cache com suporte de bateria, o que, em muitos casos (especialmente quando você executa benchmarks sintéticos), significa que você está escrevendo para a RAM e obtendo um bom desempenho.

Dependendo do seu ambiente e da solução que você está usando, algum fornecedor CE pode ter acabado de entrar e configurar a SAN de acordo com o padrão que preferir. Isso acontece mais do que você pensa. Você terá que eliminar o shell "a equipe SAN conhece tudo" até ter certeza de que a solução está atendendo às suas necessidades.

Boa sorte.

    
por 10.05.2009 / 05:16
1

Eu estava em uma conferência da oracle uma vez com uma palestra sobre esse tópico - SAN sã para bancos de dados.

A essência da palestra está disponível em este arquivo PDF ou no site do autor aqui

    
por 18.05.2009 / 21:58