none
Applikation und Datenbank in zwei VMs, kurze Antwortzeiten realisieren RRS feed

  • Frage

  • Windows Server 2012 R2, Hyper-V, DELL PowerEdge T620, 2x Intel Xeon E5-2630v2 2,6 GHz, 6 Cores

    Gegeben sind zwei VMs. In der eine ist der Applikationsserver (denke mal es wurde mit Java programmiert) und in der zweiten VM ist Microsoft SQL Server installiert.

    Eine wichtige Auswertung benötigt auf diesem Server 20 Minuten. Man sieht ein permanenten Datenverkehr zwischen Applikation und Datenbank. Ich denke es werden viele kleine  Abfragen der Reihe nach abgearbeitet und es kommt für hohen Durchsatz darauf an die Latenz möglichst klein zu halten.

    Ich habe dann mal direkt auf dem Host mit netio den Durchsatz gemessen. In einer cmd "netio -t -s" und in der anderen "netio -t localhost". Bei 1k Paketen wird 110.705 kB/s gemessen, steigert sich bei 32k auf 600.000 kb/s.

    Dann von VM mit dem Applikationsserver zur VM mit dem Datenbankserver sind es bei 1k 170.000 kb/s und bei 32k 236.452 kb/s.

    Jetzt habe ich die beiden VMs auf zwei schnellere Rechner (Desktop-PCs, der eine 3,x GHz, der andere hat eine Intel Core i7-4790K eingebaut ) installiert. Anbindung der beiden Rechner mit 1 GBit/s übers LAN. Die Abfrage benötigt jetzt 7:30 Minuten.

    Jetzt auf dem PC mit dem i7-4790k (4 GHz Basistakt) Windows Server 2016 installiert und dort die beiden VMs gestartet. Anfrage dauert hier 2:48 Minuten. Zum Schluss noch in die VM mit dem Applikationsserver die Datenbank installiert, jetzt dauert die Abfrage 2:20 Minuten.

    Messe ich auf dem Rechner mit dem i7 mit netio nach: Bei 1k 320.717 kb/s, bei 32k sind es 1.063.682 kb/s.

    Bin mir nicht ganz sicher, was nun für die bessere Antwortzeit der Ausschlag gibt: Schnellerer Prozessor, wobei der ja auch für den vSwitch eine Rolle spielt?

    Für den Durchsatz des vSwitch unter Hyper-V (von einer VM zur anderen) entscheidet nur der Prozessor oder gibt es da auch Hardwarebeschleunigung die man Kauf eines neuen Servers beachten muss?

    Welcher aktuelle Prozessor wäre für hohen Durchsatz interessant? Ich hatte mir ein Angebot bei Dell mit 2x Intel Xeon Gold 6128 3,4 GHz, 6C, 19,25 MB Cache, 115W eingeholt. Ich denke mal für kurze Antwortzeiten nützen mir viele Cores nicht, die benötige ich dann für mehrere gleichzeitige Benutzer, die Applikation scheint die Anfrage eines einzelnen Anwenders nicht auf mehrere Prozesse zu verteilen.

    Der dürfte aber noch unterhalb des i7 mit 4 GHz liegen? Der hat aber DDR3, beim eventuell neuen Server ist es DDR4.

    Hat der Test mit Windows Server 2016 auch solch ein positiven Einfluss bei der Antwortzeit verursacht oder ist hier der Gewinn minimal?

    Samstag, 25. Mai 2019 20:11

Antworten

  • Moin,

    das ist alles irgendwie ein wenig konfus. Du sprichst von Antwortzeiten, misst aber Durchsatz, was die Applikation tut, ist eh nicht bekannt usw.

    Meine unqualifizierte erste Vermutung wäre, Deine VMs haben zu viele vCPUs und behindern sich gegenseitig beim Rechnen, wenn sie auf einem Host laufen. Gerade der letzte Vergleich (VM mit beiden Teilen vs. 2 VMs) legt die Vermutung nahe, dass Netzwerk nicht Dein Problem ist...

    Ansonsten spielen Dinge wie Power Profile eine große Rolle bei so etwas...


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Samstag, 25. Mai 2019 20:52
  • Betrifft das nicht dieselbe Anwendung:
    https://social.technet.microsoft.com/Forums/de-DE/69826837-6394-4153-851c-37c9a6383e9b/laufender-datenverkehr-zwischen-applikationsserver-und-datenbankserver-hardware-zur-beschleunigung?forum=sqlserverde

    Da du den Datenstrom ja bereits analysiert hast, deutet dies eben auf besonders viele einzelne Abfragen hin.
    Dies ließe sich eher programmtechisch zusammenfassen um eben weniger Abfrage mit dem selben Ergebnis zu erreichen.

    Ansonsten hilft dir da eher weniger ein dickerer SQL-Server sondern derer gleich mehrere über verschiedene CPU's verteilt sowie ein Clustering des SQL-Servers um die Last stärker zu verteilen.
    Wenn denn allerdings eine einzige Anwendung bereits mehrere 100 oder 1000 Abfragen hintereinander abfeuert, dann hilft dir auch kein Clustering oder sonstige Hardwarebeschleunigung.
    Das Problem ist dann die Softwarfe!
    Für meine BI-Anwendung verwende ich bereits programmseitig eine parallele Abfragetechnik über mehrere Connections gleichzeitig. Dies ist dann auch mit nur 1 Server performant.

    Sonntag, 26. Mai 2019 10:34

Alle Antworten

  • Moin,

    das ist alles irgendwie ein wenig konfus. Du sprichst von Antwortzeiten, misst aber Durchsatz, was die Applikation tut, ist eh nicht bekannt usw.

    Meine unqualifizierte erste Vermutung wäre, Deine VMs haben zu viele vCPUs und behindern sich gegenseitig beim Rechnen, wenn sie auf einem Host laufen. Gerade der letzte Vergleich (VM mit beiden Teilen vs. 2 VMs) legt die Vermutung nahe, dass Netzwerk nicht Dein Problem ist...

    Ansonsten spielen Dinge wie Power Profile eine große Rolle bei so etwas...


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Samstag, 25. Mai 2019 20:52
  • Was die Applikation im Detail tut wissen die Entwickler hoffentlich, äußeren sich aber nicht im Detail dazu und verweisen auf den Hardwarelieferant. Die vorherige Version ist um Welten schneller und man soll bitte ein leistungsfähigen Server einsetzen. An dem Thema bin ich jetzt dran.

    Stell Dir bitte vor eine Anwendung fragt Daten vom Datenbankserver ab, die dieser sehr schnell liefern kann. Dann kommt die nächste Abfrage und so fort. Würde die Applikation eine komplexe Abfrage stellen, müsste ich ein kurzes Paket mit der Anfrage sehen und dann würde die Datenbank loslegen und dann wieder ein Datenpaket mit dem Ergebnis. Das man während der xx Minuten ein konstanten Datenstrom von vielleicht x MByte/s sieht deute ich das viel I/O von und zur Datenbank geht.

    Ich habe nicht viele vCPUs zugewiesen. Zwei für die VM mit dem Datenbankserver (habe ich auch schon einmal auf 4 erhöht, zwei ist die Sizingvorgabe) und vier für den Applikationsserver (sechs sollte ich, aber das ist für den Multiuserbetrieb nötig). Das sollte bei unserem "großen" Server kein Problem darstellen, hatte da auch die anderen VMs schon runterfahren. Kein Unterschied.

    Beim i7 hätte ich da auch drauf getippt, da dieser "nur" 4 Cores (+4 HT) hat. Aber da lief die Abfrage in 1/10 der Zeit durch. Auf einem 3,x GHz Prozessor lief es langsamer, man sah aber das es proportional mit der Prozessorgeschwindigkeit verlief.

    Schnellerer Prozessor = schnellere Verarbeitung der Daten

    Und da viele Daten übertragen werden, aber keine hohe Bandbreite zu sehen ist, denke ich das die Latenzzeit hier wichtig ist. Die kleinen Datenpakete müssen mit niedriger Latenzzeit übertragen werden. 10 Gbit/s dürfte hier gegenüber 1 GBit/s besser sein. Sieht man ja an der Messung, weil bei Aufteilung der beiden VMs auf zwei physische Rechner die Antwortzeit zwar sinkt, aber noch weit von der Antwortzeit auf dem 4 GHz Rechner (hier zwei VMs auf diesem Rechner) entfernt ist.

    Was meinst Du mit dem letzten Absatz?

    Server mit 2,6 GHz Prozessor. Hier wäre die Anbindung beider VMs ja nicht schlecht, wenn der Prozessor in der Lage wäre das der vSwitch schnell überträgt. Da dies nicht der Fall ist und die Anwendung vom 2,6 GHz Prozessor auch nicht gerade flott unterstützt wird ist die Antwortzeit mit 20 Minuten schlecht.

    Jetzt das ganze auf zwei physische Rechner aufgeteilt (habe dafür zwei Desktoprechner genommen und dort den Inhalt der VMs eingespielt, liefen also ohne Virtualisierung: 7 Minuten. Hier hätten Datenbank und Applikation schon schneller arbeiten können, aber wenn die Daten über 1 GBit/s Netzwerk nicht schneller ankommen können die beiden Teile nicht weitermachen.

    Dann beide VMs auf dem 4 GHz Rechner, hier liegt die Antwortzeit bei 2:xx Minuten. Man sieht das die Prozessorauslastung am Datenbankserver steigt, interpretiere ich das er flotter die Anfragen bekommt, schneller die Antworten sendet und so fort.

    Zumindest beim Server sehe ich im Taskmanager das die 2,6 GHz nicht schwanken. In den VMs habe ich Energieeinstellung auf "Maximum" gesetzt.

    Wahrscheinlich ist die Frage im Bereich Datenbank besser aufgehoben?

    https://social.technet.microsoft.com/Forums/office/de-DE/69826837-6394-4153-851c-37c9a6383e9b/laufender-datenverkehr-zwischen-applikationsserver-und-datenbankserver-hardware-zur-beschleunigung?forum=sqlserverde

    Aber eine Frage kannst Du mir hoffentlich beantworten oder jemand anderes? Geht es um den vSwitch, gibt es da etwas Richtung Hardware zu beachten? Oder wird der alleine nur vom Prozessor "emuliert" und alles andere ist nur für die Anbindung an die physische Netzwerkkarte ein Thema und für den Durchsatz zwischen den VMs spielt das keine Rolle?


    • Bearbeitet ITProFromGermany Samstag, 25. Mai 2019 22:26 Verlinkung zur Frage im Datenbankforum, kBit in Mbit/s geändert
    Samstag, 25. Mai 2019 21:46
  • Betrifft das nicht dieselbe Anwendung:
    https://social.technet.microsoft.com/Forums/de-DE/69826837-6394-4153-851c-37c9a6383e9b/laufender-datenverkehr-zwischen-applikationsserver-und-datenbankserver-hardware-zur-beschleunigung?forum=sqlserverde

    Da du den Datenstrom ja bereits analysiert hast, deutet dies eben auf besonders viele einzelne Abfragen hin.
    Dies ließe sich eher programmtechisch zusammenfassen um eben weniger Abfrage mit dem selben Ergebnis zu erreichen.

    Ansonsten hilft dir da eher weniger ein dickerer SQL-Server sondern derer gleich mehrere über verschiedene CPU's verteilt sowie ein Clustering des SQL-Servers um die Last stärker zu verteilen.
    Wenn denn allerdings eine einzige Anwendung bereits mehrere 100 oder 1000 Abfragen hintereinander abfeuert, dann hilft dir auch kein Clustering oder sonstige Hardwarebeschleunigung.
    Das Problem ist dann die Softwarfe!
    Für meine BI-Anwendung verwende ich bereits programmseitig eine parallele Abfragetechnik über mehrere Connections gleichzeitig. Dies ist dann auch mit nur 1 Server performant.

    Sonntag, 26. Mai 2019 10:34