Ich habe eine lange laufende Abfrage (Faktentabelle mit 100 Millionen Zeilen, die eine Reihe kleiner Dim-Tabellen verbinden und dann gruppieren), die auf Tempdb verschüttet wird, obwohl der CE (nach einigen Optimierungen) sehr nahe an der tatsächlichen Anzahl der Zeilen liegt, siehe Plan ::
Auf der Suche nach einer Erklärung bemerkte ich die folgenden Informationen zur Speicherzuweisung:
Umgebung: SQL Server 2012 SP1 Enterprise, Server-RAM 256 GB, maximaler SQL Server-Speicher 200 GB, Pufferpoolgröße 42 GB, maximaler Arbeitsbereich 156 GB (GrantedMemory = 156 * 25% ~ = 38 GB)
Fragen
- Bedeutet das, egal wie gut das CE ist, die Abfrage hat keine Chance, nicht überzulaufen? da die Abfrage max RAM ist fest auf 38 GB begrenzt
- Berücksichtigt das Abfrageoptimierungsprogramm beim Erstellen des Plans nicht den maximalen Abfrage-RAM? (Das Erzwingen eines Hash-Match-Aggregats würde den Sortierschritt eliminieren und die Abfrageleistung erheblich verbessern. Leider stammt die eigentliche Abfrage von Cognos und wir haben keine Kontrolle darüber.)
- Wird es hier sinnvoll sein, die Obergrenze von 25% auf nahezu 100% zu erhöhen? (unter der Annahme, dass der Serverzugriff gesteuert werden kann, um die Anzahl gleichzeitiger Abfrageanforderungen zu begrenzen)
Anonymisierter Abfrageplan beim Einfügen des Plans
Wenn Sie ein Hash-Match-Aggregat erzwingen (anstelle eines Sort + Stream-Aggregats), wird die Abfrage konsistent drei- bis viermal schneller beendet. Leider stammt die eigentliche Abfrage von Cognos, und wir können sie nicht ändern.
Der Hash-Aggregatplan enthält keine Hash-Verschüttung. Das Abfrageoptimierungsprogramm wählt kein Hash-Übereinstimmungsaggregat aus, da die CPU-Kosten der Hash-Gruppe zwei- bis dreimal höher sind als bei der Stream-Aggregation, wenn ich die Operatorkosten für Hash-gegen-Stream-Aggregat betrachte.
Sowohl im Stream- als auch im Hash-Aggregat entsprechen die geschätzten Ausgabezeilen genau der Eingabe (~ 100 Millionen Zeilen).
Die Abfrage verwendet einen einzelnen NC-Spaltenspeicherindex, und alle Spaltenstatistiken werden regelmäßig aktualisiert.