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:
select table_schema, table_name, round(data_length/1024/1024,2) as size_mb
from information_schema.tables where table_schema like 'my_database'
order by size_mb desc;
+--------------+-------------------------+---------+
| table_schema | table_name | size_mb |
+--------------+-------------------------+---------+
| heavybidder | user | 522.55|
| heavybidder | bid | 121.52|
| heavybidder | item_for_sale | 10.52|
| heavybidder | account_user | 5.02 |
| heavybidder | txn_log | 4.02 |
| heavybidder | category | 0.02 |
+--------------+-------------------------+---------+
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?
1 - (innodb_buffer_pool_reads / innodb_buffer_pool_read_requests).
Was ist die Schlüssel-Cache-Trefferquote?
1 - (Key_reads / Key_read_requests)
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/