Lorsqu'un index columnstore est utilisé dans une requête, SQL Server peut utiliser le mode batch. La documentation est mince sur ce qui peut fonctionner en mode batch et ce qui ne peut pas. Veuillez regarder le plan de requête suivant (motivant) où un nombre surprenant de choses s'exécute en mode batch (vert):
(Il s'agit d'un plan estimé. J'ai utilisé le plan réel pour vérifier que le mode d'exécution réel est bien un traitement par lots.)
Notez que seul le côté génération de T1 utilise un index columnstore. Toutes les entrées de sonde (T2 et T3) sont des magasins en ligne. Leurs données semblent passer en mode batch. J'ai toujours pensé que le mode batch est utilisé pour le flux de données qui ne traverse que le côté sonde.
Il semble que les données puissent passer en mode batch même si elles ne proviennent pas d'un index columnstore. Cela pose la question: pourquoi SQL Server n'utilise-t-il pas également le mode de traitement par lots pour les requêtes en ligne uniquement? Pourrait être bénéfique pour certains d'entre eux. L'utilisation d'un index columnstore est-elle une exigence formelle nécessaire pour que SQL Server considère le mode batch? Pourrions-nous peut-être ajouter une table factice à zéro ligne avec un index columnstore pour induire le mode batch et réaliser des gains de performances?
Qu'est-ce qui peut fonctionner exactement en mode batch à partir de SQL Server 2014?
Réponses:
SQL Server 2014 ajoute les éléments suivants à la liste d'origine des opérateurs en mode batch:
SQL Server 2012 était très limité dans son utilisation des opérateurs par lots. Les plans en mode batch avaient une forme fixe, s'appuyaient sur des heuristiques et ne pouvaient pas redémarrer le mode batch une fois la transition vers le traitement en mode ligne effectuée.
SQL Server 2014 ajoute le mode d'exécution (batch ou ligne) à la structure de propriétés générales de l'optimiseur de requête, ce qui signifie qu'il peut envisager de passer en mode batch et hors du mode batch à tout moment du plan. Les transitions sont implémentées par des adaptateurs de mode d'exécution invisibles dans le plan. Ces adaptateurs ont un coût qui leur est associé pour limiter le nombre de transitions introduites lors de l'optimisation. Ce nouveau modèle flexible est appelé exécution en mode mixte.
Les adaptateurs de mode d'exécution peuvent être vus dans la sortie de l'optimiseur (mais malheureusement pas dans les plans d'exécution visibles par l'utilisateur) avec TF 8607. non documenté. Par exemple, ce qui suit a été capturé pour une requête comptant des lignes dans un magasin de lignes:
C'est aujourd'hui, oui. Une raison possible de cette restriction est qu'elle limite naturellement le traitement en mode batch à Enterprise Edition.
Oui, ça marche. J'ai également vu des gens se joindre à plusieurs avec un index columnstore en cluster à une seule ligne pour cette raison. La suggestion que vous avez faite dans les commentaires de joindre à gauche à une table factice columnstore sur false est formidable.
Plan avec jointure externe gauche factice:
Vrai.
Les meilleures sources officielles d'informations sont les index des colonnes et le réglage des performances de SQL Server .
Le MVP SQL Server Niko Neugebauer a une série formidable sur columnstore en général ici .
Il existe de bons détails techniques sur les modifications de 2014 dans le document de recherche de Microsoft, Améliorations des magasins de colonnes SQL Server (pdf), bien qu'il ne s'agisse pas de la documentation officielle du produit.
la source