Bioinformatiker 10 Geschrieben 14. Juli 2011 Melden Teilen Geschrieben 14. Juli 2011 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 Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 14. Juli 2011 Melden Teilen Geschrieben 14. Juli 2011 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... Zitieren Link zu diesem Kommentar
Bioinformatiker 10 Geschrieben 14. Juli 2011 Autor Melden Teilen Geschrieben 14. Juli 2011 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. Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 14. Juli 2011 Melden Teilen Geschrieben 14. Juli 2011 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. Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 14. Juli 2011 Melden Teilen Geschrieben 14. Juli 2011 Was für eine DB ist im Einsatz? Zitieren Link zu diesem Kommentar
Bioinformatiker 10 Geschrieben 14. Juli 2011 Autor Melden Teilen Geschrieben 14. Juli 2011 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. Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 14. Juli 2011 Melden Teilen Geschrieben 14. Juli 2011 Du sagst ja selbst das du mit iperf die Netzwerkgeschwindigkeit misst. Schonmal nach den Disks geschaut? Da vermute ich eher den Flaschenhals. Zitieren Link zu diesem Kommentar
Bioinformatiker 10 Geschrieben 14. Juli 2011 Autor Melden Teilen Geschrieben 14. Juli 2011 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-skalierung,testberichte-867-4.html - da ist deutlich zu sehen, dass selbst bei 3 Festplatten die minimale Geschwindigkeit bei 100 MB liegt. Also Bottleneck ist woanders Zitieren Link zu diesem Kommentar
Bioinformatiker 10 Geschrieben 15. Juli 2011 Autor Melden Teilen Geschrieben 15. Juli 2011 Gibt es keine Ideeen mehr? Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 15. Juli 2011 Melden Teilen Geschrieben 15. Juli 2011 Hallo Bioinformatiker, Willkommen am Board :) Wie ist es mit der üblichen Hauptverdächtigen, der Namenauflösung, könnte die eine Rolle spielen? Wie ist denn die Namenuflösung realisiert? Könnte die Einstellung flow control des Netzwerkinterfaces eine Rolle spielen? Steht in den Verzichnisanzeigen eventuell etwas Erhellendes oder Verwirrendes? Handelt es sich eigentlich um eine Domäne? Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 15. Juli 2011 Melden Teilen Geschrieben 15. Juli 2011 Hallo, Geh nicht nur auf die absoluten Werte los. Untersuch doch mal, ob Netzwerkkarte, Plattensystem, Prozessor etc. Warteschlangen haben. Ich halte mich da immer an den Performanceguide in der Technischen Referenz. Mit SQLServer kenn ich mich leider kaum aus. Aber ein schlecht designter SQLServer (tempdb, Systemdatenbank, Transaktionsprotokolle etc) kann einem die Performance jedenfalls auch verhageln. Bestimmt gibts für SQL ebenso Performanceguides. blub Zitieren Link zu diesem Kommentar
iDiddi 27 Geschrieben 15. Juli 2011 Melden Teilen Geschrieben 15. Juli 2011 die Festpaltten (wenn du es meinst) sind ein RAID5 Wenn einem Geschwindigkeit wichtig ist, dann setzt man kein RAID5 ein. Das ist das langsamste RAID, was Du haben kannst. Und beim SQL-Server sollte man auch die DBs und die LOGs auf unterschiedliche Datenträger legen. Auch eine andere Partition reicht da nicht aus, da es ja trotzdem die gleichen Schreib/Leseköpfe bleiben ;). Ob das jetzt alleine für Deinen Flaschenhals verantwortlich ist, weiß ich allerdings auch nicht. Zitieren Link zu diesem Kommentar
Bioinformatiker 10 Geschrieben 16. Juli 2011 Autor Melden Teilen Geschrieben 16. Juli 2011 Hallo, vielen Dank für eure Antworten Hallo Bioinformatiker, Willkommen am Board :) Wie ist es mit der üblichen Hauptverdächtigen, der Namenauflösung, könnte die eine Rolle spielen? Wie ist denn die Namenuflösung realisiert? Könnte die Einstellung flow control des Netzwerkinterfaces eine Rolle spielen? solche Sachen werden von dem Rechenzentrum geregelt und wir haben gar keinen Einfluss drauf (glaube ich zumindest). Unsere Rechner bekommen immer eine IP vom Rechenzentrum, die wir in die Einstellungen der Netzwerkkarte eintragen. Wie dort (RZ) die Namensauflösung realisiert ist, weiß ich leider nicht. Der DBserver wird aber direkt über seine IP angesprochen. Das Ganze läuft über FreeTDS (linux - windows Schnitstelle für PHP-SQL). Geh nicht nur auf die absoluten Werte los. Untersuch doch mal, ob Netzwerkkarte, Plattensystem, Prozessor etc. Warteschlangen haben. Ich halte mich da immer an den Performanceguide in der Technischen Referenz. Wenn die Daten zurückkommen ist ein Kern der CPU immer voll ausgelastet. Das haben wir schon gemerkt. Aber die CPU übernimmt dann die Aufgaben des LAN-Chipsatztes oder hilft der RAID-Karte. Wenn erste - dann hilft eventuell der Kauf einer extra 1G LAN-Karte (Oder?). Wenn zweite - dann ist die dedizierte RAID-Karte einfach zu schlecht. Wofür ist die dann überhapt da wenn die CPU für sie noch was macht? Wenn einem Geschwindigkeit wichtig ist, dann setzt man kein RAID5 ein. Das ist das langsamste RAID, was Du haben kannst. Und beim SQL-Server sollte man auch die DBs und die LOGs auf unterschiedliche Datenträger legen. Auch eine andere Partition reicht da nicht aus, da es ja trotzdem die gleichen Schreib/Leseköpfe bleiben . DA kann ich auch nicht viel zu sagen. Mir ist grade aufgefallen: könnte es an den Einstellungen des Controllers liegen? Wie z.B Buffer Size oder was da gibt? Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 16. Juli 2011 Melden Teilen Geschrieben 16. Juli 2011 Kannst du den Ausführungsplan des SQL Querys zeigen, welches so langsam geht? Geht Dateiübertrgaung (z.B. per SCP) vom DB Server zum Webserver (und anderst herum) schneller? EDIT: 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. Ach ja. Wo wird dieses Testquery ausgeführt? Auf dem DB oder auf dem Webserver? Gibt es Unterschiede bei beiden Fällen? Zitieren Link zu diesem Kommentar
Bioinformatiker 10 Geschrieben 16. Juli 2011 Autor Melden Teilen Geschrieben 16. Juli 2011 Kannst du den Ausführungsplan des SQL Querys zeigen, welches so langsam geht? Geht Dateiübertrgaung (z.B. per SCP) vom DB Server zum Webserver (und anderst herum) schneller? Was meinst du mit dem Ausführungsplan? Select * FROM TabelleGroß - Das sind 1.800.000 Zeilen und glaube maximal 20 Spalten (bin grade zuhause). Alle Werte sind entweder Int, Float oder VARCHAR (bis 400). Oder willst du sehen wie SQL-Statement vom Query-Prozessor in die relationalle Algebra umgewandelt wird? SCP habe ich nicht getestet, jedoch iperf zeigt ungefähr die gleichen Werte (wie ich oben schrieb). Jedoch SCP (Backup) zwischen dem Webservern (1 und 2) läuft bei 65-75 MB/S (also bis 550 Mbit/S), wähgrend iperf bis 950 schafft (da vlt nur den Arbeitspeicher dafür nutzt und nix auf die Festplatten schreibt). Also hätten wir eine der SCP ähnliche Geschwindigkeit zw DB und WEbserver wäre es schon OK. Aber es sind leider 160-180 MBit/S. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.