"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como o Sniffing de parâmetros afeta os métodos de desempenho e otimização de procedimentos armazenados SQL

Como o Sniffing de parâmetros afeta os métodos de desempenho e otimização de procedimentos armazenados SQL

Postado em 2025-04-19
Navegar:408

How Can Parameter Sniffing Impact SQL Stored Procedure Performance, and How Can It Be Optimized?

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 @MyDate
No 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.
Tutorial mais recente Mais>

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