fragen stichworte

MySQL 5.5 verschlechterte die Leistung im Linux-Kernel 3.2 im Vergleich zu 2,6

Unsere Datenbankserver (die hauptsächlich auf den stabilen Debian-Paketen (= derzeit Wheezy) basieren, haben anscheinend etwa 4 mal more für die gleiche Auslastung im Kernel 3.2.0-4-amd64 zu laden, als im vorherigen 2.6.32-5-amd64 Kernel: Mit allen Paketen, die im anderen Kernel identisch sind, können wir den Unterschied deutlich erkennen, und ich weiß nicht, warum. Das Problem ist, dass ich nicht so viel IO- oder CPU-Lastdifferenz sehe.

Festlegen der Standardeinstellung für kernel.sched_min_granularity_ns & amp; kernel.sched_latency_ns Zurück zu den 2.6.32 -Werten hilft etwas (dreimal die Last statt viermal), aber nicht auf das Niveau, das wir möchten. Da sich viele Kerneleinstellungen geändert haben, können wir den neuen Kernel kaum blind auf die alten Standardwerte von 2.6 setzen.

Hat sonst noch jemand Erfahrung damit gemacht? Wenn ja, woran liegt das (und idealerweise: wie könnte es gelöst werden)?

Da es sich um einen tiefen Kernel handelt, könnte ein Unterschied in den sysctl-Werten von Interesse sein: Hier ist ein Unterschied der 2 (Pastebinned, um eine zu lange Frage zu verhindern).

edit: Derzeit untersuchen wir diese SO-Antwort, um zu sehen, ob dies zutrifft.

antworten

Die Linux-Kernel 3.0 - 3.8 sollten vermieden oder aktualisiert werden, um die Verschlechterung der IO-Leistung zu beheben

Die Leistungseinbuße des Linux-Kernels wurde von Josh Berkus unter Verwendung eines privaten Benchmark-Workloads demonstriert, der gegen PostgreSQL 9.3 auf Ubuntu 12.04 mit Kernel 3.2.0 läuft.

"... Sie müssen wirklich jeden Kernel zwischen 3.0 und 3.8 vermeiden. Während RHEL bei den 2.6-Kerneln geblieben ist (die ihre eigenen Probleme haben, aber nicht so schlimm sind), hat Ubuntu verschiedene 3.X veröffentlicht Kernel für 12.04 ... upgegradet ... zu Kernel 3.13.0, und lief die gleiche genaue Workload ... eine 80% ige Reduzierung der IO.Wir können den schlauen Leuten in der Linux FS/MM-Gruppe danken, dass sie ein ganzes System runtergehackt haben Leistungsprobleme. "

Siehe http://www.databasesoup.com/2014/09/why-you-need-to-avoid-linux-kernel-32.html

Ich habe ein Problem in DBA StackExchange bezüglich Kernel und Journaling angesprochen. Ich habe dies im Mai von Percona erfahren, dass tatsächlich ein gewisses Spülverhalten simuliert wird.

  • Möglicherweise müssen Sie die Art der Journalerstellung ändern.
  • Möglicherweise müssen Sie InnoDB abstimmen
    • Lockern der ACID-Kompatibilität für die Schreibleistung (Einstellung innodb_flush_log_at_trx_commit auf 0 oder 2)
    • Größere Protokolldateien
    • Größerer Protokollpuffer

Vielleicht ist die gemeldete Last einfach nicht korrekt, wie in diesem Fehlerbericht: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=693942

Können Sie sehen, dass es tatsächlich etwas langsamer gibt? Oder sieht Vmstat so aus, als ob der Server wirklich mehr Arbeit leistet? andernfalls würde ich annehmen, dass Sie gerade diesen gemeldeten Fehler getroffen haben, das gleiche ist mir vor einiger Zeit passiert, die Leistung des Servers war nicht anders, nur der ausgegebene Lastdurchschnitt war höher.

Ich habe nicht den Ruf, dies zu kommentieren. Aber da Sie den Kernel aktualisiert haben, haben Sie auch die Version von MySQL aktualisiert? Können Sie auflisten, welche MySQL 5.5.X Sie verwenden?

Ironischerweise haben Fehler in einigen der neueren Versionen von MySQL die Leistung tatsächlich merklich verschlechtert. Sie haben sie natürlich behoben, sie haben sie jedoch behoben, aber sie haben für mich ein erhebliches Rauschen verursacht, während sie Änderungen an meiner App vorgenommen haben.

"InnoDB: Das Update für Fehler # 17699331 verursachte eine hohe Rate beim Erstellen und Zerstören von Lese-/Schreibsperren, was zu einer Leistungsregression führte. (Fehler # 18345645, Fehler # 71708)"

http://dev.mysql.com/doc/relnotes/mysql/5.6/de/news-5-6-19.html

"InnoDB: Eine durch den Fehler # 14329288 eingeführte Regression würde zu einer Leistungsbeeinträchtigung führen, wenn eine komprimierte Tabelle nicht in den Speicher passt. (Fehler # 18124788, Fehler # 71436)"

http://dev.mysql.com/doc/relnotes/mysql/5.6/de/news-5-6-17.html

..etc

Bei 5.5 ist es genauso:

"InnoDB: Eine durch Fehler # 14329288 eingeführte Regression würde zu einer Leistungsbeeinträchtigung führen, wenn eine komprimierte Tabelle nicht in den Arbeitsspeicher passt. (Fehler # 18124788, Fehler # 71436)"

http://dev.mysql.com/doc/relnotes/mysql/5.5/de/news-5-5-37.html

Bringt das Upgrade auf ein neueres MySQL-System zu einer angemessenen Leistung zurück?

MySQL enthält auch einen Kernel-spezifischen Code:

"Asynchronous I/O wird in einigen Linux-Kernel-Versionen nicht von tmpfs unterstützt. Um dieses Problem zu beheben, deaktivieren Sie die Einstellung innodb_use_native_aio oder verwenden Sie ein anderes temporäres Verzeichnis. Bei diesem Update wird die Einstellung innodb_use_native_aio automatisch deaktiviert, wenn dies erkannt wird Das temporäre Dateiverzeichnis unterstützt keine asynchronen E/A. (Fehler # 13593888, Fehler # 11765450, Fehler # 58421) "

"http://dev.mysql.com/doc/relnotes/mysql/5.6/de/news-5-6-5.html

Ich würde also sicherstellen, dass Sie den neuesten Build ausführen.

Nebenbei sei erwähnt, dass MySQL 5.6.X (das jetzt offiziell stabil ist und seit einiger Zeit besteht): "Für Linux zeigt MySQL 5.6 eine bis zu 150% ige Verbesserung des TPS-Durchsatzes gegenüber MySQL 5.5." http://dev.mysql.com/tech-resources/articles/mysql-5.6-rc.html