Fragensteller
Performanceproblem ab .NET auf SQL-Server in VMWare-VM

Allgemeine Diskussion
-
Hallo
In unserer Business Software welche auf IIS/SQL-Server läuft, gibt es von lokalem PC zu VM im Rechenzentrume merkliche Performanceunterschiede. Dazu gibt es einen einfachen Performancetest direkt aus der Software. Bei einem Test werden zeurst 100 Insert/Delete in eine einfache Tabelle gemacht und danach 2000 mal Selects aus dieser Tabelle.
In .NET werden die Aufrufe aus Schleifen aufgerufen, es gibt also 100 einzelne Insert, 100 einzelne Deletes und 2000 Selects.
Auf der lokalen Umgebung braucht ein solcher Test zusammen rund 400ms, auf einer VM welche in einem Rechenzentrum steht, dauert der Test rund 1,3s. Die VM hat SSD-Disks angehängt und reine Disk-Tests sind auch gut. Die SQL-Befehle sind aber eh so einfach, dass da nicht viel auf die Disks geschrieben wird. Für Tests habe ich diese Abfragen in ein Konsole-Programm verschoben, ob so Probleme im IIS ausschliessen zu können.Ich habe jetzt mal noch jede SQL-Abfrage mit Stopwatch im .NET gemessen und das gibt lokal rund 1000 Ticks bei Insert/Delete und 350 Ticks bei Select. Auf der VM sind die Werte rund 2,5 mal schlechter. Beides mal ist IIS/SQL-Server im gleichen Windows und Zugriff wird über Shared Memory gemacht.
Hat jemand eine Idee, wo das Problem liegen könnte? Im SQL-Profiler sind die Reads/Writes identisch, auf der VM sind nur einige wenige Abfragen in der gleichen Zeit aufgeführt, lokal sind das viel mehr.
Gruss Christoph
- Typ geändert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 7. Juli 2016 13:54 Warten auf Rückmeldung
Alle Antworten
-
Hallo Christoph,
das kann alles und nichts sein. Angefangen von der (Netzwerk)verbindung über unperformante SQL Statements oder auch unterschiedliche Datenbankstrukturen (fehlende Indizes, ...) bis hin zur VM selbst.
Sind die ausgeführten Statements im SQL Profiler absolut identisch? Könnte es sein, dass evtl. eine implizite Konvertierung von varchar in nvarchar durchgeführt wird, da die Eingabeparameter unterschiedlich codiert sind?
Hast Du dir die Ausführungspläne der Statements mal hinsichtlich Unterschieden zwischen lokaler und VM Instanz angeschaut?
Letztendlich solltest Du uns das CREATE TABLE Statement inkl. aller Indizes, Schlüssel, usw. hier posten. Dazu dann bitte noch die Statements, die Du absetzt, alternativ das Testprojekt, dass den Test durchführt.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Stefan
Ich weis(alles oder nichts), die heutigen Tests sind auch nur weitere Tests unter vielen. Gerade um Netzwerk auszuschliessen, habe ich extra eine VM angelegt, welche IIS und SQL auf dem gleichen Windows laufen, also kein Netzwerk dazwischen.
DB-Sturktur ist identisch, es ist auch nur eine Tabelle mit 2 Spalten (Key/Value).Die 3 SQL's sind auch identisch:
DELETE FROM tdGeneralProperties WHERE PropertyName=N'PerformanceTest'
go
INSERT INTO tdGeneralProperties(PropertyName,PropertyValue) VALUES (N'PerformanceTest',N'TestValue')
go
SELECT PropertyValue FROM tdGeneralProperties WHERE PropertyName=N'PerformanceTest'
go
Die Ausführungsplände sind identisch, auch die Statistics-Werte im SSMS dieser 3 Abfragen sind identisch.
Ich frage mich auch, ob das Problem beim SQL-Server liegt oder evt. mit dem SQL-Treiber/.NET-Anbindung zusammen hängt.
Gruss Christoph
-
Hallo Christoph,
welche VM Software verwendet ihr?
Ist die SQL Server Installation absolut identisch? (gleicher SP und Patchstand). Gleiches für die Windows Installation inkl. des .NET Frameworks.
Läuft die Anwendung evtl. im Debugmodus? (web.config bzw. app.config und die Projektmappenkonfiguration vergleichen)
Generell vermute ich hier eher ein Problem mit der VM selbst, nicht mit dem SQL Server. Aber schau zuerst mal die o.g. Fragen an, evtl. ergibt sich da ja auch schon was.
Insbesondere bei Cloud Anbietern stelle ich leider recht häufig fest, dass die Performance von VMs bei gleicher Ausstattung oftmals im Vergleich zu einem Dedicated Server erheblich schlechter ist. Um den Faktor 2,5 zwar nicht unbedingt aber schon doch sehr deutlich.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Mittwoch, 29. Juni 2016 21:12
-
Hallo Stefan
VMWare läuft da, ist in Rechenzentrum und wir beziehen da als IaaS, also haben mit der HW darunter nichts zu tun und können einfach VM's, Netzwerke etc. anlegen.
Nein, SQL-Server ist nicht identisch, haben aber mit div. Versionen im RZ unbefriedigende Performance.
Lokal läuft es im Debug, in der VM aber nicht. Habs grad am gesetzt und ist nicht schneller :-)
Ja, sehe es auch eher ausserhalb vom SQL-Server. Die Leute vom RZ haben auch schon geprüft, soll alles im grünen Bereich liegen.
Aber dann schaue ich da nochmals.Danke
Gruss Christoph
-
Hallo Christoph,
ich habe schon ähnliche Phänomene auf VMWare gesehen und versucht zu Analysieren.
Ist der Host vielleicht überbucht? Dies kann zu erheblichen Wartezeiten auf Ressourcen und somit zu langsameren Ausführungen führen. Je größer die VM ist (CPU Kerne), deste schlimmer kann sich dies auswirken.
Des Weiteren scheint es so zu sein, dass wenn eine VM mit 16 Kernen auch nur einen Kern des Hosts beansprucht, trotzdem gleichzeitig 16 Kerne auf dem Host "frei" sein müssen. Sind diese nicht frei, scheint die VM warten zu müssen, bis kurzzeitig 16 Kerne frei sind. Dies kann auch zu erheblichen Wartezeiten führen.
Diese Wartezeiten sind in der VM selber nicht auszumachen. Die Performanceindikatoren seitens VMWare sollten hier aber Aufschluss geben können. Ich weiss gerade nicht, wie dieser Indikator heißt, er bildet jedoch ab, wie viel Wartezeit auf CPUs auf dem Host anfällt. Solltet Ihr keinen Zugriff auf diese Daten haben, würde ich den Betreiber kontaktieren um dies eventuell zu klären und ausschließen zu können.
Alleine schon zwischen VM (alleine auf exklusivem Host) und dem selben Host mit direkt installiertem Windows / SQL Server (ohne Virtualisierung) konnte ich, je nach Anwendungsfall, Performanceunterschiede von bis zu 20% ausmachen.
Ich hoffe das hilft dir weiter.
Viele Grüße
Phil
-
Hallo Christoph,
für VM Ware gibt es ein Dokument mit "Best Practice" für die Verwendung von SQL Server.
https://www.vmware.com/files/pdf/solutions/SQL_Server_on_VMware-Best_Practices_Guide.pdf
Wenn Ihr "Herr im Hause" seid, dann könnt Ihr ja die Parameter der VMware selbst überprüfen. Ist die Maschine überbucht, dann kommt es sehr wohl zu Problemen. Insbesondere bei den CPU's ware es sinnvoll, die Priorität bei SQL Maschinen höher zu setzen.
MCM - SQL Server 2008
MCSE - SQL Server 2012
db Berater GmbH
SQL Server Blog (german only) -
Ich finde hier keine Hinweise auf die eingesetzte SQL Server sowie VMWare vSphere Version.
Aber ganz gleich welche es genau ist, solltet ihr dann auch das Whitepaper der entsprechenden Version heranziehen. Da gibt es teilweise starke Unterschiede. Auch die Art der Workload ist dabei zu berücksichtigen.
Insofern kann man hier auch nur eher allgemein antworten (aber ich denke das ist normal):
Man kann hier durchaus schon beim ESX Power Management anfangen, welches of noch auf dem ungünstigen Default gesetzt ist,
Die gesuchten Performance-Counter heißen CPU Co-Stop und Ready Time.
Prinzipiell ist Uwe’s Hinweis da schon auf dem richtigen Weg.
Ich bin mir zwar nicht sicher, was genau mit „Priorität“ gemeint ist von CPUs, aber „Sharing“ geht in die Richtung. Hier würde ich mir zunächst aber die genauen Performance-Indikatoren ansehen, wie Context Switching und eben die oben genannten.
Noch davor empfehle ich dringend die Reservierungen zu prüfen und anzupassen – bei Memory wie bei CPU.
Viel mehr kann man so allgemein nicht sagen. Jeder Hypervisor (sei es VMWare oder Hyper-V) hat halt seinen Overhead, und man muss sehen, wie viel man davon akzeptieren kann, und wie weit man eingreifen kann ohne die Gesamtarchitektur in Frage zu stellen.
Andreas Wolter (Blog | Twitter)
MCSM: Microsoft Certified Solutions Master Data Platform/SQL Server 2012
MCM SQL Server 2008
MVP Data Platform
www.SarpedonQualityLab.com | www.andreas-wolter.com