Unterschiede zwischen geschätzten und tatsächlichen Ausführungsplänen

8

Ich bin neu in SQL Server und möchte meine erste Abfrage optimieren.

Was ist in SQL Server 20xx der Unterschied zwischen "geschätzten Ausführungsplan anzeigen" und "tatsächlichen Ausführungsplan einschließen"?


quelle

Antworten:

6

Der geschätzte Ausführungsplan wird ausschließlich auf der Grundlage der Statistiken generiert, über die SQL Server verfügt - ohne die Abfrage tatsächlich auszuführen. Der Abfrageoptimierer wird nur gefragt, was er mit dieser Abfrage am wahrscheinlichsten tun würde , basierend auf allen Informationen, die er über die Abfrage und die Datenverteilungen usw. hat.

Dies funktioniert in Ordnung. Die Abfrage muss nicht ausgeführt werden (was sehr lange dauern kann). Wenn die Statistiken jedoch veraltet sind, ist der Plan möglicherweise stark verzerrt.

Der tatsächliche Ausführungsplan ist genau das - der tatsächliche Ausführungsplan, der beim tatsächlichen Ausführen der Abfrage verwendet wurde. Dies zeigt Ihnen Dinge, die auf "veraltete" Statistiken usw. hinweisen könnten. Um dies zu erreichen, müssen Sie die Abfrage ausführen - was sehr lange dauern kann.

marc_s
quelle
1
Ich hätte gedacht, dass die einzige wirkliche Frage hier ist, in welchen Fällen der tatsächliche Plan nicht der geschätzte ist. Der Rest ist offensichtlich, nicht wahr?
John
Eine kurze Frage nach dem Durchlaufen des Abfrageoptimierers und bei der Ausführung der Abfrage: Wenn der zwischengespeicherte Plan veraltet ist, führt der Schritt der Abfrageoptimierung die Aktualisierungsstatistiken erneut aus. oder gibt es eine andere Möglichkeit, einen Ausführungsplan zu erstellen?
Brykneval
1

Der geschätzte Plan gibt an, wie Ihre Abfrage auf dem Server ausgeführt wird, ohne sie tatsächlich auszuführen. Auf diese Weise erhalten Sie eine Vorstellung davon, ob Sie eine Optimierung vornehmen müssen, um einen besseren Plan zu erstellen, oder ob der geschätzte Plan in Ordnung aussieht.

Der tatsächliche Plan zeigt, was tatsächlich passiert ist, als der Server die Abfrage ausgeführt hat. Es enthält Details wie die tatsächliche Anzahl der Zeilen aus einer Tabelle, wie viel Speicher verwendet wurde, wenn sortiert wurde. Welchen Grad an Parallelität hat es während der Ausführung verwendet.

Am besten ist es jedoch, den Unterschied zwischen "geschätzter Anzahl von Zeilen" und "tatsächlicher Anzahl von Zeilen" zu betrachten, den Sie im tatsächlichen Ausführungsplan sehen können. Wenn diese beiden Werte näher beieinander liegen, bedeutet dies, dass die Statistiken auf dem neuesten Stand sind. Für bestimmte Statistiken ist dies der beste Plan. Wenn diese Werte jedoch sehr unterschiedlich sind, ist es möglich, dass die Statistiken nicht auf dem neuesten Stand sind und dies möglicherweise nicht der Fall ist In diesem Fall hilft die Aktualisierung der Statistiken dabei, einen besser geschätzten Plan und damit einen tatsächlichen Plan zu erstellen.

Gulli Meel
quelle