Hintergrund
Ich bin dabei, eine 160-GB-Datenbank von MSSQL 2008 (Standard) auf einem Win 2008-Server mit 48 GB RAM auf einen neuen Server zu migrieren, auf dem MSSQL 2012 (64-Bit-Webedition) unter Win 2012 mit 64 GB RAM ausgeführt wird. Der alte Server ist aktiv und unter Last. Der neue Server ist nicht in Produktion. Der neue Server verfügt über 8 Tempdb-Dateien (jeweils 4 GB).
Problem
Beim Testen auf dem neuen Server werden in zahlreichen Abfragen Schritte angezeigt, die Warnungen auslösen, in denen "Der Operator hat Tempdb verwendet, um Daten während der Ausführung zu verschütten". Ich habe es geschafft, Sortierungen zu vermeiden, indem ich einige der Abfragen umgeschrieben habe, aber damit ist das Problem nicht wirklich gelöst. Dieselben Abfragen auf dem alten Server verursachen keine Verschüttungen. Ich habe gelesen, dass Verschüttungen passieren, wenn MSSQL eine Operation im Speicher nicht abschließen kann und in tempdb / page verschüttet werden muss. Sollte ich mir Sorgen wegen Verschüttungen machen?
Beispiele
Ich habe sp_updatestats in der Datenbank ausgeführt, daher sollten die Statistiken auf dem neuesten Stand sein, aber Sie werden feststellen, dass es einige Diskrepanzen zwischen der geschätzten und der tatsächlichen Anzahl von Zeilen gibt.
Gedächtnisbedenken
Ich habe eine maximale Gedächtniseinstellung für MSSQL von 58 des 64gb eingestellt. Derzeit hat MSSQL etwa 35 GB dieses Speichers verbraucht, verfügt jedoch über einen Arbeitssatz von nur 682 MB. Auf dem alten Server (obwohl er in Produktion ist und die Last verarbeitet) sind 44 GB Speicher für MSSQL reserviert, wovon 43,5 GB in seiner Arbeitsgruppe enthalten sind.
Ich weiß nicht, ob das Verschütten mit einer Gedächtniseinstellung zusammenhängt - hat jemand irgendwelche Ideen? MSSQL hat derzeit mehrere Hektar RAM zu sparen. Warum wird es für einige Sortierungen und Hash-Übereinstimmungen in Tempdb verschüttet?