Ich habe das ausgezeichnete MySQL-Leistungsoptimierungsskript ausgeführt und begonnen, die Vorschläge durchzuarbeiten. Einer, dem ich begegnet bin, war
TABLE CACHE
Aktueller table_cache-Wert = 4096 Tabellen Sie haben insgesamt 1073 Tabellen. Sie haben 3900 offene Tische. Die aktuelle Trefferquote von table_cache beträgt 2%, während 95% Ihres Tabellencaches belegt sind. Sie sollten wahrscheinlich Ihren table_cache erhöhen
Ich fing an, im table_cache nachzulesen, fand aber, dass die MySQL-Dokumentation ziemlich mangelhaft ist. Sie sagen, um die table_cache
"wenn Sie das Gedächtnis haben" zu erhöhen . Leider ist die table_cache
Variable als "Die Anzahl offener Tabellen für alle Threads" definiert.
Wie ändert sich der von MySQL verwendete Speicher, wenn ich diese Variable erhöhe? Was ist ein guter Wert, um es zu setzen?
quelle
table_open_cache
wenn Sie die Dokumente betrachten. Siehe @MarkRs Antwort beim Betrachtentable_cache
Sie sollten die Variable Opened_Tables überwachen und sehen, wie schnell sie zunimmt. Wenn dies erheblich schneller ist als das Erstellen neuer Tabellen (einschließlich temporärer Tabellen), ist der Tabellencache möglicherweise zu klein.
Table_Cache sollte immer - meistens auch - deutlich größer sein als die Gesamtzahl der Tabellen auf dem Server. Andernfalls werden weiterhin Tabellen geöffnet und geschlossen.
Ich kann nicht sehen, wie Sie eine Cachetrefferquote von 2% erzielen können, es sei denn, Sie haben die Zeit unmittelbar nach einem Serverneustart gemessen oder häufig FLUSH TABLES verwendet (im Verhältnis zur Anzahl der Abfragen). Normalerweise sollte die Trefferrate im Tabellencache 99,9% betragen, da sonst die Leistung beeinträchtigt wird.
Mache keine FLUSH TABLES, wenn du es vermeiden kannst, es bläst den Cache weg.
Das Öffnen von Tabellen ist teuer, da die FRM-Datei gelesen werden muss. In MyISAM ist es bedeutend schlechter (als in anderen Engines), da beim Schließen einer Tabelle auch alle Blöcke im Schlüssel-Cache verworfen werden, die aus den Indizes stammen. Wenn Sie eine Tabelle schließen, werden ihre Indizes aus dem Schlüssel-Cache abgelegt == nicht gut! Andere Engines behalten die zwischengespeicherten Blöcke bei, müssen jedoch Metadaten erneut lesen und einige Strukturen zuweisen.
quelle