Aktualisierung der Parallelstatistik


14

Handelt es sich in SQL Server 2008 oder höher um UPDATE STATISTICS WITH FULLSCANeinen einzelnen Thread-Vorgang, oder kann Parallelität verwendet werden? Wie wäre es mit der Aktualisierung von Statistiken mit Standardabtastung - kann Parallelität verwendet werden? Ich sehe keine Option, die MAXDOPAktualisierungsstatistiken angibt .

Antworten:


22

Das Update für parallele Statistiken ist seit SQL Server 2005 verfügbar. Es ist im TechNet-Artikel "Vom Abfrageoptimierer in Microsoft SQL Server 2005 verwendete Statistiken" dokumentiert :

Artikelauszug

Wenn ein vollständiger Scan durchgeführt wird (ob explizit angefordert oder nicht), hat die für die Datenerfassung generierte interne Abfrage die allgemeine Form:

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)

Beachten Sie den MAXDOPHinweis dort (obwohl es für einen Benutzer nicht möglich ist, den Hinweis manuell anzugeben). Wenn Stichprobenstatistiken erfasst werden, verwendet die interne Abfrage die TABLESAMPLEKlausel, die Parallelität verhindert. Die Engine generiert auch einen MAXDOP 1Hinweis auf die interne Abfrage, die etwas redundant ist.

Wenn Sie jemals die Parallelität reduzieren müssen , kann der MAXDOPHinweis in der internen Abfrage mit Resource Governor überschrieben werden (nur Enterprise) .

SQL Server 2016 fügt ein Update für parallel abgetastete Statistiken hinzu .


1

Ab SQL Server 2016 SP2 können Sie die MAXDOPOption verwenden.

Das Update bietet Unterstützung für die MAXDOP-Option für die Anweisungen CREATE STATISTICS und UPDATE STATISTICS :

Mit diesem Update wird die MAXDOP-Option für die Anweisungen CREATE STATISTICS und UPDATE STATISTICS in Microsoft SQL Server 2016 und 2017 unterstützt. Auf diese Weise können Sie die Standardeinstellung für den maximalen Parallelitätsgrad (MAXDOP) überschreiben, die auf Datenbank- oder Serverebene angegeben ist.

Anmerkung: Der resultierende Parallelitätsgrad wird durch die Einstellung der Workload-Gruppe MAX_DOP begrenzt, wenn Resource Governor verwendet wird.

Angenommen, die Tabelle Sales.SalesOrderDetail wird verwendet und es wurden bereits mehrere Statistiken erstellt. In diesem Fall aktualisiert das folgende Skript jede Statistik mit einem Parallelitätsgrad von 8.

UPDATE STATISTICS Sales.SalesOrderDetail WITH MAXDOP = 8

-3

UPDATE STATISTICS weist keinerlei interne Parallelität auf. Es spielt keine Rolle, ob Sie mit FULLSCAN oder SAMPLING arbeiten. Natürlich können Sie mehrere UPDATE STATISTICS-Befehle gleichzeitig über mehrere SQL Agent-Jobs oder eine andere Einrichtung auf einer anderen Verbindung ausführen. Abhängig von Ihrer genauen Situation mit Hardware und Daten stellen Sie möglicherweise fest, dass die einfache Neuindizierung der Tabellen schneller ist als die Aktualisierung von STATISTICS mit FULLSCAN und möglicherweise eine bessere Option.


Ich entschuldige mich für die Abwertung, aber Sie haben keine Ahnung, wovon Sie sprechen. In diesem Whitepaper wird msdn.microsoft.com/de-de/library/dd535534(v=sql.100).aspx "Parallele Erfassung von Statistiken für den vollständigen Scan: Bei Statistiken, die mit dem vollständigen Scan erfasst wurden, kann für parallel ein einzelnes Statistikobjekt erstellt werden nicht partitionierte und partitionierte Tabellen. " Ich kann jedoch keine Parallelität erkennen, wenn ich UPDATE STATISTICS mit vollständiger Überprüfung der Tabelle mit 30 Millionen Zeilen verwende
SQL-Lerner

Außerdem übernimmt update stat die Schemastabilitätssperre. Wenn Sie also andere Update-Statistiken ausführen, wird gewartet, bis eine frühere abgeschlossen ist.
SQL Learner

4
@SQLLearner: Keine Beleidigung, aber ungeachtet der Richtigkeit dieser Antwort, warum stellen Sie diese Frage, wenn Sie dieses Whitepaper gelesen haben? Es gibt Ihnen eine Antwort auf alles, was Sie gefragt haben. Wenn Sie für Ihr spezifisches Szenario keine Parallelität feststellen, bearbeiten Sie die Frage und geben Sie diese sowie weitere relevante Details an.
Jon Seigel

Jon Seigel hat das Whitepaper gefunden und gelesen, nachdem er die Frage gestellt hatte. Er war sich jedoch noch nicht sicher, ob Update Statis Parallelität verwenden kann.
SQL Learner

4
Sie haben Recht, was das Whitepaper und SQL2008 betrifft. Ich habe gerade dieses Whitepaper gelesen. Die Informationen in meinem Kopf sind veraltet. Ich hatte viele Probleme mit sql2005 oder sogar sql2000 bezüglich Neuindizierung, UPDATE STATISTICS, FULLSCAN vs. SAMPLE, benötigter Zeit für Jobs und der stochastischen Qualität der Daten auf den Statistikseiten. Ich schätze, all dieser Schmerz ist jetzt Wasser unter der Brücke. Ich würde sagen, dass Sie UPDATE STATS auf verschiedenen Tabellen parallel ausführen können, aber das scheint mehr Mühe zu geben, als es wert ist, und Sie haben möglicherweise zu viele E / A-Konflikte, als dass es sich lohnen würde.
Straße
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.