it-swarm.com.de

Einfügungen in MySQL 8 sind langsamer als Einfügungen in MySQL 5.7

Ich habe begonnen, MySQL 8 (8.0.12) zu verwenden, und stelle fest, dass die "Einfügungen" in dieser Version langsamer sind als in MySQL 5.6 oder MySQL 5.7. Es spielt keine Rolle, ob es sich bei der Tabelle um MyISAM oder InnoDB handelt. Mit nur einem "Einfügen" und nur einem Datensatz benötigt der Server mit MySQL 8 etwa 0,2 bis 0,3 Sekunden. Das gleiche "Einfügen" in MySQL 5.7 dauert nur 0,003 Sekunden oder weniger .

Ich habe Windows Defender oder ein anderes Antivirenprogramm bereits verworfen. Die Schreibgeschwindigkeit der Festplatte ist nicht das Problem, da ich eine virtuelle Maschine auf demselben Server habe, die VM hat MySQL 5.7 und das Ergebnis ist auch ziemlich gut: 0,003 Sekunden oder weniger.

Ich habe das gleiche "Insert" in verschiedenen Computern mit verschiedenen S.O. und das Ergebnis ist immer das gleiche: MySQL 5.7 (oder 5.6) benötigt 0,003 Sekunden oder weniger, während MySQL 8 in jeder Einfügung mit nur einem Datensatz 0,2 bis 0,3 Sekunden benötigt. Die "erstellt" sind auch langsamer.

Was mir seltsam erscheint, ist, dass einfache "Auswahl" oder "Auswahl mit Verknüpfungen" in MySQL 8 schneller sind als in früheren Versionen. Ich denke, das Problem liegt bei den Abfragen, die auf die Festplatte schreiben, aber nicht bei einer Einschränkung der Festplatte, möglicherweise bei einer zugewiesenen Einschränkung in my.ini oder in anderen MySQL-Einstellungen.

Hier lasse ich Ihnen die Skripte mit der langsamen Leistung in MySQL 8:

CREATE TABLE `ciiu_test2` (
`id` INT(11) NULL DEFAULT NULL,
`codbut` VARCHAR(11) NULL DEFAULT NULL,
`ciiu` VARCHAR(8) NULL DEFAULT NULL
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
;

Ausführungszeit in MySQL 5.7: 0.016 Sek.Ausführungszeit in MySQL 8.0.12: 0.140 Sek.

INSERT INTO `ciiu_test2` (`id`, `codbut`, `ciiu`) VALUES (1, '18237', '2750');
INSERT INTO `ciiu_test2` (`id`, `codbut`, `ciiu`) VALUES (2, '18238', '9491');
INSERT INTO `ciiu_test2` (`id`, `codbut`, `ciiu`) VALUES (3, '18245', '9411');
INSERT INTO `ciiu_test2` (`id`, `codbut`, `ciiu`) VALUES (4, '18248', '2221');
INSERT INTO `ciiu_test2` (`id`, `codbut`, `ciiu`) VALUES (5, '18264', '3520');
INSERT INTO `ciiu_test2` (`id`, `codbut`, `ciiu`) VALUES (6, '18265', '4645');
INSERT INTO `ciiu_test2` (`id`, `codbut`, `ciiu`) VALUES (7, '18268', '6202');
INSERT INTO `ciiu_test2` (`id`, `codbut`, `ciiu`) VALUES (8, '18276', '6512');
INSERT INTO `ciiu_test2` (`id`, `codbut`, `ciiu`) VALUES (9, '18290', '4210');

Ausführungszeit in MySQL 5.7: 0.002 Sek.Ausführungszeit in MySQL 8.0.12: 0.681 Sek.

Bitte empfehlen Sie mir nicht, die "Einfügungen" mit mehreren Datensätzen zu optimieren. Insbesondere muss ich in MySQL 8 mit jeder "Einfügung", die ich einmal in MySQL 5.7 hatte, die gleichen Zeiten erhalten.

Ich danke Ihnen im Voraus für die Hilfe, die Sie mir bei diesem Problem geben können.

Ein Unterschied zwischen 5.7 und 8.0 besteht darin, dass die binäre Protokollierung (für Replikation und PITR) in MySQL 8.0 standardmäßig aktiviert ist. Starten Sie den MySQL-Server mit --disable-log-bin, Um die binäre Anmeldung in 8.0 auszuführen.

Weitere Details The Binary Log

Das Binärprotokoll enthält „Ereignisse“, die Datenbankänderungen wie Tabellenerstellungsvorgänge oder Änderungen an Tabellendaten beschreiben. Es enthält auch Ereignisse für Anweisungen, die möglicherweise Änderungen vorgenommen haben könnten (z. B. ein DELETE, das keinen Zeilen entspricht), sofern keine zeilenbasierte Protokollierung verwendet wird. Das Binärprotokoll enthält auch Informationen darüber, wie lange jede Anweisung diese aktualisierten Daten benötigt hat. Das binäre Protokoll hat zwei wichtige Zwecke:

  • Für die Replikation enthält das Binärprotokoll auf einem Master-Replikationsserver eine Aufzeichnung der Datenänderungen, die an Slave-Server gesendet werden sollen. Der Master-Server sendet die in seinem Binärprotokoll enthaltenen Ereignisse an seine Slaves, die diese Ereignisse ausführen, um dieselben Datenänderungen vorzunehmen, die auf dem Master vorgenommen wurden. Siehe Abschnitt 17.2, „Replikationsimplementierung“.
  • Bestimmte Datenwiederherstellungsvorgänge erfordern die Verwendung des Binärprotokolls. Nachdem eine Sicherung wiederhergestellt wurde, werden die Ereignisse im Binärprotokoll, die nach der Sicherung aufgezeichnet wurden, erneut ausgeführt. Diese Ereignisse bringen Datenbanken ab dem Zeitpunkt der Sicherung auf den neuesten Stand. Siehe Abschnitt 7.5, „Zeitpunktliche (inkrementelle) Wiederherstellung mithilfe des Binärprotokolls“.
9
Ivanov

Ab MySQL 8 wird der Extraktionsalgorithmus für Transaktionsschreibsätze eingeführt, der XXHASH64. Die neue Standardeinstellung erleichtert Benutzern das Aktivieren der Parallelisierung von binären Protokollschreibsätzen auf dem Master, um die Gruppenreplikation zu beschleunigen. [1] Wenn Sie MySQL Group Replication nicht verwenden, können Sie die Einstellungen von XXHASH64 bis OFF. Sie können Binärprotokolle aktivieren, wenn Sie einen Slave parallel ausführen.

[mysqld]
#skip-log-bin 
transaction_write_set_extraction=OFF


  [1]: https://mysqlserverteam.com/new-defaults-in-mysql-8-0/
0
JYOTI RAJAI