none
Memória SQL Server 2008 RRS feed

  • Pergunta

  • Olá pessoal, boa tarde.

    Temos uma aplicação fiscal aqui na empresa que usa o SQL Server 2008 como banco de dados. Tenho notado que após o usuário acionar um determinado processo, o SQL Server aloca toda a memória e e mesmo após o término do processamento, ele não devolve para o sistema operacional, deixando todo o sistema lento. Após um reboot na máquina ou as vezes um restart no serviço do SQL Server resolve o problema. Acredito não ser nada com o processador pois ele não passa de 30% de uso.

    O pessoal que desenvolve a aplicação diz que não é nada com o sistem . Se vocês puderem indicar scripts, dmv´s ou algo que eu possa identificar o que pode estar ocorrendo, ficarei grato.

    Abraço

    Alex Sander

    quinta-feira, 11 de novembro de 2010 16:31

Respostas

  • Alex,

    Neste momento a minha dica é atender as solicitações indicadas pelo Tunning Advisor!!!!


    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]
    terça-feira, 16 de novembro de 2010 18:17
    Moderador
  • Alex

    tenho um script que me ajuda bastante (para sql 2005 ou superior com compatibilidade 90 ou superior)

    SELECT TOP (100)
      isnull(DB_NAME(st.DBID),'Ad Hoc') AS 'DatabaseName',
      'CPU'= total_worker_time/execution_count,
      'DURATION'= total_elapsed_time/execution_count,
      'READS'= total_logical_reads/execution_count,
      st.ObjectID, 
      qs.sql_handle, qs.statement_start_offset, qs.statement_end_offset, qs.plan_generation_num, qs.plan_handle, qs.creation_time, 
      qs.last_execution_time, qs.execution_count, qs.total_worker_time, qs.last_worker_time, qs.min_worker_time, qs.max_worker_time,
      qs.total_physical_reads, qs.last_physical_reads, qs.min_physical_reads, qs.max_physical_reads, qs.total_logical_writes, 
      qs.last_logical_writes, qs.min_logical_writes, qs.max_logical_writes, qs.total_logical_reads, qs.last_logical_reads, 
      qs.min_logical_reads, qs.max_logical_reads, qs.total_clr_time, qs.last_clr_time, qs.min_clr_time, qs.max_clr_time, qs.total_elapsed_time, 
      qs.last_elapsed_time, qs.min_elapsed_time, qs.max_elapsed_time,
    
      SUBSTRING(st.text, (qs.statement_start_offset/2)+1,     
           ((CASE qs.statement_end_offset
            WHEN -1 THEN DATALENGTH(st.text)
           ELSE qs.statement_end_offset
           END - qs.statement_start_offset)/2) + 1) AS statement_text, 
      qp.query_plan, qs.query_hash, qs.query_plan_hash
        
    FROM sys.dm_exec_query_stats AS qs
      CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
      CROSS apply sys.dm_exec_query_plan (qs.plan_handle) AS qp
    order by CPU desc, DURATION desc, READS desc
    

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    quarta-feira, 17 de novembro de 2010 11:58
    Moderador

Todas as Respostas

  • E aí Alex,

    Verifique via profiler quais as tabelas envolvidas no processo. Pode ser que uma simples reindexação dos indices e/ou atualização das estatisticas resolvam o problema.

    Avalie também a necessidade de criação de indices. Dependendo do que a aplicação está fazendo, pode ser de grande ajuda.

    Att.,


    Marco Antônio Pinheiro / MCTS - Database Developer 2008 http://marcoantoniopinheiro.blogspot.com Se o post foi útil, não esqueça de marcá-lo.
    sexta-feira, 12 de novembro de 2010 04:13
  • Olá Marco Antônio, tudo bem?

    A reindexação e atualização das estatisticas eu já havia feito. :(...

    Vou fazer um trace hoje....

    Obrigado pela força.

     

    sexta-feira, 12 de novembro de 2010 12:49
  • Alex,

    Você já pensou em implementar um Plano de Manutenção ou realizar um Tunning sobre esta base de dados?


    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]
    domingo, 14 de novembro de 2010 00:57
    Moderador
  • Olá Junior,

    O plano de manutenção atual contempla update de estatisticas, rebuild de indices, checagem da saúde do banco, além do backup. Você tem alguma dica ou exemplo pra me passar?

    Fiz um trace do banco e o Tunning Advisor preve um aumento de 31% de performance criando alguns indices.

    Abraço

    terça-feira, 16 de novembro de 2010 09:36
  • Alex,

    Neste momento a minha dica é atender as solicitações indicadas pelo Tunning Advisor!!!!


    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]
    terça-feira, 16 de novembro de 2010 18:17
    Moderador
  • Alex

    tenho um script que me ajuda bastante (para sql 2005 ou superior com compatibilidade 90 ou superior)

    SELECT TOP (100)
      isnull(DB_NAME(st.DBID),'Ad Hoc') AS 'DatabaseName',
      'CPU'= total_worker_time/execution_count,
      'DURATION'= total_elapsed_time/execution_count,
      'READS'= total_logical_reads/execution_count,
      st.ObjectID, 
      qs.sql_handle, qs.statement_start_offset, qs.statement_end_offset, qs.plan_generation_num, qs.plan_handle, qs.creation_time, 
      qs.last_execution_time, qs.execution_count, qs.total_worker_time, qs.last_worker_time, qs.min_worker_time, qs.max_worker_time,
      qs.total_physical_reads, qs.last_physical_reads, qs.min_physical_reads, qs.max_physical_reads, qs.total_logical_writes, 
      qs.last_logical_writes, qs.min_logical_writes, qs.max_logical_writes, qs.total_logical_reads, qs.last_logical_reads, 
      qs.min_logical_reads, qs.max_logical_reads, qs.total_clr_time, qs.last_clr_time, qs.min_clr_time, qs.max_clr_time, qs.total_elapsed_time, 
      qs.last_elapsed_time, qs.min_elapsed_time, qs.max_elapsed_time,
    
      SUBSTRING(st.text, (qs.statement_start_offset/2)+1,     
           ((CASE qs.statement_end_offset
            WHEN -1 THEN DATALENGTH(st.text)
           ELSE qs.statement_end_offset
           END - qs.statement_start_offset)/2) + 1) AS statement_text, 
      qp.query_plan, qs.query_hash, qs.query_plan_hash
        
    FROM sys.dm_exec_query_stats AS qs
      CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
      CROSS apply sys.dm_exec_query_plan (qs.plan_handle) AS qp
    order by CPU desc, DURATION desc, READS desc
    

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    quarta-feira, 17 de novembro de 2010 11:58
    Moderador
  • Junior, apliquei as sugestões do DTA.

    Marcelo, obrigado pelo script.

    Vou monitorar.

     

    Obrigado pessoal.

    sexta-feira, 19 de novembro de 2010 17:05