Da das Optimierungsprogramm nicht die erforderliche Zeit in Anspruch nehmen kann (es muss die Ausführungszeit minimieren und nicht dazu beitragen), um alle möglichen Ausführungspläne zu untersuchen, wird es manchmal abgeschnitten.
Ich habe mich gefragt, ob dies überschrieben werden kann, damit Sie dem Optimierer jederzeit die erforderliche Zeit (oder eine bestimmte Anzahl von Millisekunden) geben können.
Ich habe keine Notwendigkeit für diese (atm), aber ich kann mir ein Szenario vorstellen, in dem eine komplexe Abfrage in einer engen Schleife ausgeführt wird und Sie den optimalen Plan ausarbeiten und ihn vor der Hand zwischenspeichern möchten.
Natürlich hast du eine enge Schleife, du solltest die Abfrage umschreiben, damit sie verschwindet, aber ertrage sie mit mir.
Dies ist eher eine Frage aus Neugier und um zu sehen, ob es manchmal einen Unterschied zwischen einer kurzgeschlossenen und einer vollständigen Optimierung gibt.
Es stellt sich heraus, dass Sie dem Optimierer mit dem Ablaufverfolgungsflag 2301 mehr Zeit geben können. Es ist nicht genau das, was ich gefragt habe, aber es kommt dem nahe.
Die besten Informationen hierzu finden Sie in den Modellierungserweiterungen für Abfrageprozessoren in SQL Server 2005 SP1 von Ian Jose.
Verwenden Sie diese Ablaufverfolgungsflagge mit Vorsicht! Aber es kann nützlich sein, wenn Sie bessere Pläne haben. Siehe auch:
- Artikel getaggt "Optimierungsgrad" von Grant Fritchey.
- Bevor Sie ein Upgrade auf SQL Server 2008 durchführen ... von Brent Ozar.
- Optimierungsoptionen für SQL Server bei Ausführung in Hochleistungs-Workloads vom Microsoft-Support.
Ich dachte an Abfragen mit vielen Verknüpfungen, bei denen der Lösungsraum für die Verknüpfungsreihenfolge exponentiell explodiert. Die Heuristiken, die SQL Server verwendet, sind ziemlich gut, aber ich habe mich gefragt, ob das Optimierungsprogramm eine andere Reihenfolge vorschlagen würde, wenn es mehr Zeit hätte (im Bereich von Sekunden oder sogar Minuten).