Ich habe das langsame Abfrageprotokoll von MySQL überprüft und einen Eintrag wie folgt gefunden:
%Vor% Wie Sie sehen können, dauerte die Ausführung dieser Abfrage unglaubliche 14,72 Sekunden, wenn es sich um ein einfaches Update mit nur einem WHERE
nach Primärschlüssel handelt. Ich habe versucht, die Abfrage erneut auszuführen, aber jetzt wird in 0,095 Sekunden ausgeführt, was viel sinnvoller ist.
Irgendwelche Ideen, wie ich debuggen kann, warum zu dieser bestimmten Zeit hat es so lange gedauert?
Bearbeiten Sie 1: query_cache% Variablen
%Vor%Bearbeiten 2: Künstlertischinfo
%Vor% Angesichts der von Ihnen angegebenen Ausgabe wäre mein Vorschlag hier, die Cache-Größe zu minimieren. Es ist natürlich nur meine beste Annahme, dass dies dazu führte, dass sich die Aktualisierungszeit über 15 Sekunden erstreckte, da die Abfrage selbst mit WHERE
auf PRIMARY KEY
optimal ist.
Da Sie das Problem nicht reproduzieren konnten, ist es schwer zu bestimmen.
Ich habe die Cache-Dokumentation erneut gelesen, um Informationen zu erhalten.
Wenn Tabellen geändert werden, werden alle relevanten Einträge im Abfrage-Cache geleert. Dies könnte ein Grund für das Update sein, dass Sie zwischengespeicherte Daten löschen mussten.
Ein weiterer Teil der Dokumentation
Seien Sie vorsichtig, wenn Sie den Abfragecache zu groß dimensionieren, was erhöht den Overhead, der erforderlich ist, um den Cache möglicherweise darüber hinaus zu erhalten der Vorteil, es zu ermöglichen. Größen in Zig Megabyte sind normalerweise vorteilhaft. Größen in den Hunderten von Megabyte möglicherweise nicht.
Wie auch immer, da Sie den Abfrage-Cache aktiviert haben, denke ich, dass das ein guter Ausgangspunkt ist.
Zum Festlegen eines neuen Abfragecaches während der Produktion
%Vor%Mysql wird die Größe automatisch auf den nächsten 1024-Byte-Block ausrichten.
Lesen Sie diese Dokumentation gut, es ist sehr hilfreich zu verstehen. Der Query-Cache kann gleichzeitig die beste und schlechteste Einstellung sein.
Es gibt ein Problem mit Ihrem Tisch. Sie haben mehrere Indizes für die Tabelle erstellt, die Felder enthält, die Sie in der SQL aktualisieren. Dann muss mysql den Index jedes Mal neu aufbauen.
Ich denke, Sie haben MySQL-Server-Variablen nicht angepasst. Es ist wichtig, Servervariablen zu optimieren, um die Leistung zu erhöhen. Es wird empfohlen, sich die Variablen key_buffer_size und table_cache anzusehen.
Die Variable key_buffer_size steuert die Größe des für den MySQL-Indexpuffer verfügbaren Speichers. Je höher dieser Wert ist, desto mehr Speicher ist für Indizes verfügbar und die Leistung wird verbessert.
Die Variable table_cache steuert die Größe des für den Tabellencache verfügbaren Speichers und damit die Gesamtzahl der Tabellen, die MySQL zu einem bestimmten Zeitpunkt offen halten kann. Für ausgelastete Server mit vielen Datenbanken und Tabellen sollte dieser Wert erhöht werden, damit MySQL alle Anfragen zuverlässig bedienen kann.
Tags und Links mysql performance