Unsere Datenbankserver (hauptsächlich basierend auf den stabilen Debian-Paketen (= derzeit Wheezy)) scheinen bei gleicher Arbeitslast im Kernel etwa viermal mehr Last zu haben als 3.2.0-4-amd64
im vorherigen 2.6.32-5-amd64
Kernel. Wenn alle Pakete gleich sind und im anderen Kernel booten, können wir dies eindeutig Ich sehe den Unterschied und weiß nicht, warum. Das Problem ist, dass ich nicht so viele Unterschiede bei der E / A- oder CPU-Last sehe.
Das Setzen der Standardeinstellung kernel.sched_min_granularity_ns
und das Zurücksetzen kernel.sched_latency_ns
auf die 2.6.32
Werte hilft ein wenig (dreimal statt viermal), aber nicht auf das gewünschte Niveau. Da sich viele Kerneleinstellungen geändert haben, können wir den neuen Kernel kaum blind auf die alten Standardwerte des 2.6
einen setzen.
Hat noch jemand Erfahrung damit? Wenn ja, was hat dies verursacht (und im Idealfall: Wie könnte es gelöst werden)?
Da es sich um einen tiefen Kernel handelt, könnte möglicherweise ein Unterschied in den Sysctl-Werten von Interesse sein: Hier ist ein Unterschied der 2 (eingefügt, um eine zu lange Frage zu vermeiden).
Bearbeiten : Derzeit untersuchen wir diese SO-Antwort , um festzustellen, ob dies zutrifft.
quelle
Antworten:
Linux-Kernel 3.0 - 3.8 sollten vermieden oder aktualisiert werden, um die Verschlechterung der E / A-Leistung zu beheben
Die Leistungsverschlechterung der Linux-Kernel-E / A wurde von Josh Berkus anhand einer privaten Benchmark-Workload demonstriert, die unter PostgreSQL 9.3 unter Ubuntu 12.04 mit Kernel 3.2.0 ausgeführt wird.
"... Sie müssen wirklich jeden Kernel zwischen 3.0 und 3.8 vermeiden. Während RHEL an den 2.6-Kerneln festgehalten hat (die ihre eigenen Probleme haben, aber nicht so schlimm sind), hat Ubuntu verschiedene 3.X-Kernel für 12.04 veröffentlicht ... ein Upgrade ... auf Kernel 3.13.0 durchgeführt und genau die gleiche Arbeitslast ausgeführt ... eine Reduzierung der E / A um 80%. Wir können den intelligenten Mitarbeitern der Linux FS / MM-Gruppe dafür danken, dass sie eine ganze Reihe von Leistungen erbracht haben Probleme."
Weitere Informationen finden Sie unter http://www.databasesoup.com/2014/09/why-you-need-to-avoid-linux-kernel-32.html
quelle
Ich habe im DBA StackExchange ein Problem mit dem Kernel und dem Journaling behoben . Ich habe dies bereits im Mai von Percona erfahren, dass ein bestimmtes Flush-Verhalten tatsächlich simuliert wird.
quelle
Möglicherweise ist die gemeldete Last einfach nicht korrekt, wie in diesem Fehlerbericht: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=693942
Kannst du sehen, dass es tatsächlich etwas langsameres gibt? oder sieht vmstat so aus, als würde der server wirklich mehr arbeiten? Andernfalls würde ich annehmen, dass Sie gerade diesen gemeldeten Fehler getroffen haben. Dasselbe ist mir vor einiger Zeit passiert. Die Leistung des Servers war nicht anders, nur der Durchschnitt der ausgegebenen Last war höher.
quelle
Ich habe nicht den Ruf, dies zu kommentieren. Aber als Sie den Kernel aktualisiert haben, haben Sie auch die Version von MySQL aktualisiert? Können Sie auflisten, welches MySQL 5.5.X Sie ausführen?
Ironischerweise haben Fehler in einigen der neueren Versionen von MySQL die Leistung spürbar verschlechtert. Sie haben sie natürlich behoben, aber es hat bei den Änderungen in meiner App ein erhebliches rotes Gehör für mich verursacht.
"InnoDB: Das Update für Fehler # 17699331 verursachte eine hohe Rate an Lese- / Schreibsperren, die zu einer Leistungsregression führten (Bug # 18345645, Fehler # 71708)."
http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-19.html
"InnoDB: Eine durch Bug # 14329288 eingeführte Regression würde zu einer Leistungsverschlechterung führen, wenn eine komprimierte Tabelle nicht in den Speicher passt. (Bug # 18124788, Bug # 71436)"
http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-17.html
..usw
Für 5.5 ist es genauso:
"InnoDB: Eine durch Bug # 14329288 eingeführte Regression würde zu einer Leistungsverschlechterung führen, wenn eine komprimierte Tabelle nicht in den Speicher passt. (Bug # 18124788, Bug # 71436)"
http://dev.mysql.com/doc/relnotes/mysql/5.5/en/news-5-5-37.html
Wird durch ein Upgrade auf ein neueres MySQL wieder eine angemessene Leistung erzielt?
MySQL enthält auch einen kernelspezifischen Code:
"In einigen Linux-Kernelversionen wird asynchrone E / A auf tmpfs nicht unterstützt. Die Problemumgehung bestand darin, die Einstellung innodb_use_native_aio zu deaktivieren oder ein anderes temporäres Verzeichnis zu verwenden. Der Fix bewirkt, dass InnoDB die Einstellung innodb_use_native_aio automatisch deaktiviert, wenn die temporäre Datei erkannt wird Verzeichnis unterstützt keine asynchrone E / A. (Fehler # 13593888, Fehler # 11765450, Fehler # 58421) "
" http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-5.html
Ich würde also sicherstellen, dass Sie den neuesten Build ausführen.
Nebenbei bemerkt, MySQL 5.6.X (das jetzt offiziell stabil ist und schon seit einiger Zeit): "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
quelle
Ich hatte große Probleme mit der MySQL-Leistung, als ich von Debian mit Kernel 2.6 und MySQL 5.1 zu Debian mit Kernel 3.2 und MySQL 5.5 (keuchend) wechselte.
Was das Problem für MySQL löste, war Barriere = 0 in / etc / fstab. Überprüfen Sie https://wiki.archlinux.org/index.php/Ext4
quelle