none
Performance em Instância com 2 Databases RRS feed

  • Pergunta

  • Olá pessoal,

    Estou fiz um teste em meu computador (como servidor) + 2 estações  e obtive um resultado que me deixou intrigado.

    Executei uma consulta no BANCO "A" através das 2 estações de forma simultânea e o resultset chegou a ambas em 22s.

    Depois criei um BANCO "B" igual ao "A" e repeti o teste, sendo que cada estação executou a consulta em 1 dos bancos ou seja estação 01 > BANCO "A" e estação 02 > BANCO "B". Neste cenário o resultset chegou em ambas após 29s.

    Se eu executar a consulta individualmente sem concorrência o tempo de retorno de resultset é de 14s.

    Então gostaria de saber o porque da consulta ter sido mais demorada ao fazela em 2 bancos distintos? Seria a concorrência em disco ?

    No caso da execução das duas no mesmo banco a performance pode ter sido melhor pelo fato da compilação do plano ter sido compartilhada mesmo com as consultas sendo executadas de forma simultânea?

    A maquina usada como servidor é um i7 com 8 núcleos e esta consulta em questão não usou paralelismo apesar do mesmo estar ativo.

    Aproveitando gostaria de perguntar se o limite de conexões do SQL Server (32.767) é por Instância ou por Database?
    • Editado JRidel quarta-feira, 5 de setembro de 2012 11:29 Adicionar mais uma pergunta.
    quarta-feira, 5 de setembro de 2012 11:26

Respostas

  • Jridel,

    o fato do primeiro teste ter chegando em 22 segundos não me assusta, até porque esses dados provavelmente já estavam em memória e servidor teve apenas o trabalho de enviar pela rede o mesmo resultado para duas máquinas distintas.

    Já o segundo teste estranha o fato de ter demorando o mesmo tempo, 29s. Se você executou a consulta pela primeira vez no banco B, este deveria montar um plano de execução para essa consulta, a não ser que tenha ficado alguma referencia do plano na memória, o que acho bem dificil. Nesse caso do banco B entra a questão do disco SIM, pois o SQL vai ler os dados antecipadamente (Read Ahead) e deixá-los em memória, para depois enviar ás queries executadas.

    Referente á simultaneidade, o plano é um só pra mesma consulta, independente se ela está sendo executada por N máquinas, o que pode mudar é se alguma estatística for atualizada ou algum índice reindexado nesse meio tempo.

    Quanto ao limite de conexões é por instância.

    • Marcado como Resposta JRidel quinta-feira, 13 de setembro de 2012 10:57
    quinta-feira, 13 de setembro de 2012 05:42