Symptômes
Prenons le scénario suivant :
- Vous disposez d’une table Filestream très volumineuse.
- Vous exécutez une requête de suppression de lignes dans la table Filestream qui crée un plan de requête coûteux, tel qu’un plan de requête filtré par une jointure interne à une autre table volumineuse dans le système.
- L’optimiseur de requête choisit un plan d’exécution parallèle.
Dans ce scénario, une assertion se produit et vous pouvez recevoir des messages d’erreur qui ressemblent à ce qui suit dans le journal des erreurs SQL Server :
DateTime spid SpidNumber Erreur : 5553, Gravité : 20, État : 6.
DateTime spid SpidNumber SQL Server erreur interne. Le gestionnaire FILESTREAM ne peut pas continuer avec la commande actuelle.
État
Microsoft a confirmé qu’il s’agissait d’un problème dans les produits Microsoft répertoriés dans la section « S’applique à ».
Résolution
Le problème est résolu dans les mises à jour cumulatives suivantes pour SQL Server :
À propos des mises à jour cumulatives pour SQL Server :
Chaque nouvelle mise à jour cumulative pour SQL Server contient tous les correctifs logiciels et tous les correctifs de sécurité inclus dans la mise à jour cumulative précédente. Consultez les dernières mises à jour cumulatives pour SQL Server :
Solution de contournement
Pour contourner ce problème, vous pouvez utiliser la méthode suivante :
Déplacez la requête de jointure interne vers une instruction distincte et enregistrez les résultats dans une table temporaire. Exécutez ensuite la requête de suppression filtrée par les entrées de la table temporaire. En outre, vous pouvez augmenter le seuil de coût pour le parallélisme afin de forcer l’optimiseur à sérialiser le plan de requête.
Par exemple :
SELECT RefTable.Alias INTO #T FROM DB.dbo.OuterTable INNER JOIN DB.dbo.RefTable ON RefTable.Alias = OuterTable.Alias
WHERE OuterTable.Alias > 30006 ET OuterTable.Alias < 30010
SUPPRIMER DE DB.dbo. [Table] WHERE Alias IN (SELECT * FROM #T)
Références
En savoir plus à propos de la terminologie utilisée par Microsoft pour décrire les mises à jour logicielles.