[2016] Cardianality Estimator - HashMatch Warning
Bonjour,
Suite à la migration de bases SQLServer 2008 sur un SQLServer 2016 SP2, je rencontre un problème de perf sur une requête.
Ayant déjà rencontrer ce genre de problème, j'ai rapidement vu que les statistiques n'était pas correctes même après les avoir toutes recalculées.
Dans l'urgence, j'ai donc contourner le problème en forçant l'estimateur de cardinalités précédent grâce à l'option : USE HINT('FORCE_LEGACY_CARDINALITY_ESTIMATION') et les temps sont redevenus correctes.
Mais, la volonté de l'entreprise est de retirer le plus rapidement possible cette option. J'ai donc creusé pour trouver les différences dans les plans d’exécution.
Je me suis aperçu que le nouvel estimateur utilisait un "Hash Match" avec un warning "Operator used tempdb to spill data during execution with spill level 1 and 2 spilled thread(s)".
L'ancien lui n'utilisait que des Nested Loops.
Avez vous des idées pour corriger ce problème, sachant que la mise en place d'index sur la table concernée m'est prohibée par l'équipe BI ?
Merci d'avance :)