Ich habe vor ein paar Monaten eine Anwendung geschrieben und sie außerhalb unseres Büros auf einer Workstation mit einem Intel Core 2 Quad Q8200 @ 2,33 GHz, 8 GB RAM, Windows Server 2008 Enterprise und SQL Server 2008 Enterprise gehostet. Sowohl der Webserver als auch der Datenbankserver wurden auf derselben Maschine ausgeführt.
Wir hatten einen enormen Datenverkehr, haben ClubUptime.com verschoben und zwei ihrer Windows-VMs der Spitzenklasse erhalten. Der Datenbankserver läuft unter Windows 2008 R2 Standard und SQL Server 2008 R2 Web auf 8 GB RAM und einem Intel Xeon e5620 @ 2,40 GHz.
Seit der Umstellung ist die Datenbank, die früher etwa 400 MB RAM benötigte, jetzt etwa 4-7 GB groß und es wurden keine Änderungen daran vorgenommen (außer ein paar Spalten hier und da). Unser Datenverkehr hat sich vervierfacht und unsere Datenbank ist 6 GB groß. Warum sollte SQL Server 7 GB belegen, wenn die Datenbank nur 6 GB groß ist? Und warum sollte es die GESAMTE Datenbank im Speicher speichern?
Und außerdem: Warum hat sich der Speicherbedarf der Datenbank bei einer Vervierfachung ihrer Größe um das Zwölffache erhöht?
Letzte Frage: Warum ist die CPU jetzt zu 100 % ausgelastet, obwohl das vorher nicht der Fall war? Das Design ist einfach, SEHR wenige Verknüpfungen, KEINE Unterabfragen. Ich bin einfach ratlos, es sei denn, es liegt an der SQL Server-Edition oder daran, dass ich von echter Hardware auf eine VM umgestiegen bin.
Antwort1
SQL Server verwendet so viel Speicher wie möglich, daher würde ich mir wegen des Speicherbedarfs keine allzu großen Sorgen machen, es sei denn, es gibt andere Probleme. Wenn möglich, wird alles gespeichert, RAM ist immer schneller als die Festplatte und wenn es nicht für etwas anderes verwendet wird, warum nicht?
Das Ausführen von SQL auf einer VM kann problematisch sein. Es funktioniert einwandfrei, aber die Virtualisierung führt zu Leistungseinbußen, und wie viele Leute hier kommentiert haben, ist SQL hiervon stärker betroffen als die meisten anderen Anwendungen. Viel hängt auch von Ihrer VM-Instanz ab – wenn der Hypervisor ein VMware vSphere-Host ist, wird er mit gleichwertigen realen Ressourcen eine bessere Leistung erbringen als Xen, wenn er von Hyper-V unterstützt wird und die Konfliktraten niedrig sind (also sehr, sehr wenige VMs auf dem Host), kann er ziemlich gut sein. Die einzigen Systeme, die ich jemals devirtualisieren musste, waren alle SQL-Server.
Sie geben nicht an, wie viele virtuelle CPUs Sie für Ihre VM bekommen. Ich bezweifle sehr, dass Sie alle 8 Kerne bekommen, die der Xeon 5620 einer VM zur Verfügung stellen kann. Selbst wenn das der Fall ist, ist das möglicherweise nicht optimal. Insgesamt sollte eine VM mit 4 vCPUs auf dieser Plattform in der Lage sein, mit Ihrer vorherigen physischen Plattform mitzuhalten, vorausgesetzt, der Xeon 5620 hat eine um etwa 30 % bessere Taktrate als der Core 2 Quad, von dem Sie gekommen sind. Ob das aber tatsächlich der Fall ist, hängt vom zugrunde liegenden Hypervisor, der Konfiguration des Hostsystems und davon ab, wie viel Konkurrenz es von anderen VMs gibt, die auf demselben Hypervisor gehostet werden.
Sie können den Leistungsindikatoren in einer VM im Allgemeinen nicht vertrauen, oder zumindest können Sie nicht darauf vertrauen, dass sie Ihnen alles sagen. Sie müssen sich die Leistung wirklich aus der Perspektive des Hypervisors ansehen, um zu erkennen, ob Ihre VM wirklich 100 % der Kapazität der realen CPUs im System erreicht.