Gründe und Lösungen für langsame MySQL-Abfragen, die beim Senden von Daten hängen bleiben

Gründe und Lösungen für langsame MySQL-Abfragen, die beim Senden von Daten hängen bleiben

Weil ich ein Python-Programm geschrieben und intensiv mit einer Mysql-Bibliothek gearbeitet habe. Als die Datenmenge nicht groß war, habe ich nicht bemerkt, dass es sehr langsam war. Später wurde es immer langsamer. Ich dachte, es läge nur an der großen Datenmenge. Aber später wurde es so langsam, dass ich es nicht mehr ertragen konnte. Ich habe lange nachgesehen und alle Indizes verwendet, die verwendet werden konnten. Trotzdem dauerte eine einmalige Ausführung 3 bis 4 Sekunden, was unerträglich war.

Daher habe ich alle Abfragen, die mit Redis zwischengespeichert werden konnten, zwischengespeichert, was die Anwendung erheblich beschleunigt hat.

Es gibt jedoch immer noch einige Dinge, die nicht zwischengespeichert werden können. Anders ausgedrückt: Es gibt keine Möglichkeit, sie zwischenzuspeichern, wenn bei jeder Abfrage die Ergebnisse anders sind. Mithilfe der Abfrageübersicht von Navicat können wir erkennen, dass der hängende Teil im Abschnitt „Daten senden“ liegt, der 3,5 Sekunden dauert und 99 % der Abfragezeit ausmacht.

Ich habe online einige Informationen überprüft und festgestellt, dass einige davon auf Probleme mit SQL-Anweisungen zurückzuführen waren, aber ich habe varchar oder die In-Methode überhaupt nicht verwendet.

Ich dachte also, die Tabelle sei vielleicht zu groß und nicht im Speicher zwischengespeichert. Also überprüfte ich den vom mysqld-Prozess belegten Speicher. Er betrug nur mehr als 50 MB, was offensichtlich zu wenig war. Die tatsächliche Kapazität der Tabelle betrug mehr als 200 MB, was in der Objektspalte von Navicat zu sehen ist. Jede Abfrage muss von der Festplatte gelesen werden, was sehr zeitaufwändig ist. Also überprüfte ich die Festplatten-E/A von Win10 und stellte fest, dass dies tatsächlich der Fall war. Die Festplatten-E/A erreichte 100 % und es handelte sich um ein Solid-State-Laufwerk mit einer Lesegeschwindigkeit von etwa 80 MB pro Sekunde. Kein Wunder, dass es so langsam war.

Also habe ich die MySQL-Konfigurationsdatei überprüft und festgestellt, dass nur eine Konfiguration von 32 MB vorhanden war. Ich habe sie auf 512 MB angepasst und MySQL neu gestartet. Diesmal wurde die Zeit von 3,5 Sekunden auf 0,76 Sekunden reduziert.

Die Konfigurationselemente sind:

innodb_buffer_pool_size=32M

Dies ist die Standardeinstellung für MySQL 5.7. Ändern Sie den Wert je nach Hardwarekonfiguration auf 512 oder 1024 und starten Sie neu.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • So lösen Sie das Problem der langsamen Geschwindigkeit von MySQL wie bei Fuzzy-Abfragen
  • MySQL-Methode und Beispiel für langsame Abfragen
  • Detaillierte Erklärung, warum die langsame Abfrageprotokollzeit von MySQL 5.7 8 Stunden hinter der Systemzeit liegt
  • Beispielanalyse langsamer MySQL-Abfragevorgänge [Aktivieren, Testen, Bestätigen usw.]
  • Ursachen und Lösungen für langsame MySQL-Abfragegeschwindigkeit und schlechte Leistung
  • Ursachen und Lösungen für langsame MySQL-Abfragen
  • Methode und Optimierungsprinzip für langsame MySQL-Abfragen
  • So aktivieren Sie die Protokollfunktion für langsame Abfragen in MySQL
  • Tutorial zur grundlegenden Verwendung des MySQL Slow Query Log
  • Beispielcode für ein Mysql-SQL-Überwachungsskript für langsame Abfragen

<<:  Zusammenfassung der Linux-Befehle zur Dateiverzeichnisverwaltung

>>:  Beheben Sie den Fehler bei der Installation von VMware Tools unter Ubuntu 18.04

Artikel empfehlen

Beste Möglichkeit, den Schlüssel im JSON-Objekt zu ersetzen

JSON (JavaScript Object Notation, JS Object Notat...

Formel und Berechnungsmethode zur Schätzung der Server-Parallelität

Vor Kurzem musste ich den Server erneut einem Str...

So löschen Sie den gesamten Inhalt eines Verzeichnisses mit Ansible

Studierende, die Ansible verwenden, wissen, dass ...

So verwalten Sie zwischengespeicherte Seiten in Vue

Inhaltsverzeichnis Problem 1: Zerstörung 1. Wie m...

Detaillierte Erklärung des Integer-Datentyps tinyint in MySQL

Inhaltsverzeichnis 1.1Tinyint-Typbeschreibung 1.2...

MySQL 5.7.18 Green Edition Download- und Installations-Tutorial

Dieser Artikel beschreibt den detaillierten Vorga...

Zukunftsweisendes Allround-Webdesign: Progressive Enhancement

<br />Original: Progressive Enhancement vers...

vue-table implementiert das Hinzufügen und Löschen

In diesem Artikelbeispiel wird der spezifische Co...

Tabelle zeigt den Grenzcode, den Sie anzeigen möchten

Gemeinsame Eigenschaften von Tabellen Die grundle...

Verwandte Befehle zur vollständigen Deinstallation von Nginx unter Ubuntu 16.04

nginx Übersicht nginx ist ein kostenloser, quello...