AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 530
Accepted
Michael Riley - AKA Gunny
Michael Riley - AKA Gunny
Asked: 2011-01-12 06:04:59 +0800 CST2011-01-12 06:04:59 +0800 CST 2011-01-12 06:04:59 +0800 CST

Como você limpa todos os planos de consulta antigos do Microsoft SQL Server?

  • 772

Temos um aplicativo pronto para uso que usa um banco de dados Microsoft SQL. Dentro desta aplicação escolhemos vários critérios de seleção para cada relatório. Esse aplicativo executa esses relatórios.

Acredito que temos um problema de plano de consulta. O primeiro relatório que executamos todos os dias é muito rápido, 7 minutos. Qualquer relatório executado após o primeiro relatório leva mais de uma hora.

Todas as noites, executamos uma tarefa agendada que para e inicia o SQL Server Agent e o SQL Server. Existem aproximadamente 25 outros bancos de dados nesta única instância do SQL Server. Nenhum outro banco de dados tem problemas de desempenho, apenas o produto de prateleira que mencionei anteriormente.

Existe uma maneira de limpar todos os planos de consulta que o SQL Server possui atualmente na memória?

Como posso fazer isso sem impactar cerca de 30 usuários que dependem de outros bancos de dados no mesmo servidor?

sql-server performance
  • 3 3 respostas
  • 19694 Views

3 respostas

  • Voted
  1. SQLRockstar
    2011-01-12T13:24:24+08:002011-01-12T13:24:24+08:00

    Você fez duas perguntas aqui. Primeiro, você deseja saber se pode remover todos os planos armazenados na memória para uma instância do SQL. Isso é feito com DBCC FREEPROCCACHE como sugeriu Matt M.

    A segunda pergunta que você fez é "Como posso fazer isso sem impactar cerca de 30 usuários que dependem de outros bancos de dados no mesmo servidor?". A resposta curta é "você não pode". Se você remover todos os planos, os outros usuários que dependem de planos na memória provavelmente sofrerão um impacto no desempenho.

    A solução alternativa para isso requer alguma intervenção manual. Você pode usar DBCC FREEPROCCACHE para remover planos específicos, desde que tenha o plan_handle.

    Pelo que você está descrevendo acima, parece um problema de plano, mas não tenho certeza de que remover planos seja a resposta. Eu apontaria você na direção da detecção de parâmetros antes de pensar em remover planos:

    Link

    Você deve ser capaz de otimizar as consultas em vez de brincar com DBCC FREEPROCCACHE de forma programada. Também aconselho que você gaste tempo analisando os eventos de espera de sua instância.

    • 13
  2. Matt M
    2011-01-12T06:11:31+08:002011-01-12T06:11:31+08:00

    DBCC FREEPROCCACHE

    Usando este comando, você pode limpar todo o cache do procedimento para um único comando. Definitivamente, leia a documentação antes de usar este comando. Leia a seção Observações algumas vezes.

    A limpeza do cache de procedimentos fará com que os caches de procedimentos armazenados sejam recompilados no próximo uso. Isso pode afetar o desempenho. Use com cuidado!

    Matt

    • 7
  3. Best Answer
    garik
    2011-01-12T14:30:27+08:002011-01-12T14:30:27+08:00

    Peço desculpas pela minha resposta anterior.

    1) Adicione a opção WITH RECOMPILE à instrução CREATE PROCEDURE se você souber que sua consulta irá variar sempre que for executada a partir do procedimento armazenado. A opção WITH RECOMPILE impede a reutilização do plano de execução do procedimento armazenado, portanto, o SQL Server não armazena em cache um plano para esse procedimento e o procedimento é recompilado em tempo de execução. Usar a opção WITH RECOMPILE pode melhorar o desempenho se sua consulta variar toda vez que for executada a partir do procedimento armazenado porque, nesse caso, o plano de execução errado não será usado.

    2) Você deve criar um guia de plano que use uma dica de consulta USE PLAN para cada tipo de consulta (todo tipo de solicitação de procedimento armazenado) para forçar o plano de execução.

    Aqui está um artigo sobre o plano de execução que pode ajudar.

    • 7

relate perguntas

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve