parameter sniffing

SQL Server: Parameter Sniffing

In questo articolo parlo del fenomeno noto come Parameter Sniffing. Per ottimizzare le performance, Sql Server potrebbe memorizzare il piano di esecuzione di una stored procedure alla sua prima esecuzione. Il parameter sniffing è quel fenomeno per cui lo stesso piano di esecuzione sarà utilizzato anche nei successivi run, nonostante ne esisterebbero altri più efficienti al variare dei valori dei parametri passati in input.

Pensiamo ad esempio ad una stored procedure che contiene una query che filtra su una colonna utilizzando un parametro di input. Supponiamo inoltre che tale colonna sia indicizzata con un nonclustered index. In base alle statistiche del database, il piano di esecuzione migliore per la query potrebbe essere diverso al variare del parametro: ad esempio in alcuni casi potrebbe essere previsto l’utilizzo dell’indice non clustered (se il filtro è abbastanza selettivo), mentre in altri no (se i costi delle operazioni di key o rid lookup sono troppo alti).

Tuttavia, il fatto che Sql Server memorizzi il piano di esecuzione avrà come conseguenza l’utilizzo dell’algoritmo scelto per il primo parametro in tutti i casi. Per evitare tale comportamento possiamo valutare di utilizzare l’opzione RECOMPILE nella query che utilizza il parametro.

Questa implementazione risulta particolarmente utile nei casi in cui i parametri assumono valori con cardinalità molto differenti all’interno delle rispettive colonne.

 

Corsi correlati

Se cerchi un corso che tratti tematiche avanzate su Sql Server puoi visitare questa pagina https://www.yimp.it/funzionalita-avanzate-progettazione-sql-server-preparazione-esame-70-762/.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Torna su