Mise à jour des statistiques parallèles


14

Dans SQL Server 2008 ou version ultérieure, est-ce UPDATE STATISTICS WITH FULLSCANune opération à thread unique ou peut-elle utiliser le parallélisme? Que diriez-vous de mettre à jour les statistiques avec l'échantillonnage par défaut - peut-il utiliser le parallélisme? Je ne vois pas d'option spécifiant MAXDOPavec des statistiques de mise à jour.

Réponses:


22

La mise à jour parallèle des statistiques est disponible depuis SQL Server 2005. Elle est documentée dans l'article TechNet, «Statistiques utilisées par l'optimiseur de requête dans Microsoft SQL Server 2005» :

Extrait d'article

Lorsqu'une analyse complète est effectuée (qu'elle soit explicitement demandée ou non), la requête interne générée pour la collecte de données a la forme générale:

SELECT
    StatMan([SC0])
FROM 
(
    SELECT TOP 100 PERCENT
        [Column] AS [SC0]
    FROM [Table] WITH (READUNCOMMITTED)
    ORDER BY [SC0]
) AS _MS_UPDSTATS_TBL
OPTION (MAXDOP 16)

Remarquez le MAXDOP conseil là-bas (bien qu'il n'y ait aucun moyen pour un utilisateur de spécifier le conseil manuellement). Lorsque des statistiques échantillonnées sont collectées, la requête interne utilise la TABLESAMPLEclause, ce qui empêche le parallélisme. Le moteur génère également un MAXDOP 1indice sur la requête interne, qui est un peu redondant.

Si jamais vous avez besoin de réduire le parallélisme, l' MAXDOPindication dans la requête interne peut être remplacée à l'aide de du gouverneur de ressources (Enterprise uniquement).

SQL Server 2016 ajoute une mise à jour parallèle des statistiques échantillonnées .


1

À partir de SQL Server 2016 SP2, vous pouvez utiliser l' MAXDOPoption.

La mise à jour ajoute la prise en charge de l'option MAXDOP pour les instructions CREATE STATISTICS et UPDATE STATISTICS :

Cette mise à jour ajoute la prise en charge de l'option MAXDOP pour les instructions CREATE STATISTICS et UPDATE STATISTICS dans Microsoft SQL Server 2016 et 2017. Cela vous permet de remplacer le paramètre par défaut pour le degré maximal de parallélisme (MAXDOP) spécifié au niveau de la base de données ou du serveur.

Remarque: Le degré de parallélisme résultant est limité par le paramètre MAX_DOP du groupe de charge de travail si le gouverneur de ressources est utilisé.

Par exemple, supposons que la table Sales.SalesOrderDetail est utilisée et que plusieurs statistiques y ont déjà été créées. Dans ce cas, le script suivant met à jour chaque statistique avec un degré de parallélisme égal à 8.

UPDATE STATISTICS Sales.SalesOrderDetail WITH MAXDOP = 8

-3

UPDATE STATISTICS n'a aucun type de parallélisme interne. Peu importe que vous exécutiez avec FULLSCAN ou SAMPLING. Bien sûr, vous pouvez exécuter plusieurs commandes UPDATE STATISTICS à la fois, chacune sur une connexion différente, via plusieurs travaux de l'Agent SQL ou un autre dispositif. Selon votre situation exacte avec le matériel et les données, vous pouvez constater que la simple réindexation des tables est plus rapide que UPDATE STATISTICS avec FULLSCAN et peut-être une meilleure option.


Je m'excuse pour la note, mais vous ne savez pas de quoi vous parlez. À partir de ce livre blanc msdn.microsoft.com/en-us/library/dd535534(v=sql.100).aspx " Collecte de statistiques parallèle pour fullscan: pour les statistiques collectées avec fullscan, la création d'un seul objet de statistiques peut se faire en parallèle pour des tables non partitionnées et partitionnées. " Cependant, je ne vois pas de parallélisme lorsque j'utilise UPDATE STATISTICS avec une analyse complète sur une table de 30 millions de lignes
SQL Learner

De plus, la mise à jour des statistiques prend le verrouillage de stabilité du schéma, donc si vous exécutez d'autres statistiques de mise à jour, elle attendra jusqu'à ce que la précédente se termine.
SQL Learner

4
@SQLLearner: Aucune infraction, mais quelle que soit l'exactitude de cette réponse, pourquoi posez-vous cette question si vous avez lu ce livre blanc? Il vous donne une réponse à tout ce que vous avez demandé. Si vous ne voyez pas de parallélisme pour votre scénario spécifique, veuillez modifier la question pour l'indiquer, ainsi que tout autre détail pertinent.
Jon Seigel

Jon Seigel, a trouvé et lu le livre blanc après avoir posté la question, mais il n'est pas sûr que la mise à jour des statistiques puisse utiliser le parallélisme.
SQL Learner

4
Vous avez raison, en ce qui concerne le livre blanc et sql2008. Je viens de lire ce livre blanc; l'information dans ma tête est obsolète. J'ai eu de nombreux problèmes avec sql2005 ou peut-être même sql2000 en ce qui concerne la réindexation, la mise à jour des statistiques, FULLSCAN vs SAMPLE, le temps requis pour les travaux et la qualité stochastique des données sur les pages de statistiques. Je suppose que toute cette douleur est de l'eau sous le pont maintenant. Je dirais que vous pouvez exécuter UPDATE STATS sur différentes tables en parallèle, mais cela semble plus difficile que cela en vaut la peine et vous pouvez avoir trop de conflits d'E / S pour que cela en vaille la peine.
Détroit de Darin
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.