SQL Stored Procedimento Otimização do Plano de Execução: Snifting do parâmetro e seu impacto
O desempenho dos procedimentos armazenados SQL pode ser significativamente afetado por um fenômeno conhecido como parâmetro sniffing. Isso ocorre quando o mecanismo de banco de dados compila o plano de execução de um procedimento armazenado com base nos valores dos parâmetros de entrada fornecidos no momento da compilação. @Mydate DateTime = null COMO Se @mydate for null set @mydate = current_timestamp - Faça algo usando @mydate
neste cenário, se @mydate for passado como nulo durante a compilação inicial, o banco de dados otimiza o plano de execução para este valor. No entanto, as chamadas subsequentes para o procedimento com outros valores de entrada podem resultar em mau desempenho, mesmo que esses valores também sejam nulos. O procedimento armazenado pode variar drasticamente, dependendo dos valores de entrada passados, levando a tempos de execução imprevisíveis. Sniffing deu errado
CREATE PROCEDURE MyProc @MyDate DATETIME = NULL AS IF @MyDate IS NULL SET @MyDate = CURRENT_TIMESTAMP -- Do Something using @MyDateNo caso mencionado, o plano de execução gerado para @mydate foi ruim, mesmo quando o valor usado era nulo. Esse comportamento é incomum e sugere um problema com o Sniffing do parâmetro. @Mydate DateTime = null COMO Declare @mydate_copy datetime Definir @mydate_copy = @mydate Se @mydate_copy for null set @mydate_copy = current_timestamp - Faça algo usando @mydate_copy
Insight sobre a edição
O problema subjacente no SQL Server 2005 é um problema conhecido com o parâmetro Sniffing em certos níveis de patch. No SQL Server 2008, a cláusula otimizada para desconhecida pode ser usada para resolver esses problemas. Eficiente.Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3