Description du problème : La semaine dernière, j'ai obtenu le message d'erreur ci-dessous dans l'application BO.

Erreur: 8623, Severité: 16, Etat: 1.
Ressources internes du processeur de requêtes insuffisantes. Impossible de créer un plan de requête..


Cause : C'est un événement rare et seulement prévu pour les requêtes extrêmement complexes ou les requêtes qui référencent un très grand nombre de tableaux ou de partitions. Dans mon cas, mon client avait l'erreur suivante lorsqu'il tentait de sélectionner les enregistrements par le biais d'une requête avec un grand nombre d'entrées dans la clause "IN"  (> 10.000).

 

Résolution : Notre recommandation est de simplifier la requête. Vous pouvez essayer reduire le problème avec une table de  travail temporaire, puis ajouter le résultat dans une sous requête..

Voir aussi les remarques du BOL (http://technet.microsoft.com/en-us/library/ms177682.aspx)
“L'inclusion d'un nombre très élevé de valeurs (plusieurs milliers) dans une clause IN peut utiliser des ressources et retourner des erreurs 8623 ou 8632. Pour contourner ce problème, stockez les éléments dans la liste IN dans une table.

 

Autres solutions de contournement : Vous pouvez essayer d'exécuter la requête en utilisant les hint : option (force order), option (hash join), option (merge join), option (querytraceon 4102)  dans un plan guide. .

 

KB intéressantes :
- FIX: A non-yielding scheduler error or an error 8623 occurs when you run a query that contains a large IN clause in SQL Server 2005, SQL Server 2008, or SQL Server 2008 R2
- FIX: Error message when you run a complex query after you install Cumulative Update 3 or Cumulative Update 4 for SQL Server 2005 Service Pack 2: "The query processor ran out of internal resources and could not produce a query plan"

 

Michel Degremont | Premier Field Engineer - SQL Server Core Engineer |