verwendetes Datenbanksystem: <mysql>
also ich habe nen 2ten rechner im netzwerk via wlan angebunden...
ich mache ausm proggi nen query, der mit 6000 werte zurückliefert... das klappt alles super - nur bin ich mit der ausführungsgeschwindigkeit unzufrieden - es handelt sich um ein normales select, also nix wildes... laut query browser ist ausführungszeit aufm server 0,3sek
das ding kommt im querybrowser erst nach 8sek und bei mir erst sogar im c#proggi nach 9-10sekunden an... was kann man da machen... es geht ja, aber unverschämt langsam?! 😦
OdbcDataReader reader = new OdbcCommand(query, db).ExecuteReader();
ich habe die ausführungszeit auf diese zeile lokalisiert, also es liegt nicht wirklich am dbConnect -> der zwar auch mit ner sek zu lange dauert .-/
jetzt habe ich mal den mysql connector genommen:
< -> 1 : 00:00:00.5625000 // nachm db connect
< -> 2 : 00:00:08.2968750 // nachm var reader = new MySqlCommand(query, conn).ExecuteReader(); ausführen
es ist mysql aus dem xaamp paket...
Hallo,
ich würde an deiner Stelle anstatt von ODBC den MySQL .NET Provider benutzen.
Vermute mal Stark das der ODBC-Treiber der engpass ist.
http://dev.mysql.com/downloads/connector/net/5.2.html
Mfg,
Daniel
jetzt habe ich mal den mysql connector genommen:
< -> 1 : 00:00:00.5625000 // nachm db connect
< -> 2 : 00:00:08.2968750 // nachm var reader = new MySqlCommand(query, conn).ExecuteReader(); ausführen
habe natürlich beide getestet... das ändert alles nix
Wenn du die Query auf dem server im Explorer machst, fehlt die Anmeldung.
Die dauert bei WLan aufgrund der ganzen Päckchen die da hin und her gehen
recht lange.
Ab der 2. Verbindung wird das dank Connectionpooling besser.
Aber MySql ist über das netz sowieso eher langsam gegenüber echten datenbanken.
Hi,
Wie groß ist denn die Datenmenge die du abfragst?
Auch wenn es höchst wahrscheinlich am Netzwerktraffic liegt könnte man das nochmal testen indem man sich z.B. nur die IDs holt - Das sollte dann ja um einiges zügiger gehen.
btw:
DbCommand- und DbReader-Objekte sollten nach Verwendung Disposed werden. ;P
(Falls du den Befehl nicht nur übersichtshalber einzeilig gemacht hast)
Grüße
Schaut mal im IRC vorbei:
Server: irc.euirc.net
Channel: #C#
also wenn ich 3 datensätze bestehend aus 4 werten (id, double, double, timestamp)
8 sekunden... ich habe jetzt auch mal mysql server von der seite genommen und nicht dieses xaamp... es lahmt...
die tabelle aus der es gezogen wird, hat etwa 1million datensätze... eigentlich habe ich die indizes nach oben geschraubt, aber trotzdem lahmt es...
wenn du mysql einsetzen willst oder auch musst, solltest du dich zwingend mit MySQL Administration beschäftigen. Ein MySQL-Server richtig zu konfigurieren lernt man nicht in ein paar Stunden oder auch Tagen.
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
also ich habe jetzt mal sql server 2008 installiert und sie da... von 0.0x bis 1sek max dauert da der zugriff via c# insgesamt, wobei wenn dann die meiste zeit fü das open der connection drauf geht...
ergo mysql = schrott
ergo mysql = schrott
Falsch, du kannst mysql nicht als Schrott bezeichnen, nur weil du es nicht konfigurieren kannst! MySQL ist immer noch einer der meistgenutzten Datenbanken im Bereich WebApplikation. Das wäre sicherlich nicht so, wenn die Datenbank schrott wäre. Es gibt aus gutem Grund die Berufsbezeichnung Datenbankadministrator!
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Ich benutze den DevArt Connector als Provider für MySql-Verbindungen, und der ist schnell. Es liegt am Provider. (dass die von Sun tatsächlich die Bezeichnung "Schrott" verdienen, ist kein Geheimnis. Sun halt.)
LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
habe den jetzt glei auch mal getestet - ist nicht signifikant besser in meiner produktumgebung... was aber sauschnell ist ist sql srv 2008 -> zentel sekunden für die gleiche operation!
Also ich vermute, dass an irgendeiner Stelle Deiner Konfiguration von MySql etwas nicht stimmt. Ich selber behandle im Testumfeld derzeit zwar nur rund 4.000 Datensätze, aber um diese aus einer ca. 20MB großen Access-Datein (lies: Kalle vermied bewusst den Begriff Datenbank) mit massiven JOIN
-Statements ohne Indizies aus mehreren Tabellen auszulesen, in C# zu prüfen, teils Strings zu splitten und neue zusammenzusetzen und dann auf mehrere Tabellen in MySql (InnoDb) in einer Transaktion zu schreiben, braucht es bei mir rund 5 (INSERT
) bzw. 2 (UPDATE
) Sekunden.
MySql wird auf einem Linux-Server (älterer AMD, also nicht der Knaller, 2 GB) über TCP/IP im Netz über eine ca. 5MB/s breite symmetrische DSL-Leitung angesprochen. Die Access-Datei befindet sich ebenfalls auf dem Server in einem über Samba-VSCAN verwalteten Netzwerk-Pfad. Den Server bringt die Aktion nicht einmal auf 25% Belastung. Der Client ist ein drei Jahre alter Aldi-PC mit 1GB in der VS-Umgebung, also auch nicht der Knaller, der sich nebenbei noch mit dem DVBViewer und anderem sinnlosen Zeug rumschlagen muss (leichtes Ruckeln der Nachrichten).
Die Implementierung nutzt die BackgroundWorker
-Klasse und nutzt in der Spitze 7 MySql- und 10 Access-Verbindungen gleichzeitig. Für MySql wird die Verbindung über den MySqlConnector v 5.2.5 genutzt.
Hinrich
den habe ich auch getestet... wie gesagt sql srv braucht weniger als ne sekunde für die gleiche abfrage...