none
Ajuda com SQL com alta carga.

    Question

  • Bem vamos por parte.

    Nossa situacao,  temos um ambiente WEB  hyper-v e temos uma VM somente para  o  sql server 2008 r2 sem DC.

    Tudo roda maravilhosamente bem, ate que o trafego de nosso website teve uma repentino aumento de trafego e o servidor de SQL esta com CPU utilizada bastante alta.

    Ja pensamos em Cluster e colocar 2 VM para balancear a carga do SQL, mas tenho muitas duvidas nessa implementacao pois nunca tivemos essa situacao anteriormente.

    O que os senhores me recomendao para essa situacao?  Lembrando que por ser um website de grande visitacao  temos que atentar que alem da performance do SQL temos que ter uma grande disponibilidade.

    Nosso server Hyper-v esta coma utilizacao bem baixa.

    Abraco a todos os colegas.

    Marcelo Queiroz

    Thursday, August 23, 2012 4:21 PM

All replies

  • Marcelo,

    Vamos lá, você destacou que ocorreu um aumento de tráfego de dados no seu ambiente e que o SQL Server esta com um consumo de memória um pouco maior.

    Você já chegou a analisar o porque isso esta acontecendo?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    Monday, August 27, 2012 4:57 PM
  • Oi Junior,

    Obrigado por responder.

    Agora quanto a sua pergunta, o aumento de consumo de CPU e Memoria eh devido a um aumento significativo nas ultimas semanas das requisicoes simultaneas devido a um grande trafego que temos na pagina web, inclusive ja efetuei algumas analises para ver se nao seria algum problema de definicao ou algo parecido, mas realmente o banco esta normal. So fico preocupado pois se o trafego web aumentar demais terei que ter outra opcao, uma vez que a empresa esta investindo muito em publicidade.

    Monday, August 27, 2012 5:23 PM
  • Marqueinf,

    Então, não adianta quer criar novos ambientes sem antes simular algumas situações.

    Inicialmente você poderia fazer uso de algumas técnicas de particionamento de Banco de Dados, Arquivos e Tabelas, utilizando:

    • Filegroups;
    • Particionamento de dados em tabelas;
    • Particionamento de índices;
    • Funções de particionamento de dados;
    • Esquemas de particionamento;
    • Particionamento horizontal de tabelas;
    • Mudança de alocação de disco.

    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    Monday, August 27, 2012 5:27 PM
  • Boa Noite,

    Se o problema está no consumo de hardware, o melhor seria prover recursos de infraestrutura que pudessem lidar com esse throughput (considerando a premissa de que o banco está "normal"). Criar uma VM adicional não irá balancear a carga do SQL Server, uma vez que não é possível colocar duas VMs para acessarem o mesmo banco de dados.

    Considerando que você busca balancear o tráfego e prover uma solução de alta disponibilidade, se você estivessse com o SQL Server 2012, ele atenderia seus objetivos, mas enfim... É 2008, então precisamos lidar com o que existem em mãos.

    Para atender o objetivo de alta disponibilidade, o cluster ou o Database Mirroring seriam duas implementações que eu recomendaria (agora é analisar o ponto forte de cada uma). Independente de uma ou de outra, a base estará ativa para leitura e escrita apenas em um dos nós e portanto, essa solução atende somente ao requisito de alta disponibilidade.

    Um ponto a ser observado aqui é que não adiantará você fazer um cluster de SQL Server com duas máquinas virtuais no mesmo servidor Hyper-V, pois, se esse cair, as duas máquinas virtuais irão estar indisponíveis comprometendo o serviço. Só faz sentido clusterizar o SQL Server com máquinas virtuais em HOSTs físicos diferentes. Outra opção seria por clusterizar o Hyper-V e não o SQL Server. Assim, uma queda no Hyper-V moveria todas as máquinas virtuais. É uma opção, mas uma indisponibilidade apenas na máquina do SQL Server não acionaria a contingência e por isso o uso do Cluster do SQL Server ou do Mirroring podem ser melhores opções (tudo a se analisar).

    Para atender ao requisito de escalabilidade ou crescimento, você teria que trabalhar na questão de performance e tuning de forma a consumir menos do seu hardware e dar o máximo de despenho de suas queries ou prover mais recursos para a máquina virtual. Se o banco e a aplicação foram bem feitas, não restará alternativas senão aumentar o hardware. Vale a pena lembrar que se a empresa investe em publicidade, mais acessos são feitas e espera-se mais vendas e serviços prestados. Parte desse retorno tem de ser colocado na infraestrutura, senão o negócio cresce e a TI "segura" com as paradas não programadas.

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

    Tuesday, August 28, 2012 12:31 AM
  • Bom dia Gustavo, tudo bem?

    Estou com um cenário onde possuo 3 hosts com hyper-v, failover cluster já implementados, várias máquinas virtuais rodando, e agora gostaria de fazer com que o SQL tenha uma alta disponibilidade, tanto se o host físico onde a VM estiver rodando falhar ou se a própria máquina virtual onde está o serviço de SQL falhar o acesso à base de dados continuar a funcionar.

    Pelo que entendi, você explicou que as melhores opções seriam uso do cluster do SQL ou então a replicação do SQL, certo?

    Minha dúvida é a seguinte: para eu configurar o cluster do SQL eu teria que instalar o SQL nos HOSTS junto com o Hyper-V ou eu consigo criar um cluster nas próprias máquinas virtuais com o SQL?

    P.S.  Possuo a versão 2008 R2 devido aos desenvolvedores não estarem familiarizados com o 2012 - peço também que se possível me informe quais as vantages do 2012 em relação ao 2008 R2

    Agradeço desde já,

    Pedro 


    Pedro Barbosa Itil, Windows 2008 Server

    Wednesday, September 12, 2012 10:15 AM
  • Gustavo e demais colaboradores.

    Resolvemos da seguinte forma o problema:

    Criamos uma nova vm com SQL e transferimos algumas tabelas para ele. Sendo assim por agora o problema esta resolvido.

    Obrigado a todos.

    Wednesday, September 12, 2012 2:40 PM
  • Boa tarde Marqueinf,

    Então não foi utilizada na sua solução nenhuma alta disponibilidade do SQL? Replicação, cluster, etc?

    abraços


    Pedro Barbosa Itil, Windows 2008 Server

    Thursday, September 13, 2012 8:53 PM
  • Pedro,

    Por enquanto somente resolvi o problema com a carga, e nao da disponibilidade, mas estamos estudando qual o melhor procedimento para implmentarmos essa seguranca.

    Abracos,

    Marcelo

    Friday, September 14, 2012 6:30 PM
  • Carga é assim mesmo que resolve, você divide suas aplicações e coloca-as em servidores diferentes.

    Pedro, você consegue criar o cluster com as VM's, só que como elas estão no mesmo host físico (um hyper-v pras duas) se ocorrer uma falha, onde estará a redundância? O cluster ideal é com duas máquinas físicas diferentes para que uma possa assumir em caso de falha.

    Gustavo, referente á balancear o tráfego, o que tem no 2012 que não tem no 2008? Always on faz isso?

    Saturday, September 15, 2012 4:26 AM
  • Leonardo,

    Entendi que no caso do Marqueing ele optou por não haver redundância caso  host falhe, no meu caso, possuo 3 hosts, e não estou conseguindo criar o cluster entre as VMs. Já olhei em fóruns e dizem que tenho que criar um switch virtual privado para ser o HeartBeat entre as VMs, porém nada do tipo passo-a-passo. Alguém saberia me dizer onde consigo encontrar algo do tipo? Lembrando que possuo a versão 2008 R2 do SQL e ambiente com 3 hosts em Hyper-V. Também possuo System Center 2012 configurado (SCVMM, SCCM e SCOM).

    abraços e agradeço desde já,


    Pedro Barbosa Itil, Windows 2008 Server

    Sunday, September 16, 2012 1:27 AM
  • Pedro,

    o heart beat é só uma placa de rede com rede configurada apenas entre os dois servidores, isso você configura apenas incluindo um adaptador de rede virtual.

    A rede é tipo isso: Server1 = 10.0.0.1 ; Server2 = 10.0.0.2 ; Server 3 = 10.0.0.3, é só isso, não tem segredo. Se você tá garrado nisso, ainda nem criou o Cluster do Windows né?

    Sunday, September 16, 2012 2:10 AM
  • Bom dia Leonardo,

    Talvez não tenha sido claro o suficiente, peço desculpas por isso e agradeço a atenção em me responder. Possuo o seguinte cenário:

    3 hosts físicos com hyper-v, failover cluster instalados e configurados, 22 máquinas virtuais rodando no ambiente e agora me solicitaram configurar um cluster entre 2 máquinas virtuais rodando SQL Server 2008 R2. Minha dúvida é COMO configurar o cluster entre as máquinas virtuais com o SQL para manter a alta disponibilidade. Pesquisei na internet sobre guest clustering, mas nada realmente sólido e uma espécie de passo a passo, porém pelo que pesquisei, é possível criar sim, e quando comentei sobre o switch virtual privado foi uma maneira de criar o heartbeat entre as duas VMs, além de manterem um switch virtual do tipo externo para se comunicarem com a rede, porém estou com dificuldades para o cluster do SQL em máquinas virtuais.

    abraços


    Pedro Barbosa Itil, Windows 2008 Server

    Monday, September 17, 2012 3:06 AM