Ich bin dabei, einen Datenbankserver (MySQL) im OpenVZ-Container einzurichten, und habe mich gefragt, wie viele CPUs ich ihm zuweisen soll. Ich entschied mich für ein Benchmarking. Ich habe zwei OS / MySQL-Distributionen verglichen und getestet, wie sie mit 1, 2, 3 und 4 CPUs funktionieren.
Die erste Softwarekonfiguration war:
- CentOS Release 6.5 (Final)
- mysql Ver 14.14 Distrib 5.1.71 für redhat-linux-gnu (x86_64) mit readline 5.1
Der Zweite:
- Debian GNU / Linux 7 \ n \ l
- mysql Ver 14.14 Distrib 5.5.31 für debian-linux-gnu (x86_64) mit readline 6.2
Beide liefen auf demselben Kernel - 2.6.32-openvz-042stab083.2-amd64 # 1 SMP Fr 8. November 17:59:25 MSK 2013 x86_64 GNU / Linux.
Die gesamte Software wurde aus Paketen installiert und ohne benutzerdefinierte Konfigurationsanpassungen sofort verwendet.
Hardware: 6 GB RAM, 1-4 CPUs 3,5 GHz.
Für das Benchmarking habe ich sysbench mit dem folgenden Szenario verwendet:
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --db-driver=mysql --mysql-password=d prepare
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --db-driver=mysql --mysql-password=d --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 run
In beiden Fällen war die Engine der Tabelle InnoDB.
Die Ausgabe, die ich betrachtete, war die Anzahl der Transaktionen pro Sekunde. Die Ergebnisse waren ziemlich stabil - der Fehler betrug weniger als 1%.
Die Ergebnisse waren gut und wurden für CentOS / MySQL5.1 erwartet, aber für Debian / MySQL5.5 sehr seltsam:
Wie Sie vielleicht sehen, nutzt MySQL5.5 unter Debian mehrere CPUs nicht richtig aus. Während die Leistung mit 2 CPUs höher ist als mit 1, ist sie deutlich niedriger als unter CentOS / MySQL5.1. Außerdem geht es runter, wenn wir mehr CPUs über 2 hinzufügen, was wirklich komisch ist.
Kann mir bitte jemand erklären, was dort los ist? Warum um alles in der Welt würde MySQL schlechter abschneiden, wenn wir CPUs hinzufügen?
quelle
Antworten:
Nicht um irgendjemandes Vermutungsblase zu platzen, aber dies ist ein Fehler in MySQL 5.5 .
quelle
Nun, es ist eine wirklich wichtige Frage, ohne vorher etwas über die Architektur zu wissen, die Sie ausführen. Aber im Allgemeinen gibt es einen exponentiellen Einfluss auf den Busdurchsatz, wenn Sie die CPU-Kapazität hinzufügen, insbesondere die Architektur, die mehrere Multi-Core-Prozessoren unterstützt. Halten Sie einfach inne und überlegen Sie einen Moment Die Auswirkungen auf den Interrupt-Zyklus über die jeweils eingesetzte Busbandbreitenbeschränkung hinweg ... in jedem Fall von Leistung ... Wenn Sie verstehen, dass Ihre Architektur entweder Flaschenhals-E / A oder Bits pro Zyklus enthält, denken Sie erneut daran, dass mehrere CPUs mehrere Threads benötigen .. also unabhängig von der Geschwindigkeit Ihres FSB ... Wenn Ihre Hardware nur 64 Bit beträgt, muss die physische elektrische Konnektivität diese Einschränkung auf so viele Kerne im selben Taktzyklus verteilen ...Halten Sie jetzt inne und denken Sie an die positiven Auswirkungen eines Upgrades von einer 64-Bit- auf eine 256-Bit-Systemplatine. Bei voller Neigung erhalten Sie möglicherweise einen x3-mal besseren Durchsatz, da x1 für das Einfädeln / Aufrechterhalten des Betriebsaufwands aufgewendet wird. Während des normalen Betriebs kann dies jedoch auftreten Eine unangenehme Realität in Bezug auf den Overhead, wenn Sie nur einen einzigen Prozessor / Operator benötigen. Ich denke, es ist ein Balanceakt oder genauer gesagt das richtige Pferd für den richtigen Kurs. Steveo Reedo [email protected] denke, es ist ein Balanceakt oder genauer gesagt das richtige Pferd für den richtigen Kurs. Steveo Reedo [email protected] denke, es ist ein Balanceakt oder genauer gesagt das richtige Pferd für den richtigen Kurs. Steveo Reedo [email protected]
quelle
Wenn Sie CPUs hinzufügen, führt das Ding mehr Operationen parallel aus. Wenn Sie die Anzahl der RAMs nicht erhöht haben, kann es zu einem Austausch kommen, insbesondere wenn Sie eine dickere (und neuere, meistens dickere) Version der zu testenden Software verwenden.
quelle