Beispiel zur Optimierung der MySQL-Einfügeleistung

Beispiel zur Optimierung der MySQL-Einfügeleistung

MySQL-Leistungsoptimierung

Die MySQL-Leistungsoptimierung besteht darin, MySQL durch sinnvolle Anordnung der Ressourcen und Anpassung der Systemparameter schneller auszuführen und mehr Ressourcen zu sparen. Zur MySQL-Leistungsoptimierung gehören die Optimierung der Abfragegeschwindigkeit, die Optimierung der Aktualisierungsgeschwindigkeit, die Optimierung des MySQL-Servers usw. In diesem Blog werden drei Aspekte vorgestellt: Abfrageoptimierung, Datenbankstrukturoptimierung und MySQL-Serveroptimierung.

Bei der Optimierung von MySQL-Datenbanken geht es einerseits darum, Systemengpässe zu identifizieren und die Gesamtleistung der MySQL-Datenbank zu verbessern. Andererseits erfordert sie eine angemessene Strukturgestaltung und Parameteranpassung, um die Reaktionsgeschwindigkeit bei Benutzervorgängen zu verbessern. Gleichzeitig ist es auch notwendig, möglichst viele Systemressourcen einzusparen, damit das System Dienste mit höherer Auslastung bereitstellen kann. Beispielsweise kann durch die Optimierung des Dateisystems die Lese- und Schreibleistung der Festplatten-E/A verbessert werden. Durch die Optimierung der Planungsstrategie des Betriebssystems kann die Ladekapazität von MySQL bei hoher Belastung verbessert werden. Durch die Optimierung der Tabellenstruktur, des Index, der Abfrageanweisungen usw. können die Abfrageantworten schneller erfolgen.

Syntax der MySQL-Insert-Anweisung und eine Einführung in die Optimierung der MySQL-Insert-Leistung.

einfügen in `Tabelle`(`Feld1`,`Feld2`) Werte('Wert1','Wert2');

Methoden zur Verbesserung der Einfügeleistung

1. Mehrere Datensätze in eine SQL-Anweisung einfügen

INSERT INTO `insert_table` (`uid`, `content`, `type`) VALUES ('userid_0', 'content_0', 0); 
INSERT INTO `insert_table` (`uid`, `content`, `type`) VALUES ('userid_1', 'content_1', 1);

Kann geschrieben werden als

INSERT INTO `insert_table` (`uid`, `content`, `type`) VALUES ('userid_0', 'content_0', 0), ('userid_1', 'content_1', 1);

2. Transaktionen nutzen

TRANSAKTION STARTEN; 
INSERT INTO `insert_table` (`uid`, `content`, `type`) VALUES ('userid_0', 'content_0', 0); 
INSERT INTO `insert_table` (`uid`, `content`, `type`) VALUES ('userid_1', 'content_1', 1); 
... 
BEGEHEN;

Beachten

1. Die Länge von SQL-Anweisungen ist begrenzt. Seien Sie daher beim Zusammenführen von SQL-Anweisungen vorsichtig. Die Längenbeschränkung kann über das Konfigurationselement „max_allowed_packet“ geändert werden. Der Standardwert ist 1 M.

2. Eine zu große Transaktion beeinträchtigt die Ausführungseffizienz. MySQL verfügt über ein Konfigurationselement innodb_log_buffer_size. Wenn dieser Wert überschritten wird, werden Festplattendaten verwendet, was die Ausführungseffizienz beeinträchtigt.

Beschreibung der Transaktionskonfigurationselemente:

innodb_buffer_pool_size

Wenn Sie Innodb verwenden, ist dies eine wichtige Variable. Im Vergleich zu MyISAM reagiert Innodb empfindlicher auf die Puffergröße. MySIAM kommt bei großen Datenmengen möglicherweise mit der standardmäßigen key_buffer_size gut zurecht, aber bei Innodb scheint der Standardwert bei großen Datenmengen zu steigen. Der Pufferpool von Innodb speichert Daten und Indizes im Cache, sodass kein Platz für den Systemcache freigelassen werden muss. Wenn Sie nur Innodb verwenden, können Sie diesen Wert auf 70 bis 80 % des Speichers festlegen. Ähnlich wie bei key_buffer gilt: Wenn die Datenmenge klein ist und nicht stark ansteigt, kann es die Speichernutzung verbessern, diesen Wert nicht zu hoch einzustellen.

innodb_additional_pool_size

Die Auswirkungen hiervon sind nicht sehr spürbar, zumindest nicht, wenn das Betriebssystem in der Lage ist, den Speicher ordnungsgemäß zuzuordnen. Sie müssen den Wert jedoch möglicherweise dennoch auf 20 MB oder mehr einstellen, um zu sehen, wie viel Speicher Innodb für andere Zwecke zuweist.

innodb_log_file_size

Dies ist besonders wichtig, wenn viele Daten, insbesondere große Datenmengen, geschrieben werden. Beachten Sie, dass größere Dateien eine bessere Leistung bieten, die Wiederherstellung der Datenbank jedoch länger dauert. Normalerweise verwende ich 64–512 M, je nach Speicherplatz auf dem Server.

innodb_log_buffer_size

Der Standardwert ist für die meisten Anwendungen mit mittleren Schreibvorgängen und kurzen Transaktionen ausreichend. Wenn Sie häufige Aktualisierungen vornehmen oder viele Blob-Daten verwenden, sollten Sie diesen Wert erhöhen. Ist der Wert jedoch zu groß, wird Speicher verschwendet, da einmal pro Sekunde ein „Flush“ (wie sagt man das auf Chinesisch?) erfolgt. Es besteht also keine Notwendigkeit, den Wert auf mehr als 1 Sekunde einzustellen. 8–16 M sollten im Allgemeinen ausreichen. Kleine Anwendungen können kleiner eingestellt werden.

innodb_flush_log_at_trx_commit

Beschweren Sie sich, dass Innodb 100-mal langsamer ist als MyISAM? Dann haben Sie wahrscheinlich vergessen, diesen Wert anzupassen. Der Standardwert 1 bedeutet, dass bei jedem Transaktions-Commit oder jeder Anweisung außerhalb einer Transaktion das Protokoll auf die Festplatte geschrieben werden muss, was sehr zeitaufwändig ist. Dies gilt insbesondere bei Verwendung eines batteriegestützten Cache. Für viele Anwendungen ist die Einstellung auf 2 kein Problem, insbesondere bei der Übertragung von MyISAM-Tabellen. Dies bedeutet, dass die Daten nicht auf die Festplatte, sondern in den Systemcache geschrieben werden. Das Protokoll wird weiterhin jede Sekunde auf die Festplatte geschrieben, sodass im Allgemeinen nicht mehr als 1–2 Sekunden an Aktualisierungen verloren gehen. Das Setzen auf 0 ist schneller, aber weniger sicher, und selbst wenn MySQL abstürzt, können Transaktionsdaten verloren gehen. Bei einem Wert von 2 kann es nur dann zu Datenverlust kommen, wenn das gesamte Betriebssystem abstürzt.

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. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Erläuterung des MySQL-Einfügeanweisungsvorgangs am Beispiel
  • MySQL-Operationsübersicht INSERT und REPLACE
  • So verschachteln Sie Insert und Select in MySQL
  • Korrekte Verwendung der MySQL INSERT INTO-Anweisung
  • MySQL-Tipps - LAST_INSERT_ID
  • Tutorial zur Verwendung und Optimierung von Insert-Anweisungen in MySQL
  • 3 Tipps für MySql-Einfügevorgänge
  • Analyse langsamer Einfügefälle aufgrund großer Transaktionen in MySQL

<<:  Docker-Container vom Einstieg bis zur Obsession (empfohlen)

>>:  JS verwendet die Methode „reduce()“, um Baumstrukturdaten zu verarbeiten

Artikel empfehlen

Vergleich von CSS-Schatteneffekten: Schlagschatten und Box-Schatten

Drop-Shadow und Box-Shadow sind beide CSS-Eigensc...

Lebenszyklus und Hook-Funktionen in Vue

Inhaltsverzeichnis 1. Was ist der Lebenszyklus 2....

Lösung für SQL Server-Datenbankfehler 5123

Weil ich ein Datenbank-Tutorial habe, das auf SQL...

Verschachtelte Anzeigeimplementierung der Vue-Router-Ansicht

Inhaltsverzeichnis 1. Routing-Konfiguration 2. Vu...

Zusammenfassung der Fallstricke beim Importieren von OVA-Dateien in VMware

Quelle des Problems Wie wir alle wissen, erzeugt ...

Benutzerzentriertes Design

Ich wurde in letzter Zeit häufig zu einer offensi...

So ändern Sie den MySQL-Zeichensatz utf8 in utf8mb4

Wenn für MySQL 5.5 der Zeichensatz nicht festgele...

Analyse der Protokolldateien im Tomcat-Protokollverzeichnis (Zusammenfassung)

Bei jedem Start von Tomcat werden die folgenden P...

Detaillierte Erläuterung des SQL_Mode-Modusbeispiels in MySQL

Dieser Artikel beschreibt den SQL_Mode-Modus in M...

Detailliertes Tutorial zur Springcloud-Alibaba-Nacos-Linux-Konfiguration

Laden Sie zuerst das komprimierte Nacos-Paket von...

Detaillierte Erklärung des Marquee-Attributs in HTML

Dieses Tag ist nicht Teil von HTML3.2 und wird nu...

Detaillierte Erklärung der Eigenschaften und Funktionen von Vuex

Inhaltsverzeichnis Was ist Vuex? Fünf Eigenschaft...