Ich versuche eine Lösung für ein Problem zu finden, das mich verrückt macht ...
Ich habe eine Abfrage, die in einem QA-Server sehr schnell läuft, aber in der Produktion sehr langsam ist. Ich habe festgestellt, dass sie unterschiedliche Ausführungspläne haben ... also habe ich versucht, den Cache neu zu kompilieren, die Ausführungspläne zu aktualisieren, Statistiken zu aktualisieren, den Kollationstyp zu überprüfen ... aber ich kann immer noch nicht herausfinden, was vor sich geht ...
Die Datenbanken, in denen die Abfrage ausgeführt wird, sind genau gleich und die SQL Server haben auch die gleiche Konfiguration.
Alle neuen Ideen würden sehr geschätzt werden.
Danke, A.
Ich habe gerade festgestellt, dass der QA-Server SP3 ausführt und in der Produktion SP2 ist. Könnte dies Auswirkungen auf dieses Problem haben?
Ist es möglich, dass der Produktionsserver eine größere Datenbankgröße hat? Der Plan kann anders sein, da er auf Statistiken über die Daten basiert, die er enthält.
Ich denke, das könnte an der Menge der vorhandenen Daten liegen. Es ist uns einmal passiert, dass die Anfrage buchstäblich in den QA-Server geflogen ist, aber unglaublich langsam in der Produktion war. Nachdem wir uns für eine Weile die Köpfe gebrochen hatten, stellten wir fest, dass der QA-Server 15.000 Zeilen hatte, wo die Produktion 1,5 Millionen betrug.
HTH
Wenn der Ausführungsplan derselbe war und einer langsam war, wäre das Datenbankladen, Hardware, Sperren / Blockieren usw.
Wenn jedoch die Ausführungspläne unterschiedlich sind, ist zwischen den beiden Datenbanken etwas anders. Sind die Statistiken in beiden auf dem neuesten Stand, haben die exakt gleichen Schemata, gleiche Indizes, ähnliche Anzahl von Zeilen, gleiche Verteilung von PK und Indexwerten, usw. Woher kamen die QA-Daten, Zufallsdaten oder ist es eine Wiederherstellung von der Produktion?
Ich bin kürzlich auf dieses Thema gestoßen und hier ist, was ich gefunden habe.
Ich hatte zwei Datenbanken, die im Wesentlichen Kopien voneinander waren. In einer Version brauchte ein TVF eine Sekunde, um zu laufen, während die andere Version 15 Minuten brauchte, um zu laufen.
Die Ausführungspläne des zugrunde liegenden SQL-Codes waren sehr unterschiedlich. Ich konnte das beheben, indem ich einige Indizes neu erstellte, auf die der TVF angewiesen war. Die Ausführungspläne sind nicht gleich, aber es hat sich sehr verändert. Und die Ausführungszeit ist wieder auf ungefähr eine Sekunde reduziert.
Jetzt hatten beide Versionen Indizes, die stark fragmentiert waren. Meine Annahme ist, dass historische Statistik- oder Ausführungsplaninformationen der schnellen Version erlaubten, weiterhin einen optimalen Ausführungsplan zu finden.
Also zusammenfassend: Stellen Sie sicher, dass Sie die Fragmentierung Ihrer Indizes betrachten, selbst wenn sie die gleiche Struktur oder ähnliche Fragmentierungsraten haben.
Tags und Links sql-server performance sql-execution-plan execution