Hallo,
zuerst zu Software: Windows Server 2008 R2 und Windows SQL Server 2008. Windows Firewall aktiviert.
Problem: bei einer 1 Gbit/s Leitung werden die Daten mit einer maximalen Geschwindigkeit 150 Mbit/s auf dem Webserver empfangen.
Ich möchte betonen - die Leitung ist tatsächlich 1 Gbit/S. Auch die LAN-Karte auf dem Datenbank server (Fujitsu TX 300 S5) kann 1 Gbit/s. Das haben wir mit iperf getestet. Iperf zeigt bei einem Thread maximal 200 Mbit/s, nur bei parallelen Thread kommt man auf 940 Mbit/S (also weder Leitung noch Karte oder LAN-Kabel sind daran Schuld). Die Webserver sind die gleichen Rechner wie DB-Server, jedoch ist es möglich die Dateien zw. den beiden mit ca 940 Mbit/s zu verschicken (beide haben Linux) - also nicht die langsamen Festplatten. Woran könnte es liegen? Reserviert irgendwie der DB-Server (Programm) extra Bandbreite für sich? Oder eventuell liegt das an Windows? Falls noch Infos notwendig sind, bitte fragen
Nicht böse sein, aber ich verstehe fast nur Bahnhof.
Nur soviel: Wenn Du an einen Webserver Daten überträgst, muss der die i.d.R. auch verarbeiten. Auch ist das Protokoll HTTP für den Filetransfer nicht gerade effektiv und hat Einiges an Overhead.
Beschreibe bitte nochmals eakt, Wer mit Wem Was überträgt und wie Du genau gemssen hast. Und beim Schreiben mal kurz Luft holen...
sorry, wollte ganz schnell beschreben, da schon fast Feierabend hatte.
Also wir haben vier (4) Server. Zwei (2) Webserver, auf denen Webservices laufen und zwei (2) Datenbankserver. Auf beiden Webservern ist Linux installiert, auf den DB-Servern Windows Server (2003 und 2008 R2). Hardwaremäßig sieht es so aus: Webserver Fujitsu TX 200 S5 (1*) und Fujitsu TX 200 S6 (2*). DB-Server HP (genau weiß ich leider nicht 3*) und Fujitsu TX 300 S5 (4*).
Wenn die Daten zwischen den beiden Webservern übertragen werden (Backup über scp), liegt die Geschwindigkeit bei 65-70 MB/s (also 500 - 550 Mbit/s), was völlig akzeptabel ist. Wenn ich das mit iperf messe dann werden sogar 950 Mbit/s erreicht.
Das Ziel ist natürlich die Daten genau so schnell von dem DatenbankServer auf den Webserver zu bekommen. D.h. vom 4* auf 1* oder 2*. Die Geschwindigkeit beträgt jedoch nur 22-25 MB/s (170-180 Mbit/s). Da wir oft ganze Menge Daten zurückkriegen wäre ist nicht schlecht, wenn sie schneller übertragen würden.
z.B. die Übertragung der Abfrage Select * From TableBig dauert derzeit 12 Sek - es sind ca. 300 MB.
Wenn es aber keine Geschwindigkeitsbegrenzung gäbe, würden die gleichen Daten innerhalb von vier (4) oder sogar weniger Sekunden übertragen.
Und wenn mit iperf einige client threads parallel gestartet werden (Webserver als iperf-Server und DB-Server als iperf-Client oder umgekehrt), wird auch eine Geschwindigkeit von 950 Mbit/s erreicht. Dagegen ein Thread maximal 200 Mbit/s schafft.
Die Frage war woran kann diese Geschwindigkeitslimitierung liegen? Und Vermutung kann das Batriebsystem oder der SQL-Server diese Limitierung verursachen?
Lan-Kabel (CAT 5e) haben wir getestet. Es ist der gleiche Chip auf dem DB-Server wie auf den Webservern eingebaut (laut specs).
Da sowohl iperf als auch die normale Übertragung der Daten (Abfrage) die gleich Geschwindigkeit erreicht, liegt es nicht am Protokoll, weil die beiden Webserver über iperf 950 Mbit/s erreichen
iperf - ist ein Traffikgenerator zum Testen der Netzwerkkapazität.
Wenn also andere Protokolle keine Probleme zeigen (z.B. File Copy) muss man sich im Detail mit den Anwendugen auseinander setzen. Eine SQL-Query läuft halt eine gewisse Zeit und kostet CPU-Zyklen. Eine 2. Query kann z.B. eine andere CPU verwenden und daher zusammen mit der 1. Query die LAN-Verbindung auslasten.
Hier ist ein Datenbank-Profi gefragt, der die Datenbankumgebung analysiert und optimiert. Oft bringt es was geeignete Indizes zu setzen. Der MS-SQL-Server (Beispiel) liefert geeignete Tools mot um Queries zu analysieren und Vorschläge für Indizes u.ä. zu machen.
SQL-Server 2008 als Datenbank.
Die Query wird weniger als eine Sekunde verarbeitet (vor allem die Queries der Art Select * From Table sind ja keine CPU-Zeit fressende Queries, dafür sind auch keine Indizes notwendig), sobald die Abfrage rausgeht, sehe ich schon, dass eine Antwort zurückkommt. Und die Indizies wurden gesetz sowie andere mögliche Optimierungsmaßmahmen wurden schon durchgeführt.
Generell egal welche Übertragungsmethode zwischen Web- und dem DB-Server zum Einsatz kommt - pro Kanal (Thread) werden maximal 200 Mbit/s übertragen.
Deswegen wird das entweder vom Betriebsystem oder vom SQL-Server limitiert!!Aber das ist nur eine Vermutung, jedoch möchte ich gerne das genau wissen und eventuell eine Lösung bekommen.
die Festpaltten (wenn du es meinst) sind ein RAID5. Die Schreibgeschwindigkeit habe ich heute gemessen - 270 MB/s - also mehr als ausreichend für 1G. Hier ist ein Test: http://www.tomshardware.de/raid-5-sk...hte-867-4.html - da ist deutlich zu sehen, dass selbst bei 3 Festplatten die minimale Geschwindigkeit bei 100 MB liegt. Also Bottleneck ist woanders