Ich bin mit Microsoft SQL Server 2016 SP2-CU6 (13.0.5292.0) auf einem 4 vCPU VM mit max degree of parallelism
Satz 2
und cost threshold for parallelism
Satz 50
.
Wenn ich morgens versuche, einen geschätzten Ausführungsplan für eine SELECT TOP 100- Abfrage anzuzeigen , muss ich massiv warten, und der Vorgang zum Rendern des geschätzten Plans dauert Minuten, häufig 5 bis 7 Minuten. Dies ist wiederum nicht die tatsächliche Ausführung der Abfrage, sondern lediglich der Prozess zum Anzeigen eines geschätzten Ausführungsplans .
sp_WhoIsActive
wird entweder PAGEIOLATCH_SH
waits oder LATCH_EX [ACCESS_METHODS_DATASET_PARENT]
waits anzeigen und wenn ich das Skript WaitingTasks.sql von Paul Randal während des Vorgangs ausführe, werden CXPACKET
waits mit den Worker-Threads angezeigt, die waits anzeigenPAGEIOLATCH_SH
:
* Ressourcenbeschreibungsfeld = exchangeEvent id=Port5f6069e600 WaitType=e_waitPortOpen waiterType=Coordinator nodeId=1 tid=0 ownerActivity=notYetOpened waiterActivity=waitForAllOwnersToOpen
Die Worker-Threads scheinen die gesamte stats
Tabelle in den Speicher zu bringen (da diese Seitenzahlen sowie nachfolgende Seitenzahlen, die aus Paul Randals Abfrage hervorgehen, auf den gruppierten Schlüssel für die stats
Tabelle verweisen ). Sobald der Plan wieder verfügbar ist, ist er für den Rest des Tages im Grunde genommen sofort verfügbar, auch wenn stats
nur noch verschiedene Datensätze übrig sind (von denen ich annehme, dass sie aufgrund von Suchvorgängen aus ähnlichen Abfragen abgerufen wurden).
Ich würde dieses anfängliche Verhalten erwarten, wenn die Abfrage tatsächlich mit einem Plan ausgeführt würde, der SCAN-Operatoren verwendet. Warum geschieht dies jedoch, wenn Ausführungspläne ausgewertet werden, um nur zu einem SEEK-Operator zu gelangen, wie im oben verknüpften Plan gezeigt? Was kann ich tun (abgesehen von der Ausführung dieser Anweisung vor den Bürozeiten, damit meine Daten ordnungsgemäß zwischengespeichert werden), um die Leistung hier zu verbessern? Ich gehe davon aus, dass ein paar Covering-Indizes von Vorteil wären, aber würden sie wirklich Verhaltensänderungen garantieren? Ich muss hier innerhalb einiger Einschränkungen des Speicher- und Wartungsfensters arbeiten, und die Abfrage selbst wird aus einer Herstellerlösung generiert. Daher sind an dieser Stelle alle anderen Vorschläge (außer einer besseren Indizierung) willkommen.
quelle