2017-08-02 1 views
1

Lets sagen, dass ich mehrere InnoDB-Tabellen haben:Wie kann MySQL angewiesen werden, eine Tabelle im Speicher nicht zwischenzuspeichern?

1. table_a 20Gb 
2. table_b 10Gb 
3. table_c 1Gb 
4. table_d 0.5Gb 

und einen Server mit begrenztem Speicher (8 GB)

ich einen schnellen Zugriff wollen TABLE_C und table_d und kann langsamer Zugriff auf TABLE_A und Table_B ermöglichen.

Gibt es eine Möglichkeit, MySQL zu c, d im Speicher und nicht a, b?

(ich würde a, b zu einem anderen Server zu verschieben, aber manchmal brauche ich ein auf einem Join, c)

+0

Sie können wahrscheinlich mit 'index' und/oder' view' machen, anstatt die ganze Tabelle zwischenzuspeichern. –

+0

Nein. Es müssen statistische Berechnungen für die gesamten Daten ausgeführt werden. –

Antwort

1

InnoDB hat keine Option, bestimmte Tabellen so zu steuern, dass sie im Speicher verbleiben und andere Tabellen nicht genügend Arbeitsspeicher haben. Aber es ist irgendwie unnötig.

InnoDB liest Tabellen, indem sie sie Seite für Seite in den Pufferpool lädt. Ihre Verwendung der Tabellen führt InnoDB dazu, Seiten im Speicher zu behalten.

Es ist unwahrscheinlich, dass das Lesen einer Seite Seiten ausschaltet, die Sie im Speicher behalten müssen. InnoDB behält einen Bereich des Pufferpools für Seiten vor, auf die zuletzt zugegriffen wurde. Es gibt einen Algorithmus, um Seiten in diesem reservierten Bereich zu "promoten", und Seiten, die nicht beworben werden, tendieren dazu, zuerst rausgeschmissen zu werden.

lesen Details hier: https://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool.html

Wenn Sie wirklich, dass bestimmte Tabellen sicherstellen müssen, sind nicht im InnoDB Zwischenspeicher zwischengespeichert, der einzig sichere Weg ist, um die Speicher-Engine für diese Tabellen zu ändern. Nicht InnoDB-Tabellen (z. B. MyISAM) werden niemals im InnoDB-Pufferpool zwischengespeichert. Aber das ist wahrscheinlich kein Grund, die Speicher-Engine zu wechseln.

1

Antwort gebeten Frage: Nein

Antwort implizierte Frage: Wahrscheinlich. Die implizite Frage ist: „Wie kann ich die fragt laufen schneller zu machen. Dies kann oder kann nichts mit dem zu tun, was zwischengespeichert wird.

Wenn Sie eine Zeile mit einem Index zu holen, vor allem die PRIMARY KEY, dann die Abfrage wird sehr schnell sein, auch wenn nichts zwischengespeichert wird. wenn auf der anderen Seite, können Sie einen „Table-Scan“ von table_a tun, wird es den Cache mehrmals durch die 20GB zu scannen ausblasen.

So. .. Finden Sie heraus, welche Abfrage die langsamste ist, dann konzentrieren wir uns darauf, sie schneller zu machen.Es kann so einfach sein wie das Hinzufügen eines "zusammengesetzten" Indexes.Oder vielleicht die Abfrage neu formulieren. Oder vielleicht etwas anderes.

VIEWs wird nicht Hilfe; sie sind syntaktischer Zucker um eine SELECT. Die Neuberechnung der Statistiken ist keine "echte" Lösung.

Verwandte Themen