Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql langsam bei der ersten Abfrage, dann schnell für verwandte Abfragen

Seiten der innodb-Datendateien werden im innodb-Pufferpool zwischengespeichert. Das ist, was Sie erwarten würden. Das Lesen von Dateien ist langsam, selbst auf guten Festplatten, insbesondere zufälliges Lesen, was Datenbanken meistens sehen.

Es kann sein, dass Ihre erste Abfrage eine Art Tabellenscan durchführt, der viele Seiten in den Pufferpool zieht und dann schnell auf sie zugreift. Oder so ähnlich.

Das habe ich erwartet.

Verwenden Sie idealerweise dieselbe Engine für alle Tabellen (Ausnahmen:Systemtabellen, temporäre Tabellen (vielleicht) und sehr kleine oder kurzlebige Tabellen). Wenn Sie dies nicht tun, müssen sie um Ram kämpfen.

Angenommen, alle Ihre Tabellen sind innodb, lassen Sie den Pufferpool bis zu 75 % des physischen Arbeitsspeichers des Servers verwenden (vorausgesetzt, Sie führen nicht zu viele andere Aufgaben auf der Maschine aus).

Dann werden Sie in der Lage sein, etwa 12 GB Ihrer Datenbank in den Arbeitsspeicher zu packen, sobald es also "aufgewärmt" ist, befinden sich die "am häufigsten verwendeten" 12 GB Ihrer Datenbank im Arbeitsspeicher, wo der Zugriff angenehm und schnell ist.

Einige Benutzer von mysql neigen dazu, Produktionsserver nach einem Neustart "aufzuwärmen", indem sie ihnen für eine Weile Abfragen senden, die von einem anderen Computer kopiert wurden (diese werden Replikations-Slaves sein), bis sie sie ihrem Produktionspool hinzufügen. Dies vermeidet die extreme Langsamkeit, die auftritt, wenn der Cache kalt ist. Zum Beispiel macht Youtube das (oder zumindest früher; Google hat sie gekauft und sie können jetzt Google-fu verwenden)