Servereigenschaften
- Gesamtsystem-RAM: 8 GB (mit MySQL + anderen Dingen als MySQL, dh nicht für MySQL)
- Anzahl der CPU-Kerne: 6
- Ich habe Daten in der Datenbank in Höhe von ca. 2 GB
- Ich habe InnoDB Buffer Pool Size auf 4 GB eingestellt
Welches ist besser:
- Innodb Buffer Pool Instances auf 1 gesetzt?
- Innodb Buffer Pool Instances auf 2 gesetzt (jeweils 2 GB)?
- Innodb Buffer Pool Instances auf 4 gesetzt (jeweils 1 GB)?
- Innodb Buffer Pool Instances auf 8 gesetzt (Standardeinstellung)
Ich bin mir daher nicht sicher, wie ich argumentieren soll, wenn es um Pufferpoolinstanzen geht, und auch nicht, wie man "Instanzen verwendet oder OS Swap erleidet, wenn man eine so große InnoDB-Pufferpoolgröße hat".
mysql
innodb
buffer-pool
Adergaard
quelle
quelle
Antworten:
Wenn ich zu MySQL 5.5 zurückkehre, würde ich über dasselbe nachdenken.
In diesen Jahren habe ich Folgendes gelernt: Wenn der Pufferpool größer als die Hälfte des installierten Arbeitsspeichers war und innodb_buffer_pool_instances 1 war (Standard für 5.5), stand die Gefahr eines Austauschs immer unmittelbar bevor.
Ich habe dies bereits besprochen: Gibt es eine Faustregel bezüglich der Größe und Anzahl der Pufferpoolinstanzen? . In diesem Beitrag habe ich ein Beispiel für einen Client erwähnt, der 192 GB RAM auf dem Server mit 162 GB Pufferpool hatte. Wenn innodb_buffer_pool_instances 1 war, wurde getauscht. Wenn ich innodb_buffer_pool_instances auf 2 setze , wird es viel besser.
In Ihrem Fall kann ein Wert von 1 in Ordnung sein, da der Pufferpool genau die Hälfte beträgt. Ich würde es nicht riskieren. Ich würde es auf 2 setzen.
Da MySQL 5.6 einen Standardwert von 8 hat, sollten Sie nicht mehr darüber nachdenken müssen.
Ich werde das sagen: Akuzminskys Antwort hat das höchste Prinzip . Meine Antwort ist nur aus der Hüfte zu schießen, basierend auf früheren Erfahrungen (gut und schlecht).
quelle
Die Anzahl der Pufferpoolinstanzen sollte erhöht werden, um Mutexkonflikte im Pufferpool zu vermeiden.
Bei einer Pufferpoolgröße von 8 GB bezweifle ich, dass Sie jemals den Mutex-Konflikt im Pufferpool sehen werden.
UPDATE 0 :
Ich erwähne 8 GB Pufferpool in der Antwort, während in der ursprünglichen Frage der Gesamtspeicher 8 GB betrug. Sicher, der Pufferpool muss weniger als 8 GB betragen. 4 GB klingen nach einem guten Start, aber stellen Sie sicher, dass kein Austausch stattfindet.
UPDATE 1 :
// von Yasufumis Folien (in neueren MySQL-Versionen kann die Ausgabe geringfügig abweichen)
Um festzustellen, ob ein Konflikt im Pufferpool-Mutex vorliegt, sammeln Sie
SHOW ENGINE INNODB STATUS
während der Spitzenzeit ein Dutzend Proben.Aggregieren Sie es dann mit einem Shell-Snippet:
was eine Ausgabe wie diese ergibt:
Wenn Sie feststellen, dass die Anzahl der Mutex-Wartezeiten im Pufferpool hoch ist, müssen Sie mehrere Pufferpoolinstanzen berücksichtigen. Es ist unwahrscheinlich, dass der Konflikt in einem Pufferpool auftritt, der kleiner als ~ 48G ist.
quelle
Setzen Sie "swappiness" auf 1, wenn Ihr Betriebssystem solche hat. Das Problem kann ein übermäßig aggressiver OOM sein.
quelle
Ich würde vorschlagen, dies so einzustellen, dass es der maximalen Anzahl von MySQL-Threads entspricht, die Sie gleichzeitig ausführen möchten. Ich benutze die Anzahl der Kerne.
Ich habe auch diese Nummer eingestellt
innodb_read_io_threads
undinnodb_write_io_threads
angepasst.Wenn
innodb_buffer_pool_instances
es zu niedrig ist, bleiben Ihre Threads wahrscheinlich in Semaphor-Wartezeiten hängen. Dies lässt sowohl die CPU als auch die E / A im Leerlauf erscheinen, obwohl das System ausgelastet sein sollte - und Ihre Anwendungslatenz geht über das Dach.quelle