Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 22757|Resposta: 0

[Fonte] Resolve o problema de que os procedimentos armazenados são executados rapidamente, mas as chamadas de programa são lentas

[Copiar link]
Publicado em 21/05/2018 13:55:48 | | |
Nos últimos dois dias, encontrei um problema bastante frustrante: um procedimento armazenado de cerca de 120 linhas é executado no analisador de consultas do SQL Server 2012,
A velocidade é muito ideal, e cerca de 500 registros de dados podem ser filtrados e capturados em menos de 1 segundo.
No entanto, quando chamado no código do programa C#, o timeout da conexão é solicitado. Defina o CommandTimeout para 300, e vai levar cerca de 3 minutos para aparecer.
Verifiquei o código várias vezes e não encontrei erros. O problema permanece.

Análise da causa:
1. Porque a velocidade de execução no analisador de consultas é rápida e a quantidade de dados não é grande.
2. Só a chamada de entrada do programa é lenta.
3. Defina o parâmetro CommandTimeout, e o resultado pode ser exibido, mas vai demorar muito.

Em resumo, conclui-se preliminarmente que o problema está no código C#. Mas não houve ganho após a inspeção.

Confira essas informações no Baidu.
Finalmente encontrei um post de informações semelhante no fórum do CSDN. Um dos internautas disse na resposta: "É possível que o plano de implementação tenha expirado".
Isso realmente me acordou no sonho.

Execute imediatamente no analisador de consultas:

Testando o programa novamente, desta vez finalmente funcionou. A velocidade é muito satisfatória.

Análise da causa:
Como os procedimentos armazenados são pré-compilados, um plano de execução é gerado na primeira execução, e esse plano de execução é usado em execuções subsequentes (a menos que o procedimento armazenado seja especificado para ser recompilado), em vez de gerar um plano de execução toda vez que é executado.
Quando a estrutura do objeto envolvida no procedimento armazenado é ajustada, ou os dados relacionados mudam significativamente, o que pode tornar o plano original inadequado para o status quo atual (expiração do plano de execução), o procedimento armazenado deve ser recompilado.

Por fim, anexe o código do procedimento armazenado:







Anterior:Compartilhe um único código de código promocional do APP, adaptativo, muito bonito e generoso!
Próximo:Framework de Código Aberto C# (Reimpressão)
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com