Der folgende Befehl dauert 2-3 Sekunden in einem Linux MySQL 5.6 Server, auf dem PHP 5.4 läuft.
%Vor%Bei Fenstern mit ähnlicher Konfiguration dauert es 10-15 Sekunden. Die Windows-Maschine hat viel mehr RAM (16 GB) und ähnliche Festplatte. Ich habe MySQL 5.6 installiert und keine Konfigurationsänderungen vorgenommen. Dies ist auf Windows Server 2012.
Welche Konfigurationen kann ich ändern, um das Problem zu beheben?
Die Datenbankdatei erstellt ungefähr 40 innodb-Tabellen mit sehr minimalen Einfügungen.
EDIT: Hier ist die Datei, die ich gerade laufe:
UPDATE: Auf Windows 8 und 7 waren es 3 Sekunden. Aber auf Windows Server 2012 ist es 15+ Sekunden. Ich habe System Center 2012 deaktiviert und das machte keinen Unterschied.
UPDATE 2:
Ich habe auch versucht, fast jeden Dienst mit Ausnahme von mysql und IIS zu töten, und es lief immer noch langsam. Gibt es etwas in Windows Server 2012, das dies langsam verursacht?
Aktualisierung 3 Ich habe versucht, Schreib-Cache-Puffer zu deaktivieren und die Leistung ist jetzt großartig.
Ich musste das nicht auf anderen Maschinen machen, mit denen ich getestet habe. Zeigt dies einen Engpass bei der Einrichtung der Festplatte?
Deshalb nennen wir es LAMP-Stack und ohne Zweifel ist es so beliebt mysql unter Windows vs. Linux . Aber das hat mehr mit Stabilität und Sicherheit zu tun. Leistungsmäßig sollte der Unterschied minimal sein. Ein Microsoft Professional kann zwar den Windows Server explizit für MySQL einstellen, indem er die Dienste aktiviert und deaktiviert, aber wir wären lieber an der Konfiguration von my.ini
interessiert. Was also könnten die Faktoren sein, die Windows bei MySQL betreffen, die wir in Betracht ziehen sollten
Die Dienste und Richtlinien in Windows sind manchmal ein großes Leistungshindernis wegen aller Arten von Einschränkungen und Schutzmaßnahmen.
Wir sollten auch die Konfiguration von Apache ( httpd.conf
) und PHP ( php.ini
) berücksichtigen, da MySQL so eng mit ihnen verbunden ist.
Antivirus: Deaktivieren Sie dies besser, wenn Sie Leistungsvergleiche durchführen
Sie müssen diese Parameter in my.ini
berücksichtigen, da Sie hier 40 Innodb-Tabellen haben
innodb_buffer_pool_size
, innodb_flush_log_at_trx_commit
, query_cache_size
, innodb_flush_method
, innodb_log_file_size
, innodb_file_per_table
Beispiel: Wenn Dateigröße von ib_logfile0 = 524288000, Then 524288000/1048576 = 500, daher sollte innodb_log_file_size 500M
sein %Vor% Stellen Sie beim Importieren von Daten in InnoDB sicher, dass für MySQL kein Autocommit-Modus aktiviert ist, da hierfür bei jeder Einfügung eine Protokollspeicherung auf der Festplatte erforderlich ist
SET autocommit=0;
Am wichtigsten innodb_flush_log_at_trx_commit
, da in diesem Fall die Datenbank importiert wird. Setzen Sie dies auf '2' Form '1' (Standard) hm kann eine große Leistung Booster speziell während des Datenimports als Protokollpuffer wird bei jedem Transaktion commit
Als Referenz:
Zuletzt basierend darauf
mysql --host=$db_host --user=$db_user --password=$db_password $db_name < $sql_file
Wenn sich die Datei mysqldump (.sql) nicht auf demselben Host befindet, auf dem Sie importieren, ist die Leistung gering. Ziehen Sie in Betracht, die Datei (.sql) genau auf den Server zu kopieren, auf dem Sie die Datenbank importieren müssen, und importieren Sie dann ohne --host
-Option.
Windows ist langsamer beim Erstellen von Dateien, Punkt. 40 InnoDB-Tabellen enthalten 40 oder 80 Dateierstellungen. Da es sich um kleine InnoDB -Tabellen handelt, können Sie auch innodb_file_per_table=OFF
vor der CREATEs
setzen und benötigen daher nur 40 Dateierstellungen.
Gute Praxis in MySQL ist es, Tabellen einmal zu erstellen und nicht Tabellen häufig zu erstellen / löschen. Wenn Ihre Anwendung für viele CREATEs ausgelegt ist, sollten wir uns darauf konzentrieren. (Beachten Sie, dass die Erstellungszeit für Tabellen selbst unter Linux nicht trivial ist.)
Wenn dies temporäre Tabellen sind ... 5.7 wird signifikante Änderungen haben, die die Leistung (auf jedem Betriebssystem) in diesem Bereich verbessern werden. 5.7 steht kurz davor, GA zu sein.
(RAM-Größe ist in dieser Situation nicht relevant.)
Tags und Links mysql