none
Dúvida Sobre Performance SQL Server 2008 RRS feed

  • Pergunta

  • Bom dia,

    Tenho uma dúvida sobre performance do SQL Server 2008.

    Hoje temos uma aplicação de terceiro, ela se conecta a um banco estruturado por eles mesmo sempre com o usuário SA, ou seja, se eu me conectar 5x no sistema, será conectado 5x com o usuário SA. Pois está com picos de lentidão enormes, e identificamos isso quando existem uma quantidade até pequena de conexões, 20/30 conexoes.

    Sei que o banco usa o que tiver de memoria disponivel no servidor, por configuração padrão. O que gostaria de saber é, se caso todas as vezes que eu me conectar com o usuário SA na minha aplicação, qual é a forma de gerenciamento que o banco utiliza:

     - Utiliza todo o recurso existente para o primeiro SA conectado e disponibiliza parte dos recursos para o restante que vai conectando?

     - Faz balanço do disponibilidade por quantidade de conexão, independente se for usuário SA ou vários usuários diferentes. Ex: SA, Maria, Joao, Juca...?

     - Existe uma forma configuraçao para balancear por conexao ativa?

    Estou citando essas opções pois sao essas que eu conheço para questao de performance do banco, mas peço que se tiver errado, por favor me corrijam e me digam qual seria a melhor forma de gerenciamento para se fazer ou o que o banco de dados mesmo faz para gerenciar.

    Obrigado


    quinta-feira, 21 de março de 2013 13:39

Respostas

  • Josivan,

    Não entendi muito bem sua duvida mas vamos la, aos poucos sanamos todas elas rs...

    1 - Não deixe sua aplicação se conectar como SA, sei que é complicado fazer alterações grandes assim e envolvem muitas pessoas, mas voce esta correndo um grande risco!

    2 - Cada conexão ocupa aproximadamente 28KB de memoria, então 5 conexões = 5*28.

    3 - O usuario em si é indiferente em relação ao compartilhamento de recurso, paginas, planos de execuções, indices, CLR e qualquer outro objeto que estiver em memoria será utilizado por todos os usuarios, o que nos leva a seguinte conclusão: Utilizar em 2 sessões o mesmo usuario não é mais lento nem performatico, e sim exatamente a mesma coisa que utilizar 2 usuarios distintos.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 21 de março de 2013 13:44
    Moderador
  • Josivan,

    Não existe algo magico a ser feito para melhorar performance, caso existisse não seria necessario DBA principalmente de tunning ou infra....

    Alguns pontos:

    1 - O que esta lento? Disco? memoria? A consulta? falta de indices? má modelagem? Rede? Tudo isso influencia na performance e é impossivel eu te dizer o que e por que esta causando lentidão sem estar no seu ambiente.

    2 - Sobre a memoria veja este link: http://fabrizziocaputo.wordpress.com/2011/11/07/por-que-a-memoria-utilizada-pelo-sql-server-nao-diminui-por-que-a-memoria-do-sql-server-so-diminui-quando-eu-reinicio-o-servidor/

    O fato do SQL Server utilizar toda a memoria do servidor não quer dizer que ele esta lento, alias muito pelo contrario, isso quer dizer que ele esta é mais rapido do que se não utilizasse.

    3 - Indicação de alto processamento geralmente esta relacionada a falta de indices e table scan em grandes tabelas ou grandes funções de tratativas sendo executadas por exemplo.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    • Marcado como Resposta Josivan Laskoski quinta-feira, 21 de março de 2013 14:54
    quinta-feira, 21 de março de 2013 14:23
    Moderador
  • Josivan,

    Sem problemas, desculpa não podermos ajudarmos mais, é que o problema de lentidão é extremamente generico e tudo de TI basicamente influencia então sem voce conhecer o ambiente, sem termos maiores detalhes fica simplesmente impossivel te ajudarmos de forma mais efetiva. Recomendo o seguinte: Busque na internet como monitorar cada coisa apartada, estude o sistema e seu ambiente, com perguntas mais especificas as respostas serão mais especificas e certeiras.

    Marque como "resposta" as respostas que te ajudaram para que possa ajudar outros usuario que tiverem a mesma duvida.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    • Marcado como Resposta Josivan Laskoski quinta-feira, 21 de março de 2013 14:54
    quinta-feira, 21 de março de 2013 14:47
    Moderador
  • Josivan,

    leia o artigo do link, acredito que seja interessante como ponto partida na sua análise.

    http://technet.microsoft.com/pt-br/library/cc784871(v=ws.10).aspx

    **Ajude a melhorar o sistema de busca do fórum.Marque a(s) resposta(s) que foram úteis**
    **Se esta resposta solucionou a questão, então, por favor, marque-a como resposta.** 

     

    • Marcado como Resposta Josivan Laskoski quinta-feira, 21 de março de 2013 16:20
    quinta-feira, 21 de março de 2013 15:23

Todas as Respostas

  • Josivan,

    Não entendi muito bem sua duvida mas vamos la, aos poucos sanamos todas elas rs...

    1 - Não deixe sua aplicação se conectar como SA, sei que é complicado fazer alterações grandes assim e envolvem muitas pessoas, mas voce esta correndo um grande risco!

    2 - Cada conexão ocupa aproximadamente 28KB de memoria, então 5 conexões = 5*28.

    3 - O usuario em si é indiferente em relação ao compartilhamento de recurso, paginas, planos de execuções, indices, CLR e qualquer outro objeto que estiver em memoria será utilizado por todos os usuarios, o que nos leva a seguinte conclusão: Utilizar em 2 sessões o mesmo usuario não é mais lento nem performatico, e sim exatamente a mesma coisa que utilizar 2 usuarios distintos.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 21 de março de 2013 13:44
    Moderador
  • Fabrizzio,

    Obrigado pela resposta!

    Então, quem usa o usuário SA é a propria configuração do sistema, vou ver se consigo trocar essa configuração.

    Qual seria então a pergunta a ser feita para poder melhorar o desempenho, já que está muito lento?

    Configurar para nao usar toda a memoria disponivel? Pois o grande problema está nos recursos, está ficando praticamente sem memoria e processamento para o O.S.

    Obrigado!

    quinta-feira, 21 de março de 2013 14:13
  • Josivan,

    Não existe algo magico a ser feito para melhorar performance, caso existisse não seria necessario DBA principalmente de tunning ou infra....

    Alguns pontos:

    1 - O que esta lento? Disco? memoria? A consulta? falta de indices? má modelagem? Rede? Tudo isso influencia na performance e é impossivel eu te dizer o que e por que esta causando lentidão sem estar no seu ambiente.

    2 - Sobre a memoria veja este link: http://fabrizziocaputo.wordpress.com/2011/11/07/por-que-a-memoria-utilizada-pelo-sql-server-nao-diminui-por-que-a-memoria-do-sql-server-so-diminui-quando-eu-reinicio-o-servidor/

    O fato do SQL Server utilizar toda a memoria do servidor não quer dizer que ele esta lento, alias muito pelo contrario, isso quer dizer que ele esta é mais rapido do que se não utilizasse.

    3 - Indicação de alto processamento geralmente esta relacionada a falta de indices e table scan em grandes tabelas ou grandes funções de tratativas sendo executadas por exemplo.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    • Marcado como Resposta Josivan Laskoski quinta-feira, 21 de março de 2013 14:54
    quinta-feira, 21 de março de 2013 14:23
    Moderador
  • Então Fabrizzio,

    Chega ser engraçado, pois eu também nao sei te responder, o sistema está sendo implantando agora, nao tenho conhecimento nem de 5% da base, fica complicado, queria ver se poderia ser algo relacionado a configuração ou algo do tipo.

    Peguei algumas das querys geradas e todas estavam apontando problema na explanação dos resultados, faltando indices e tudo mais, o problema é identificar tudo o que precisa quanto se está implantando o sistema em matriz e 32 filias.

    Vou ver sim o seu site.

    Por hora, obrigado pela explicação.

    Abraços

    quinta-feira, 21 de março de 2013 14:43
  • Josivan,

    Sem problemas, desculpa não podermos ajudarmos mais, é que o problema de lentidão é extremamente generico e tudo de TI basicamente influencia então sem voce conhecer o ambiente, sem termos maiores detalhes fica simplesmente impossivel te ajudarmos de forma mais efetiva. Recomendo o seguinte: Busque na internet como monitorar cada coisa apartada, estude o sistema e seu ambiente, com perguntas mais especificas as respostas serão mais especificas e certeiras.

    Marque como "resposta" as respostas que te ajudaram para que possa ajudar outros usuario que tiverem a mesma duvida.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    • Marcado como Resposta Josivan Laskoski quinta-feira, 21 de março de 2013 14:54
    quinta-feira, 21 de março de 2013 14:47
    Moderador
  • Perfeito!

    Estamos conhecendo o sistema aos poucos, vou estudar suas particularidades.

    Obrigado Fabrizzio.

    Marcado com resposta!

    quinta-feira, 21 de março de 2013 14:55
  • Josivan,

    leia o artigo do link, acredito que seja interessante como ponto partida na sua análise.

    http://technet.microsoft.com/pt-br/library/cc784871(v=ws.10).aspx

    **Ajude a melhorar o sistema de busca do fórum.Marque a(s) resposta(s) que foram úteis**
    **Se esta resposta solucionou a questão, então, por favor, marque-a como resposta.** 

     

    • Marcado como Resposta Josivan Laskoski quinta-feira, 21 de março de 2013 16:20
    quinta-feira, 21 de março de 2013 15:23
  • Jerfeson,

    Acessei o link, muito bom o quadro de valores, vou analisar o que tenho hoje de dados e fazer as comparaçoes.

    Obrigado!

    Fabrizzio,

    Estava lendo um dos seus artigos e me deparei com uma duvida:

    ...."O SQL Server é configurado para automaticamente realizar as operações de CheckPoint, então ele realizara a mesma quando achar necessario, todo caso, é possivel fazer uma pequena intervenção, aumentando o numero maximo de tempo entre as operações de CheckPoint, lembrando que toda operação sera grava em log, e o processo de CheckPoint é responsavel por colocar os durty buffer em disco, portanto, é mais lento e necessita de I/O randomico, ja a escrita no log é I/O sequencial, que é muito mais rapido (Em meus testes, obtive um ganho de quase 200% de performance), portanto, aumentando este tempo, voce pode vir a ter um gargalo de memoria pois o SQL Server ira manter mais dados por mais tempo em memoria."....

    Não consegui entender se voce aumentou o tempo de operaçoes do CheckPoint ou nao para obter uma performance de 200%?

    Obrigado!

    quinta-feira, 21 de março de 2013 16:57
  • Josivan,

    Ficou realmente estranho, mas o ganho de 200% não foi em relação a alteração no tempo de checkpoint e sim em relação a Escrita randomica X Escrita sequencial.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 21 de março de 2013 17:02
    Moderador
  • Como eu verifico qual é o tempo hoje que o CheckPoint está fazendo em relaçao a escrita randomica para sequencial?

    E é possível eu trocar essa escrita, ou seja, passar de randomica para sequencial somente ou so alterar o tempo entre elas mesmo?

    Obrigado

    quinta-feira, 21 de março de 2013 17:32
  • Josivan,

    Vamos la... São coisas distintas...

    1 - Escrita randomica: Normalmente o arquivo de dados faz escrita randomica, isso é uma caracteristica do disco e não tem relação nenhuma com o processo de checkpoint

    2 - Escrita sequencial: Arquivo de log, continua não tendo relação nenhuma com o checkpoint pois é outro tipo de escrita em disco

    As situações de escrita, seja randomica ou sequencial, acontece em um servidor seja ele de SQL ou não.

    O processo de checkpoint guarda dados da memoria no disco, que por sua vez utiliza o subsistema de I/O do windows e dos discos, mas uma não é configuravel em relação ao outro.

    Não consegue fazer mudança nenhuma em relação a atuar como sequencial ou randomica. Desfragmentações de disco via windows ajudam nisso, mas nada é garantido.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 21 de março de 2013 17:37
    Moderador
  • Ok entendi!

    O que eu nao entendi, como voce ganhou os 200%? Pensei que era em relaçao a configuraçao do CheckPoint e o tipo de gravação dele.

    Obrigado

    quinta-feira, 21 de março de 2013 17:46
  • Não houve efetivamente o ganho, naquele pedaço [Bem mal escrito]  quis dizer que a escrita sequencial foi 200% mais rapida que a escrita randomica, mas não ha nada que possamos fazer para falar pro sql utilizar uma ou outra.

    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 21 de março de 2013 17:47
    Moderador
  • Ahh entendi agora!..ahaha

    fiquei realmente muito curioso para saber como conseguiu um ganho assim, mas agora entendi que é a diferença de uma para outra.

    Fabrizzio, obrigado!

    quinta-feira, 21 de março de 2013 20:37