Wir haben derzeit eine VM mit sehr geringer Leistung und schlagen vor, auf eine Azure-VM mit besseren Spezifikationen umzusteigen. Das Problem ist, dass die Azure-VM viel langsamer als die ursprüngliche VM ist, obwohl sie eine höhere Spezifikation aufweist.
Der ursprüngliche Server ist eine 2-Kern-VM mit 2 GB Speicher, die auch ein Webserver ist. Es wird Microsoft SQL Server Web Edition 2008 R2 ausgeführt. Da dieser Server für andere Zwecke verwendet wird, mussten wir den maximalen Serverspeicher in SQL Server auf 512 MB beschränken .
Der neue Server ist eine 4-Kern-VM mit 7 GB Speicher, die nur ein Datenbankserver ist. Es wird Microsoft SQL Server Standard Edition 2008 R2 ausgeführt, und wir haben die Speicherkapazität, die SQL Server verwenden kann, nicht begrenzt.
Dies ist einer von zwei Servern, die in einer gespiegelten Umgebung eingerichtet sind, aber die Datenbank, auf der ich Tests ausführe, wird nicht gespiegelt. Die anderen Datenbanken auf diesem Server erhalten derzeit nicht viel Datenverkehr (tatsächlich zeigt Activity Monitor keine Aktivität auf den anderen DBs an, während ich diese Tests ausgeführt habe).
Mir ist klar, dass ein Problem mit Azure-VMs darin besteht, dass die Festplatten eine Netzwerkressource sind, sodass die Verlangsamung verursacht wird. Sie ist jedoch immer noch langsamer, selbst wenn in den E / A-Statistiken keine physischen Lesevorgänge angezeigt werden.
Ich habe die Optimierungsempfehlungen auf dieser Seite der Azure-VM befolgt, einschließlich des Entfernens der Datenträger (zwei Datenträger pro Laufwerk) und des Speicherns der Protokoll- und Datendateien auf separaten Laufwerken.
Die einzigen Dinge, die ich nicht getan habe, sind die Aktivierung der Seitenkomprimierung, die Begrenzung des automatischen Wachstums in der Datenbank und das Verschieben des SQL Server-Fehlerprotokolls und der Trace-Dateiverzeichnisse auf Datenträger. Ich habe das auch auf dem älteren Server nicht gemacht.
Auf dem alten Server wurde diese Optimierung nicht durchgeführt, und die Protokoll- und Datendateien befinden sich auf demselben Laufwerk, das nicht gestreift ist.
Die Datenbank auf dem aktuellen Server hat 65 GB (45 Daten und 20 Protokolle), was etwas zu groß war, um auf den neuen Server übertragen zu werden. Ich teste also auf einer kleineren Datenbank (6 Daten und 13,5 Protokolle).
Die Ergebnisse auf dem alten Server sind CPU time = 1311 ms, elapsed time = 1057 ms.
und auf dem neuen Server sind CPU time = 1281 ms, elapsed time = 2525 ms.
Das ist nur ein Lauf, aber die Ergebnisse sind repräsentativ für das, was ich normalerweise sehe.
Der neue Server scheint ständig eine deutlich längere Zeit als die CPU-Zeit zu haben. Ist das ein Problem und kann ich etwas tun, um herauszufinden, was es verursacht?
Welche anderen Schritte kann ich unternehmen, um herauszufinden, warum dieser Server so langsam läuft, wenn es so aussieht, als ob er schneller als der alte Server sein sollte?