Abfragepläne ändern die Leistung in SQL Server 2014

10

Wir haben kürzlich unseren Server von SQL Server 2008R2 auf SQL Server 2014 aktualisiert. Wir haben eine Abfrage, die in 2008R2 einwandfrei lief, jetzt aber 2014 unglaublich viel langsamer läuft und einen schlechten Ausführungsplan hat.

Ich habe mehrere Tests gemacht ...

  1. Schalten Sie die Datenbank 2014 wieder in den Kompatibilitätsmodus 2008/2012.
  2. Testen Sie die Abfrage mit Paginierung.

Beides führte dazu, dass die Abfrage genauso ausgeführt wurde wie SQL Server 2008R2.

Warum ist der Plan so schlecht und die Abfrage wird in SQL Server 2014 so lange ausgeführt?

Geschätzt / Ist

Dieses Bild zeigt zwei Abfragen, eine mit Rownumber, wie sie 2008R2 ausgeführt wurde, und die zweite ist die Korrektur mit Paginierung. Beide liefen 2014, beide sehr unterschiedlich, aber 2008 sehen wir die gleiche Leistung, als ob wir 2014 die Paginierung verwendet hätten.

Jeff
quelle

Antworten:

7

Dies ist kein Problem, sondern beabsichtigt und wird als Leistungsverbesserung angesehen.

Wenn Ihre Abfragen nicht wie erwartet ausgeführt werden, müssen Sie dies im Code Ihrer Datenbank / Anwendung angeben.

Sie können den alten Carnality Estimator erzwingen, indem Sie das Trace-Flag 9481 auf Server-, Sitzungs- oder Abfrageebene verwenden (using OPTION (QUERYTRACEON 9481)). Dies erzwingt es unabhängig von der Kompatibilitätsstufe der Datenbank.

Es gibt auch eine Menge Informationen, die das CSS-Team hier gepostet hat .

Ein ausführlicherer Beitrag zum Cardanility Estimator und zu Änderungen in diesem Prozess in SQL Server 2014 enthält ein Beispiel.

Paul White 9
quelle
Das klingt nach einer miesen Entschuldigung für etwas, das schief gelaufen ist
dvdmn