Ich habe 170 GB InnoDB
Index und Daten.
Ich muss die innodb_buffer_pool-Größe für eine bessere Leistung neu anpassen. Die maximale Tabellengröße einer InnoDB-Tabelle (Index + Daten) beträgt 28 GB.
Also, was sollte die optimale Größe von innodb_buffer_pool sein.
AKTUALISIEREN
Wir werden diese lokale Datenbank auf ec2 migrieren, also wird der RAM gemäß der aktuellen Statistik von innodb eingestellt. Deshalb benötige ich die Größe des Pufferpools, damit wir dort verfügbaren RAM haben können.
Datei pro Tabelle ist aktiviert.
Ich benutze Linux-Maschine.
Antworten:
Die größte Tabelle, die Sie haben, macht 16,47% (28/170) der Gesamtdaten aus. Selbst wenn die Tabelle in hohem Maße geschrieben und gelesen wurde, werden nicht alle 28 G der Tabelle zu einem bestimmten Zeitpunkt in den Pufferpool geladen. Sie müssen lediglich berechnen, wie viel des InnoDB-Pufferpools zu einem bestimmten Zeitpunkt auf dem aktuellen DB-Server geladen ist .
Hier finden Sie eine detailliertere Methode zum Ermitteln von "innodb_buffer_pool_size" für einen neuen DB-Server unter Berücksichtigung des Datasets, das derzeit im InnoDB-Pufferpool des aktuellen DB-Servers geladen ist.
Führen Sie auf Ihrer aktuellen MySQL-Instanz (Server, von dem Sie migrieren) Folgendes aus:
Führen Sie die Formel aus
IBPPctFull = IBPDataPages * 100.0 / IBPTotalPages
.Wenn IBPPctFull 95% oder mehr beträgt, sollten Sie innodb_buffer_pool_size auf 75% des Arbeitsspeichers des DB-Servers festlegen.
Wenn IBPPctFull weniger als 95% ist, führen Sie diese Formel:
IBPSize = IPS X IBPDataPages / (1024*1024*1024) X 1.05
.Die Nummer für IBPSize (in GB) ist die Nummer, die Ihrem tatsächlichen Arbeitsdatensatz besser entspricht.
Wenn IBPSize für die größte Amazon EC2-RAM-Konfiguration noch zu groß ist, verwenden Sie 75% des RAM für den Amazon EC2-DB-Server.
quelle
Ich stelle diese Antwort als ergänzende Information zu Rolando unten zur Verfügung.
Bevor der Server in Produktion ist
Berechnen Sie innodb_buffer_pool_size basierend auf den größten Tabellen, die von MySQL am häufigsten verwendet werden. Mit dem folgenden Skript können Sie die größten Tabellen anhand ihrer Größe in der Datenbank identifizieren:
Nachdem wir wissen, welche Tabellen in unserer Datenbank die größten sind, müssen wir ermitteln, welche Tabellen am häufigsten verwendet werden. Zu diesem Zweck würde ich ein Profilierungsprogramm wie Jet Profiler (JP) verwenden, um festzustellen, auf welche Tabellen am häufigsten zugegriffen wird. JP zeigt Ihnen, auf welche Tabellen am häufigsten zugegriffen wird. Hier ist ein Screenshot aus diesem Abschnitt in JP
Aus diesem Grund weiß ich jetzt, dass die Benutzer- und Gebotstabellen ungefähr 640 MB Speicherplatz beanspruchen, sie werden laut JP sehr häufig verwendet, und das bedeutet, dass MySQL ihre Indizes und Daten als Rolando im Pufferpool speichern wird Erwähnungen unten in seinen Kommentaren.
Um sicherzustellen, dass MySQL über genügend Speicher verfügt, um Daten für meine größten und am häufigsten verwendeten Tabellen zu speichern, würde ich dann innodb_buffer_pool_size mit 640 MB definieren.
Es gibt einige zusätzliche Überlegungen, die jedoch nicht für innodb_buffer_pool_size gelten.
Ist das ein 32Bit oder 64Bit System? In einem 32-Bit-System sind Sie auf 4 GB beschränkt, sofern Sie PAE nicht aktivieren. In Windows bedeutet dies, dass Windows Enterprise- oder Datacenter-Editionen ausgeführt werden.
Wie viel Arbeitsspeicher benötigen die anderen auf Ihrem System ausgeführten Prozesse? Auf einem dedizierten MySQL-Server lasse ich zwischen 5% und 10% für das Betriebssystem. In Windows können Sie mit Process Explorer die Speichernutzung analysieren. Unter Linux gibt es sysstat, free, htop, top und vmstat.
Besteht die Datenbank nur aus Innodb-Tabellen oder aus einer Mischung von Innodb und MyISAM? Wenn es sich um eine Mischung aus beidem handelt, werde ich Speicher für den key_cache reservieren, Variablen verknüpfen, den Cache abfragen usw. Sie können später Ihre MyISAM-Trefferquote berechnen, sobald der Server in Betrieb ist.
Nachdem der Server in Produktion ist
Was ist die aktuelle Trefferquote für Innodb?
Was ist die Schlüssel-Cache-Trefferquote?
Normalerweise versuche ich, das Verhältnis so nahe wie möglich an 100% zu bringen.
Wie gut passen Ihre Tabellen in den Pufferpool?
Sie können auch sehen, wie gut Ihre Tabellendaten in Ihren buffer_pool passen, indem Sie auf diesen Link verweisen, der eine Möglichkeit bietet, zu zeigen, "wie viele Seiten sich im Pufferpool für eine gegebene Tabelle (cnt) befinden, wie viele davon verschmutzt (dirty) sind. , und wie viel Prozent des Index passen in den Speicher (fit_pct). " Gilt nur für Percona-Server
http://www.mysqlperformanceblog.com/2010/12/09/how-well-does-your-table-fits-in-innodb-buffer-pool/
quelle