Bekannte Probleme in MySQL 8.0-Nebenversionen

Auf dieser Seite werden bekannte Probleme und Inkompatibilitäten beschrieben, die nach einem Upgrade der Hauptversion von Cloud SQL for MySQL 5.7 auf Cloud SQL for MySQL 8.0 auftreten können.

Weitere Informationen zum Upgrade der Hauptversion finden Sie unter Direkte Datenbankaktualisierung durchführen. Weitere Informationen zu Fehlerlogs finden Sie unter und Fehlerlogs ansehen.

Leistungsprobleme

In den folgenden Abschnitten werden bekannte Leistungsprobleme behandelt.

Probleme mit der Abfrage SELECT DISTINCT

Wenn Sie die Abfrage SELECT DISTINCT in MySQL 8.0.18 bis MySQL 8.0.20 verwenden, kann es zu Leistungseinbußen kommen. Die Ausführungszeiten von Abfragen können im Vergleich zu MySQL 5.7 dreimal so lang sein.

Weitere Informationen finden Sie unter MySQL Bug #99593.

Führen Sie die folgenden Empfehlungen zur Problembehebung aus, um das Problem zu beheben:

  • Führen Sie ein Upgrade auf MySQL 8.0.21, eine beliebige Nebenversion danach oder die neueste Version durch.
  • Wenn Sie MySQL 8.0.18 bis MySQL 8.0.20 verwenden, aktualisieren Sie den Wert für das internal_tmp_mem_storage_engine Datenbank-Flag auf memory:
        SET SESSION internal_tmp_mem_storage_engine='memory' ;
      

Probleme mit GROUP BY-Abfragen

Wenn Sie SELECT... GROUP BY-Abfragen in MySQL 8.0.36 oder früher verwenden, kann es zu Leistungseinbußen und längeren Ausführungszeiten von Abfragen kommen.

Dies kann passieren, wenn die Abfrage die TempTable Engine verwendet.

Weitere Informationen finden Sie unter MySQL Bug #107700.

Führen Sie die folgenden Empfehlungen zur Problembehebung aus, um das Problem zu beheben:

  • Führen Sie ein Upgrade auf MySQL 8.0.37, eine beliebige Nebenversion danach oder die neueste Version durch.
  • Wenn Sie MySQL 8.0.36 oder früher verwenden, aktualisieren Sie das internal_tmp_mem_storage_engine Datenbank-Flag, um die Memory Engine anstelle der temporären Tabellen-Engine zu verwenden:
        SET SESSION internal_tmp_mem_storage_engine='memory' ;
      

Probleme bei Threads mit geringer Parallelität

Bei Instanzen, die in MySQL 8.0.22 oder höher erstellt wurden und Clientanwendungen mit Threads mit geringer Nebenläufigkeit unterstützen, kann es zu Leistungsproblemen und längeren Ausführungszeiten von Abfragen kommen.

In MySQL 8.0.22 wurde das innodb_log_writer_threads Flag eingeführt, um die Leistung in Systemen mit hoher Parallelität zu verbessern. Dieses Flag ist standardmäßig aktiviert. Wenn Sie Instanzen haben, die in MySQL 8.0.22 oder höher erstellt wurden und Clientanwendungen mit Threads mit geringer Nebenläufigkeit unterstützen, empfehlen wir, das Flag innodb_log_writer_threads zu deaktivieren.

Weitere Informationen finden Sie unter MySQL Bug #93734.

Probleme mit JOINS

Wenn Sie JOIN Abfragen mit der eq_ref Ansicht in Instanzen verwenden, die MySQL 8.0.29 bis MySQL 8.0.32 verwenden, kann es zu erheblichen Leistungsproblemen kommen.

Weitere Informationen finden Sie unter MySQL Bug #109361.

Führen Sie ein Upgrade auf MySQL 8.0.33, eine beliebige Nebenversion danach oder die neueste Version durch, um dieses Problem zu beheben.

Probleme mit der Klausel LIMIT und ORDER BY

Wenn Sie eine Abfrage mit den Klauseln LIMIT und ORDER BY in MySQL 8.0.32 oder früher ausführen, kann es zu Leistungsproblemen kommen. In einigen Fällen wird in MySQL 8.0 ein anderer Abfrageplan als in MySQL 5.7 für dieselbe Abfrage verwendet.

Weitere Informationen finden Sie unter Änderungen in MySQL 8.0.33.

Führen Sie ein Upgrade auf MySQL 8.0.33, eine beliebige Nebenversion danach oder die neueste Version durch, um dieses Problem zu beheben.

Probleme mit Speicherlecks in MySQL 8.0

In den folgenden Abschnitten werden bekannte Probleme mit Speicherlecks in MySQL 8.0 oder höher behandelt. Diese Probleme wirken sich wahrscheinlich auch auf die Instanzleistung aus.

Speicherleck durch Bereichsabfragen

Wenn Sie den Bereichsoptimierer in Instanzen mit MySQL 8.0.16 bis MySQL 8.0.28 verwenden, kann es zu einer hohen Arbeitsspeicherauslastung durch die Codedatei und Funktion memory/sql/THD::main_mem_root kommen. Dies kann dazu führen, dass der Arbeitsspeicher der Instanz erschöpft ist.

Weitere Informationen finden Sie unter MySQL Bug #105331.

Führen Sie ein Upgrade auf MySQL 8.0.29, eine beliebige Nebenversion danach oder die neueste Version durch, um dieses Problem zu beheben.

Speicherleck im Zusammenhang mit gespeicherten Prozeduren

Wenn Sie eine Abfrage in einer gespeicherten Prozedur in Instanzen mit MySQL 8.0.27 bis 8.0.31 ausführen, kann die Abfrage unter der Codedatei und Funktion memory/sql/sp_head::execute_mem_root sehr viel Arbeitsspeicher verbrauchen.

Weitere Informationen finden Sie unter MySQL Bug #107327.

Führen Sie ein Upgrade auf MySQL 8.0.32, eine beliebige Nebenversion danach oder die neueste Version durch, um dieses Problem zu beheben.

Speicherleck durch Zugriff auf eine Ansicht mit SELECT

Wenn Sie die Abfrage SELECT in MySQL 8.0.35 oder früher verwenden und Ihre Anwendung zahlreiche Ansichtsaufrufe verwendet, kann es zu einem spürbaren Speicherleck kommen.

Außerdem kann es zu einem Speicherleck kommen, wenn die Ansicht DEFINER auf root@'%' oder einen Nutzer festgelegt ist, der von der Rolle cloudsqlsuperuser abgeleitet wurde. Das liegt daran, dass die Rolle cloudsqlsuperuser Berechtigungen für den teilweisen Widerruf hat.

Weitere Informationen finden Sie unter MySQL Bug #103133.

Führen Sie die folgenden Empfehlungen zur Problembehebung aus, um das Problem zu beheben:

  • Führen Sie ein Upgrade auf MySQL 8.0.36, eine beliebige Nebenversion danach oder die neueste Version durch.
  • Wenn Sie MySQL 8.0.35 oder früher verwenden, verwenden Sie einen separaten Nutzer für die DEFINER Ansicht, insbesondere einen Nutzer, der keine Berechtigungen für den teilweisen Widerruf hat. Wenn Sie den root@'%' Nutzer oder die cloudsqlsuperuser Rolle verwenden müssen, verwenden Sie diese nur für Verwaltungsprozesse und nicht für Anwendungsabfragen. Wenn das Speicherleck weiterhin besteht, müssen Sie ein Upgrade auf MySQL 8.0.36, eine beliebige Nebenversion danach oder die neueste Version durchführen.

Probleme mit der Replikation

Im folgenden Abschnitt werden bekannte Probleme im Zusammenhang mit der Replikation behandelt.

Probleme mit der parallelen Replikation

Wenn Sie die parallele Replikation in einem Multithread-Replikat verwenden, in dem die Komponente slave_preserve_commit_order aktiviert ist, und die Instanz für Arbeitslasten mit vielen Schreibvorgängen verwendet wird, können Instanzvorgänge aufgrund eines Deadlocks und einer zunehmenden Replikationsverzögerung unbegrenzt pausieren.

Dieses Problem tritt in MySQL 8.0.27 bis MySQL 8.0.32 auf.

Weitere Informationen finden Sie unter MySQL Bug #95863 und MySQL Bug #103636.

Führen Sie die folgenden Empfehlungen zur Problembehebung aus, um das Problem zu beheben:

  • Führen Sie ein Upgrade auf MySQL 8.0.33, eine beliebige Nebenversion danach oder die neueste Version durch.
  • Deaktivieren Sie die parallele Replikation, um die Ursache des Problems zu ermitteln, und planen Sie dann ein entsprechendes Upgrade. Obwohl das Deaktivieren der parallelen Replikation das Problem vorübergehend beheben kann, wird es nicht als langfristige Lösung empfohlen.

Probleme mit Berechtigungen

In den folgenden Abschnitten werden bekannte Probleme im Zusammenhang mit Berechtigungen behandelt.

Änderungen an Berechtigungen

MySQL hat die Sicherheits- und Kontoverwaltungssysteme in MySQL 8.0 geändert.

Nach dem Upgrade auf MySQL 8.0 haben Nutzer, die in MySQL 5.7 erstellt wurden, möglicherweise nicht dieselben Berechtigungen und denselben Zugriff wie Nutzer, die in MySQL 8.0 erstellt wurden. Daher erhalten Nutzer, die in MySQL 5.7 erstellt wurden, in den folgenden Szenarien möglicherweise eine Fehlermeldung, dass der Zugriff verweigert wurde:

  • Nutzer, die von MySQL 5.7 aktualisiert wurden, haben möglicherweise nicht die Berechtigungen CREATE ROLE und DROP ROLE , da diese Berechtigungen in MySQL 5.7 nicht vorhanden waren.
  • Nutzer, die von MySQL 5.7 aktualisiert wurden, können möglicherweise den KILL Befehl nicht ausführen. Für diesen Befehl sind in MySQL 8.0 jetzt CONNECTION_ADMIN Berechtigungen erforderlich.

Weitere Informationen finden Sie unter Alle in MySQL 8.0 verfügbaren Berechtigungen.

Eine Beispiel-Fehlermeldung sieht so aus:

    ERROR 1227 (42000): Access denied; you need (at least one of) the GRANT OPTION privilege(s) for this operation
  

Sie können keine dieser aktualisierten Berechtigungen direkt einem vorhandenen Nutzer zuweisen. Um dieses Problem zu beheben, sollte ein Administrator mit den Berechtigungen GRANT OPTION die Nutzerberechtigungen nach dem Upgrade zurücksetzen, um das Upgrade der Hauptversion abzuschließen.

Weitere Informationen finden Sie unter Hauptversion der Datenbank direkt aktualisieren.

Änderungen an Berechtigungen führen zu einem Fehler, dass der Zugriff verweigert wurde

Nutzer, die in MySQL 5.7 erstellt und auf MySQL 8.0 aktualisiert wurden, können sich aufgrund eines Berechtigungsproblems möglicherweise nicht mit der Datenbank verbinden. In solchen Fällen erhalten Nutzer möglicherweise die folgende Fehlermeldung:

    Access denied for user 'USER_NAME'@'%' to database 'MY_DATABASE_NAME' ;
  

In MySQL 8.0.16 wurde das partial_revokes Datenbank-Flag eingeführt und standardmäßig aktiviert, sodass Nutzerberechtigungen teilweise widerrufen werden können.

Wenn Nutzer, die in MySQL 5.7 erstellt wurden, mit Platzhaltern definiert wurden, können sich diese Nutzer möglicherweise nicht mit der Datenbank verbinden. Platzhalter werden in MySQL 8.0.16 oder höher nicht mehr unterstützt. Das bedeutet, dass MySQL keine genaue Übereinstimmung für die Datenbank und den Nutzer finden kann, was dazu führen kann, dass einige vorhandene Berechtigungszuweisungen beim Upgrade nicht berücksichtigt werden.

Dieses Problem betrifft MySQL 8.0.16 oder höher.

Weitere Informationen finden Sie unter Datenbank-Flags konfigurieren und Sicherheit und Kontoverwaltung.

Um dieses Problem zu beheben, muss ein Administrator Berechtigungen in MySQL 8.0 manuell Nutzern zuweisen.

Änderungen an Flagwerten zwischen MySQL 5.7 und MySQL 8.0

Wenn Sie ein Upgrade von MySQL 5.7 auf MySQL 8.0 durchführen, können sich einige Datenbank-Flagwerte aufgrund einer Änderung der Standardwerte zwischen den Versionen ändern. Dieses Verhalten kann zu Leistungsproblemen führen.

Weitere Informationen finden Sie unter Neue Standardwerte in MySQL 8.0.

Um dieses Problem zu beheben, prüfen Sie, ob alle manuell zugewiesenen Datenbank-Flagwerte, die in MySQL 5.7 festgelegt wurden, nach dem Upgrade auf MySQL 8.0 oder höher weiterhin angewendet werden. Wir empfehlen, die Standardwerte für die System-Flagsbeizubehalten.

Nächste Schritte