Aus MySQL-Sicht habe ich Vorschläge, wie das Caching von Daten / Indizes für eine MySQL-Instanz verbessert werden kann.
Beachten Sie, dass es für MySQL zwei wichtige Speicher-Engines gibt
Ihre Caching-Mechanismen sind unterschiedlich. Sie können etwas tun, um die Speicher-Engine Ihrer Wahl zu optimieren.
MyISAM
MyISAM speichert nur Indexseiten zwischen. Es werden niemals Daten zwischengespeichert. Sie können zwei Dinge tun, um die E / A für MyISAM-Tabellen zu verbessern.
MyISAM-Verbesserung Nr. 1
Jede MyISAM-Tabelle mit VARCHAR-Spalten kann intern in CHAR konvertiert werden, ohne das ursprüngliche Design zu berühren. Angenommen, Sie haben eine Tabelle mit dem Namen mydb.mytable und möchten die E / A dafür verbessern. Führen Sie die folgenden Schritte aus:
ALTER TABLE mydb.mytable ROW_FORMAT=Fixed;
Dies erhöht die Größe der Tabelle um 60% bis 100%, führt jedoch zu einer Leistungssteigerung der E / A um 20 bis 30%, ohne dass etwas anderes geändert wird . Ich habe darüber zuvor im DBA StackExchange geschrieben:
MyISAM-Verbesserung Nr. 2
Sie müssen den MyISAM-Schlüsselcache vergrößern (Größe nach key_buffer_size ). Führen Sie diese Abfrage bitte aus:
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql','performance_schema')) AA ) A,
(SELECT 2 PowerOf1024) B;
Dies zeigt Ihnen die ideale key_buffer_size basierend auf Ihrem aktuellen Datensatz.
InnoDB
InnoDB speichert sowohl Daten als auch Indizes zwischen. Wenn Sie alle Ihre Daten in InnoDB konvertiert haben und derzeit WordPress aus einer InnoDB-Datenbank ausführen , müssen Sie die Größe Ihres InnoDB- Pufferpools (Größe mit innodb_buffer_pool_size ) anpassen . Führen Sie diese Abfrage bitte aus:
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;
Dies zeigt Ihnen die ideale key_buffer_size basierend auf Ihrem aktuellen Datensatz.
Projektionen
Wenn Sie davon ausgehen, dass Ihr Dataset 20-mal so stark wächst, multiplizieren Sie einfach das, was diese Abfrage empfiehlt, mit 20. Angenommen, Ihr MyISAM-Dataset ist 15 MB groß und 3 MB ist die Summe Ihrer Indizes. Wenn Sie davon ausgehen, dass Sie 20-mal so viele Daten haben, setzen Sie die key_buffer_size in /etc/my.cnf wie folgt auf 60 MB:
[mysqld]
key_buffer_size=60M
Starten Sie dann MySQL neu. Das Gleiche gilt für den InnoDB-Pufferpool.
Wenn alle Ihre Daten InnoDB sind, müssen Sie eine vollständige Bereinigung Ihrer InnoDB-Infrastruktur durchführen, die ich in StackOverflow veröffentlicht habe .