Traitement des requêtes parallèles dans une procédure stockée spécifique

J'ai lu sur le parallélisme dans un livre consacré à l'oracle, où ils mentionnent que vous pouvez faire quelque chose comme ALTER TABLE Order PARALLEL 3; Ma question est:

Si j'ai une requête qui récupère des données basées sur une search et que je veux append un peu de parallélisme, comment pourrais-je procéder dans Microsoft SQL Server? Par exemple:

 ALTER PROC MY_SP @SOMEPARAMETER NVARCHAR(2000) AS SELECT DESCRIPTION FROM ORDERS WHERE DESCRIPTION LIKE '%' + @SOMEPARAMETERHERE +'%' 

Comment pourrais-je implémenter le parallélisme à cette requête?

NOTE: Excusez si erreur de syntaxe, c'est juste un exemple de ce que je voudrais réaliser.

Le parallélisme SQL Server est déterminé par deux valeurs, le degré de parallélisme maximal (MAXDOP) et le seuil de coût pour le parallélisme. Le MAXDOP peut être défini au niveau du server comme valeur par défaut et vous pouvez utiliser un indicateur de requête. Définir le MAXDOP à 0 signifie que l'optimiseur SQL Server considérera utiliser autant de process parallèles que possible si la requête passe le seuil de coût pour le parallélisme. Si vous définissez MAXDOP sur 1, il supprime plus ou less le parallélisme des options. Tout autre nombre agit comme une limite, donc si vous avez, par exemple, 4 processeurs, mais que vous définissez le MAXDOP sur 2, alors seulement deux seront utilisés pour une requête donnée (pas nécessairement les deux mêmes, seulement deux).

Le vrai kicker est le seuil de coût pour le parallélisme. La valeur par défaut est 5, ce qui est franchement trop bas. L'exécution parallèle de requêtes est une opération très coûteuse, qui consiste à scinder les threads, à tout traiter, à rassembler les threads set, de sorte que vous ne voulez que l'exécuter sur des requêtes onéreuses. Pour un système OLTP, je suggère de faire passer cette valeur jusqu'à 40 et tester à partir de là. Pour un système de reporting, je suggère également de dépasser la valeur de 25 et de tester à partir de ce point.

Votre requête, sans JOINs et une clause WHERE simple, bien que non-sargeable, va probablement avoir un coût estimé très bas. Il est peu probable qu'il dépasse 1, mais si vous voulez juste expérimenter le parallélisme, jetez un oeil au plan d'exécution de la requête pour déterminer si son coût est supérieur à 1. Si c'est le cas, abaissez votre seuil de coût à 1 et fournir un indice MAXDOP pour la requête. Vous devriez alors voir l'exécution parallèle. Mais observez à quelle vitesse il s'exécute et combien de ressources il utilise et comparez-le à l'exécution non parallèle. Vous voulez être sûr que cela va fonctionner pour vous d'une manière positive.