|
|
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)
|