Aujourd'hui encore, j'ai un problème MAJEUR avec ce qui semble être reniflage de paramètres dans SQL Server 2005.À un moment donné de votre carrière avec SQL Server, est-ce que le reniflage de paramètre saute et attaque?
J'ai une requête comparant certains résultats avec de bons résultats connus. J'ai ajouté une colonne aux résultats et les bons résultats connus, de sorte que chaque mois, je peux charger un nouveau mois de résultats des deux côtés et de comparer uniquement le mois en cours. La nouvelle colonne est la première dans l'index clusterisé, de sorte que les nouveaux mois vont ajouter à la fin.
-je ajouter un critère à mon WHERE
article - ce qui est généré par le code, il est donc une constante littérale:
WHERE DATA_DT_ID = 20081231
- Ce qui est redondant parce que tous sont DATA_DT_ID 20.081.231 en ce moment.
Les performances vont au pot. De 7 secondes pour comparer environ 1.5m lignes à 2 heures et rien de terminer. Exécution du droit SQL généré dans SSMS - pas de SP. J'ai utilisé SQL Server depuis 12 ans maintenant et je n'ai jamais eu autant de problèmes avec le reniflage de paramètres que j'ai eu sur ce serveur de production depuis octobre (build build 9.00.3068.00). Et dans tous les cas, ce n'est pas parce qu'il a été exécuté la première fois avec un paramètre différent ou que la table a été modifiée. Ceci est une nouvelle table et il est exécuté uniquement avec ce paramètre ou aucune clause WHERE
.
Et, non, je n'ai pas accès DBA, et ils ne m'ont pas donné assez de droits pour voir les plans d'exécution.
Au point où je ne suis pas sûr de pouvoir gérer ce système avec les utilisateurs de SQL Server avec seulement quelques années d'expérience.
MISE À JOUR Il s'avère que, bien que les statistiques prétendent être à jour, l'exécution de UPDATE STATISTICS WITH FULLSCAN résout le problème.
MISE A JOUR FINAL Même avec recréer la SP, en utilisant des statistiques de recompiler et UPDATE, il est apparu la requête devait être réécrite d'une manière différente d'utiliser un PAS au lieu d'un LEFT JOIN avec contrôle NULL.
Y a-t-il une question ici? Ça sonne comme un reproche, votre clause où n'utilise pas de paramètres – JoshBerke
Oui, les questions sont pourquoi après toutes ces années je suis confronté à ces problèmes tout le temps maintenant - je pense que la réponse est que sur ce serveur les statistiques ne sont pas gérées comme mes propres serveurs normalement ou comme mes serveurs de développement et de test sont. –
Je crois comprendre que c'est fondamentalement le même problème.Les constantes sont paramétrées et les plans d'exécution construits en fonction des estimations de lignes attendues. –