none
Performance da mesma rotina em servidores diferentes RRS feed

  • Pergunta

  • Bom dia!

    Estamos com um problema bem inusitado.

    Temos dois servidores um de Produção e outro de teste. Precisamos executar uma rotina que manipula 2 milhões de registros. O procedimento no servidor de produção demorou 5 vezes mais que o servidor de teste. detalhe é que o servidor de teste alem de ser uma maquina virtual "hyper-V" possui em sua configuração bem menos recursos de Hardware.

    Já conferimos as configurações do sp_configure, e configurações da instancia, estão iguais. o banco no servidor de teste é um backup feito recentemente do banco de produção. alguém tem alguma ideia do que possa ser?

    att.

    terça-feira, 28 de janeiro de 2014 09:55

Respostas

  • M.Rodrigues,

    Este problema é um DeadLock. seu procedimento de manipulação de registros está entrando em concorrência com outras instruções, de outros usuários para às mesmas informações.

    Verifique à possibilidade de executar esta rotina em um horário com menor uso do seu banco de dados. Se isto não for possível, verifique os tipos de hints utilizados pelos sistemas que consomem às informações deste banco. Provavelmente, uma ou mais instruções (SELECT, UPDATE ou DELETE) estão travando sua operação.

    Veja os links abaixo para complementar à informação sobre o assunto:

    http://technet.microsoft.com/pt-br/library/ms188246.aspx

    http://technet.microsoft.com/pt-br/library/ms178104(v=sql.105).aspx

    http://technet.microsoft.com/en-us/library/ms187713.aspx

    http://technet.microsoft.com/en-us/library/ms181714.aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Marcado como Resposta Giovani Cr quarta-feira, 29 de janeiro de 2014 11:47
    terça-feira, 28 de janeiro de 2014 13:26
    Moderador
  • Você tem que verificar as transações que devem estar ocorrendo no banco de produção.
    Sua carga de update,insert ou delete pode ser muito alto,por isso a diferença com ctz no seu servidor de teste isso não acontece.
    Pode ser também alguma carga de dados que deve estar ocorrendo,há diversos motivos para isso.

    Bruno

    • Marcado como Resposta Giovani Cr quarta-feira, 29 de janeiro de 2014 11:47
    terça-feira, 28 de janeiro de 2014 10:40
  • Rodrigues,

    A empresa atlas estava com este problema e foi resolvido removendo os logs de produção que são extremamente maiores que o de testes.

    Segue link referente ao quanto isto interesse em rotinas:

    http://www.devmedia.com.br/alta-disponibilidade-com-log-shipping-revista-sql-magazine-100/24709

    Boa sorte

    AT_+

    • Marcado como Resposta Giovani Cr quarta-feira, 29 de janeiro de 2014 11:47
    terça-feira, 28 de janeiro de 2014 11:52
  • M.Rodrigues já tenteou verificar a fragmentação dos indíces entre os servers mais lentos? Com a consulta abaixo você pode verificar isto, estou colocando para pegar indices com mais de 20% de fragmentação no where voce pode mudar:

    SELECT OBJECT_NAME(ind.OBJECT_ID) AS TableName, 
    ind.name AS IndexName, indexstats.index_type_desc AS IndexType, 
    indexstats.avg_fragmentation_in_percent 
    FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) indexstats 
    INNER JOIN sys.indexes ind  
    ON ind.object_id = indexstats.object_id 
    AND ind.index_id = indexstats.index_id 
    WHERE indexstats.avg_fragmentation_in_percent > 20
    ORDER BY indexstats.avg_fragmentation_in_percent DESC

    Para resolver isto clique com o botão direito em cima do indice no SSMS e clique sobre rebuild, mas isto tem que ser agendado em ambiente de produção pode demorar muito dependendo da tabela.
    • Editado Lucas D Santos terça-feira, 28 de janeiro de 2014 13:34
    • Marcado como Resposta Giovani Cr quarta-feira, 29 de janeiro de 2014 11:47
    terça-feira, 28 de janeiro de 2014 13:28

Todas as Respostas

  • Você tem que verificar as transações que devem estar ocorrendo no banco de produção.
    Sua carga de update,insert ou delete pode ser muito alto,por isso a diferença com ctz no seu servidor de teste isso não acontece.
    Pode ser também alguma carga de dados que deve estar ocorrendo,há diversos motivos para isso.

    Bruno

    • Marcado como Resposta Giovani Cr quarta-feira, 29 de janeiro de 2014 11:47
    terça-feira, 28 de janeiro de 2014 10:40
  • Rodrigues,

    A empresa atlas estava com este problema e foi resolvido removendo os logs de produção que são extremamente maiores que o de testes.

    Segue link referente ao quanto isto interesse em rotinas:

    http://www.devmedia.com.br/alta-disponibilidade-com-log-shipping-revista-sql-magazine-100/24709

    Boa sorte

    AT_+

    • Marcado como Resposta Giovani Cr quarta-feira, 29 de janeiro de 2014 11:47
    terça-feira, 28 de janeiro de 2014 11:52
  • M.Rodrigues,

    Este problema é um DeadLock. seu procedimento de manipulação de registros está entrando em concorrência com outras instruções, de outros usuários para às mesmas informações.

    Verifique à possibilidade de executar esta rotina em um horário com menor uso do seu banco de dados. Se isto não for possível, verifique os tipos de hints utilizados pelos sistemas que consomem às informações deste banco. Provavelmente, uma ou mais instruções (SELECT, UPDATE ou DELETE) estão travando sua operação.

    Veja os links abaixo para complementar à informação sobre o assunto:

    http://technet.microsoft.com/pt-br/library/ms188246.aspx

    http://technet.microsoft.com/pt-br/library/ms178104(v=sql.105).aspx

    http://technet.microsoft.com/en-us/library/ms187713.aspx

    http://technet.microsoft.com/en-us/library/ms181714.aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Marcado como Resposta Giovani Cr quarta-feira, 29 de janeiro de 2014 11:47
    terça-feira, 28 de janeiro de 2014 13:26
    Moderador
  • M.Rodrigues já tenteou verificar a fragmentação dos indíces entre os servers mais lentos? Com a consulta abaixo você pode verificar isto, estou colocando para pegar indices com mais de 20% de fragmentação no where voce pode mudar:

    SELECT OBJECT_NAME(ind.OBJECT_ID) AS TableName, 
    ind.name AS IndexName, indexstats.index_type_desc AS IndexType, 
    indexstats.avg_fragmentation_in_percent 
    FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) indexstats 
    INNER JOIN sys.indexes ind  
    ON ind.object_id = indexstats.object_id 
    AND ind.index_id = indexstats.index_id 
    WHERE indexstats.avg_fragmentation_in_percent > 20
    ORDER BY indexstats.avg_fragmentation_in_percent DESC

    Para resolver isto clique com o botão direito em cima do indice no SSMS e clique sobre rebuild, mas isto tem que ser agendado em ambiente de produção pode demorar muito dependendo da tabela.
    • Editado Lucas D Santos terça-feira, 28 de janeiro de 2014 13:34
    • Marcado como Resposta Giovani Cr quarta-feira, 29 de janeiro de 2014 11:47
    terça-feira, 28 de janeiro de 2014 13:28