New Kardinalitätsschätzer (SQL Server 2014) ist so weit weg

Ich habe eine Data Warehouse-Datenbank und habe Probleme mit dem neuen Kardinalitätsschätzer von SQL Server 2014.

Nach dem Upgrade des Datenbankservers auf SQL Server 2014 habe ich einen großen Unterschied in der Abfrageleistung festgestellt. Einige Abfragen werden viel langsamer ausgeführt (30 Sekunden in SQL 2012 im Vergleich zu 5 Minuten in SQL 2014). Nach der Untersuchung der Ausführungspläne habe ich festgestellt, dass die Kardinalitätsschätzungen für SQL Server 2014 weit entfernt sind und ich keinen Grund dafür finden kann.

Hier ist ein Beispiel eines Abfrageausführungsplans (Operator oben links) in SQL 2012 im Vergleich zu SQL 2014:

Ein paar Details

Meine Abfragen sind typische Abfragen zum Laden von Data Warehouse-Faktentabellen. Ich frage eine Transaktionstabelle ab und verbinde viele (15-20) Dimensionstabellen (es gibt immer entweder 0 oder 1 Datensatz, der aus der Dimensionstabelle verbunden wird).

Ich habe die Statistiken aller Tabellen (mit FULLSCAN) aktualisiert, um sicherzustellen, dass die Statistiken aktuell sind.

Die Geschäftsschlüssel der Dimensionstabellen werden indiziert (eindeutiger nicht geclusterter Index). Es scheint mir, dass der alte Kardinalitätsschätzer (SQL 2012) aufgrund der Eindeutigkeit dieses Index richtig davon ausgeht, dass es max. 1 Datensatz, der beitritt (die geschätzte Anzahl der Datensätze ändert sich im Ausführungsplan nicht).

Ich habe versucht, das Problem auf das einfachste Beispiel einzugrenzen - SELECT mit 2 Joins:

Hier ist die Kardinalitätsschätzung für die Operatoren 1 und 2 in SQL 2012 im Vergleich zu SQL 2014:

           | Est.rows - SQL2012 | Est.rows - SQL2014
Operator 1 |               7653 |               7653
Operator 2 |               7653 |              10000

ie Sie sehen, wird die Schätzung von SQL Server 2014 um mehr als 30% verfehlt (10000 gegenüber 7653). Weil ich cca habe. Bei einer typischen Abfrage schließen sich 15 bis 20 an, die endgültige Schätzung geht weit auseinander.

Ich kann die Datenbank in den niedrigeren Kompatibilitätsmodus versetzen (110) und sie funktioniert dann einwandfrei (wie bei SQL Server 2012), aber ich möchte wirklich wissen, was der Grund für dieses Verhalten ist. Warum ist das Ergebnis des Kardinalitätsschätzers von SQL Server 2014 falsch?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage