Renifleur de paramètres et performances du plan d'exécution de procédure stockée
Une procédure stockée rencontre des problèmes de performances lorsqu'elle est exécutée avec @MyDate comme NULL, même si le le plan d’exécution généré n’est pas optimal. Ce problème persiste, que @MyDate soit réellement NULL ou défini sur l'horodatage actuel par une instruction IF.
On pense que le plan d'exécution problématique est dû au reniflage de paramètres, où SQL Server compile la procédure stockée en fonction de les valeurs des paramètres fournies au moment de la compilation. Cependant, dans ce cas, le problème se pose même lorsque le paramètre est NULL, ce qui contredit les scénarios typiques de reniflage de paramètres.
La désactivation du reniflage de paramètres en usurpant le paramètre (@MyDate_Copy) résout le problème. Cela suggère que le serveur utilise un plan d'exécution incorrect basé sur une valeur NULL arbitraire.
Aperçu du phénomène
Selon la réponse acceptée, le reniflage de paramètres dans SQL Server 2005 est connu pour présenter des problèmes pouvant conduire à de mauvais plans d'exécution. On suppose que le serveur génère un plan inefficace basé sur des valeurs de paramètres non représentatives, même lorsque le paramètre est NULL. De plus, des problèmes avec les LEFT JOIN et les NULL ont été observés, qui ont été résolus en les remplaçant par NOT IN ou NOT EXISTS.
Solution
Pour SQL Server 2008, le L'option OPTIMISER POUR INCONNU peut être utilisée pour atténuer le problème.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!