MySQL - "Einsätze" Geschwindigkeit Unterschied zwischen der Fertigung und der lokalen Umgebung ist zu gross!

StackOverflow https://stackoverflow.com/questions/1078302

Frage

Ich installierte MySQL-5.1 x-Instanz auf einem Linux-Rechner (768MB RAM).Ich wieder ein backup über 1000 Zeilen und durch meine .NET-Anwendung (Deployment auf einem anderen Windows-webserver) den von mir ausgeführten bestimmte lese-Operationen, die, wenn man bedenkt, dass in der Tabelle keine Indizes, waren schnell.

Ich dann gelöscht und den server aus diese Zeilen und haben eine Funktion in meiner web-Anwendung auf dem anderen server einfügen von Zeilen (im Grunde, ich lese text aus einer text-Datei, die Eingabe der Daten in die Felder einer benutzerdefinierten Klasse, und dann zum aufrufen einer gespeicherten Prozedur mit diesen Parameter für jeden Datensatz).Wenn ich die website und die Datenbank sowohl auf meinem lokalen Rechner, ich würde einfügen 2500 Zeilen sofort (weniger als eine Sekunde).Nun aber, in der "Produktions" - Umgebung, die gleichen 2500 Zeilen unter 10 Minuten eingefügt werden.Ich bin mit dem Standard meiner.cnf, dass kommt mit der installation von MySQL.

Gibt es irgendeine Weise, die ich optimieren kann, schreibt ohne Kompromisse bei der Geschwindigkeit von schreib-Operationen?Oder bin ich etwas fehlt offensichtlich?

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Haben Sie angeschaut das MySQL-Handbuch Seite einfügen speed?Die erste Vermutung, dass kommt zu Geist für mich ist, dass Sie nicht die Verpackung der Satz von 2500 Verfahren in einem Begin Transaction/Commit Aussage, also MySQL ist autocommitting jeden der 2500-Aktionen.

Andere Tipps

Zusätzlich zu dem problem erwähnt von Mark (auto-commit statt Transaktion), würde ich auf jeden Fall untersuchen, mit batch-updates.Denn einen gravierenden Unterschied zwischen eine lokale Verbindung und eine Netzwerk-Verbindung (auch eine sehr schnelle ein -) ist der roundtrip-Zeit.

Während die Bandbreite ist wahrscheinlich nicht der limitierende Faktor in diesem Fall tun 2500 Netzwerk-roundtrips zur Datenbank und wieder zurück wird definitiv viel länger dauern, Sie auf ein Netzwerk, als auf dem lokalen Computer.

Über eine batch-update kann reduzieren die Einsätze auf eine einzelne Rundreise ideal und nur wenige in der Praxis.

Leider kann ich Ihnen nicht sagen, wie zu tun, batch-updates in der .NET-Welt, in Java, die Sie verwenden würden PreparedStatement.addBatch().Ich bin sicher, es gibt etwas ähnliches .NET.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top