Problemi noti nelle versioni secondarie di MySQL 8.0

Questa pagina descrive i problemi noti e le incompatibilità che potresti riscontrare dopo aver eseguito un upgrade della versione principale da Cloud SQL per MySQL 5.7 a Cloud SQL per MySQL 8.0.

Per saperne di più sull'upgrade della versione principale, vedi Eseguire l'upgrade della versione principale del database in loco. Per saperne di più sui log degli errori, vedi e Visualizzare i log degli errori.

Problemi di prestazioni

Le sezioni seguenti trattano i problemi di prestazioni noti.

Problemi con la query SELECT DISTINCT

Se utilizzi la query SELECT DISTINCT in MySQL 8.0.18 - MySQL 8.0.20, potresti riscontrare una riduzione delle prestazioni. I tempi di esecuzione delle query potrebbero essere tre volte più lunghi rispetto a MySQL 5.7.

Per saperne di più, vedi Bug di MySQL n. 99593.

Per risolvere il problema, segui questi consigli per la risoluzione dei problemi:

  • Esegui l'aggiornamento a MySQL 8.0.21, a qualsiasi versione secondaria successiva o all'ultima release.
  • Se utilizzi MySQL 8.0.18 - MySQL 8.0.20, aggiorna il valore del flag di database internal_tmp_mem_storage_engine a memory:
        SET SESSION internal_tmp_mem_storage_engine='memory' ;
      

Problemi con le query GROUP BY

Se utilizzi le query SELECT... GROUP BY in MySQL 8.0.36 o versioni precedenti, potresti riscontrare una riduzione delle prestazioni e un aumento dei tempi di esecuzione delle query.

Questo potrebbe accadere se la query utilizza il TempTable motore.

Per saperne di più, vedi Bug di MySQL n. 107700.

Per risolvere il problema, segui questi consigli per la risoluzione dei problemi:

  • Esegui l'aggiornamento a MySQL 8.0.37, a qualsiasi versione secondaria successiva o all'ultima release.
  • Se utilizzi MySQL 8.0.36 o versioni precedenti, aggiorna il internal_tmp_mem_storage_engine flag di database in modo che utilizzi il motore di memoria anziché il motore di tabelle temporanee:
        SET SESSION internal_tmp_mem_storage_engine='memory' ;
      

Problemi con i thread a bassa concorrenza

Le istanze create in MySQL 8.0.22 o versioni successive che supportano applicazioni client con thread a bassa concorrenza potrebbero riscontrare problemi di prestazioni e tempi di esecuzione delle query più lunghi.

MySQL 8.0.22 ha introdotto il innodb_log_writer_threads flag per migliorare le prestazioni sui sistemi a elevata concorrenza. Questo flag è abilitato per impostazione predefinita. Se hai istanze create in MySQL 8.0.22 o versioni successive che supportano applicazioni client con thread a bassa concorrenza, ti consigliamo di disabilitare il flag innodb_log_writer_threads.

Per saperne di più, vedi Bug di MySQL n. 93734.

Problemi con JOINS

Se utilizzi le query JOIN con la eq_ref visualizzazione nelle istanze che utilizzano MySQL 8.0.29 - MySQL 8.0.32, potresti riscontrare problemi di prestazioni significativi.

Per saperne di più, vedi Bug di MySQL n. 109361.

Per risolvere il problema, esegui l'aggiornamento a MySQL 8.0.33, a qualsiasi versione secondaria successiva o all'ultima release.

Problemi con la clausola LIMIT e ORDER BY

Se esegui una query con le clausole LIMIT e ORDER BY in MySQL 8.0.32 o versioni precedenti, potresti riscontrare un problema di prestazioni. In alcuni casi, in MySQL 8.0 potrebbe essere utilizzato un piano di query diverso rispetto a MySQL 5.7 per la stessa query.

Per saperne di più, vedi Modifiche in MySQL 8.0.33.

Per risolvere il problema, esegui l'aggiornamento a MySQL 8.0.33, a qualsiasi versione secondaria successiva o all'ultima release.

Problemi di perdita di memoria in MySQL 8.0

Le sezioni seguenti trattano i problemi di perdita di memoria noti in MySQL 8.0 o versioni successive. È probabile che questi problemi influiscano anche sulle prestazioni dell'istanza.

Perdita di memoria causata da query di intervallo

Se utilizzi l'ottimizzatore di intervalli nelle istanze con MySQL 8.0.16 - MySQL 8.0.28, potrebbe verificarsi un elevato consumo di memoria da parte del file di codice e della funzione memory/sql/THD::main_mem_root. Ciò può causare l'esaurimento della memoria (OOM) dell'istanza.

Per saperne di più, vedi Bug di MySQL n. 105331.

Per risolvere il problema, esegui l'aggiornamento a MySQL 8.0.29, a qualsiasi versione secondaria successiva o all'ultima release.

Perdita di memoria associata alle stored procedure

Se esegui una query in una stored procedure nelle istanze con MySQL 8.0.27 - 8.0.31, la query potrebbe consumare una quantità di memoria molto elevata nel file di codice e nella funzione memory/sql/sp_head::execute_mem_root.

Per saperne di più, vedi Bug di MySQL n. 107327.

Per risolvere il problema, esegui l'aggiornamento a MySQL 8.0.32, a qualsiasi versione secondaria successiva o all'ultima release.

Perdita di memoria causata dall'accesso a una visualizzazione utilizzando SELECT

Se utilizzi la query SELECT in MySQL 8.0.35 o versioni precedenti e la tua applicazione utilizza numerose chiamate di visualizzazione, potresti riscontrare una perdita di memoria notevole.

Inoltre, se la visualizzazione DEFINER è impostata su root@'%' o su un utente derivato dal ruolo cloudsqlsuperuser, potresti riscontrare una perdita di memoria. Questo perché il ruolo cloudsqlsuperuser ha privilegi di revoca parziale.

Per saperne di più, vedi Bug di MySQL n. 103133.

Per risolvere il problema, segui questi consigli per la risoluzione dei problemi:

  • Esegui l'aggiornamento a MySQL 8.0.36, a qualsiasi versione secondaria successiva o all'ultima release.
  • Se utilizzi MySQL 8.0.35 o versioni precedenti, utilizza un utente separato per la visualizzazione DEFINER, in particolare un utente che non abbia privilegi di revoca parziale. Se devi utilizzare l'utente root@'%' o il ruolo cloudsqlsuperuser, assicurati di utilizzarli solo per i processi amministrativi e non per le query delle applicazioni. Se la perdita di memoria persiste, devi eseguire l'upgrade a MySQL 8.0.36, a qualsiasi versione secondaria successiva o all'ultima release.

Problemi di replica

La sezione seguente tratta i problemi noti relativi alla replica.

Problemi con la replica parallela

Se utilizzi la replica parallela in una replica multithread con il componente slave_preserve_commit_order abilitato e l'istanza viene utilizzata per carichi di lavoro con un elevato numero di scritture, le operazioni dell'istanza potrebbero essere messe in pausa a tempo indeterminato a causa di un deadlock e di un aumento del tempo di ritardo della replica.

Questo problema si verifica in MySQL 8.0.27 - MySQL 8.0.32.

Per saperne di più, vedi Bug di MySQL n. 95863 e Bug di MySQL n. 103636.

Per risolvere il problema, segui questi consigli per la risoluzione dei problemi:

  • Esegui l'aggiornamento a MySQL 8.0.33, a qualsiasi versione secondaria successiva o all'ultima release.
  • Disabilita la replica parallela per verificare la causa del problema e poi pianifica un upgrade appropriato. Sebbene la disattivazione della replica parallela possa risolvere temporaneamente il problema, non è consigliata come soluzione a lungo termine.

Problemi di privilegi

Le sezioni seguenti trattano i problemi noti relativi ai privilegi.

Modifiche ai privilegi

MySQL ha modificato i sistemi di gestione della sicurezza e degli account in MySQL 8.0.

Dopo l'upgrade a MySQL 8.0, gli utenti creati in MySQL 5.7 potrebbero non avere gli stessi privilegi e lo stesso accesso degli utenti creati in MySQL 8.0. Di conseguenza, gli utenti creati in MySQL 5.7 potrebbero ricevere un messaggio di errore di accesso negato nei seguenti scenari:

  • Gli utenti di cui è stato eseguito l'upgrade da MySQL 5.7 potrebbero non avere i privilegi CREATE ROLE e DROP ROLE, in quanto questi privilegi non esistevano in MySQL 5.7.
  • Gli utenti di cui è stato eseguito l'upgrade da MySQL 5.7 potrebbero non essere in grado di eseguire il KILL comando, che ora richiede i CONNECTION_ADMIN privilegi per funzionare in MySQL 8.0.

Per saperne di più, puoi controllare tutti i privilegi disponibili in MySQL 8.0.

Un esempio di messaggio di errore è simile al seguente:

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

Non puoi assegnare direttamente nessuno di questi privilegi aggiornati a un utente esistente. Per risolvere il problema, un amministratore con i privilegi GRANT OPTION deve reimpostare i privilegi utente dopo l'upgrade per completare l'upgrade della versione principale.

Per saperne di più, vedi Eseguire l'upgrade della versione principale del database in loco.

Le modifiche ai privilegi causano l'errore Accesso negato

Gli utenti creati in MySQL 5.7 di cui è stato eseguito l'upgrade a MySQL 8.0 potrebbero non essere in grado di connettersi al database a causa di un problema di privilegi. In questi casi, gli utenti potrebbero ricevere il seguente messaggio di errore:

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

MySQL 8.0.16 ha introdotto il flag di database partial_revokes e lo ha abilitato per impostazione predefinita, consentendo di revocare parzialmente i privilegi utente.

Se gli utenti creati in MySQL 5.7 sono stati definiti utilizzando caratteri jolly, potrebbero non essere in grado di connettersi al database. I caratteri jolly non sono più supportati in MySQL 8.0.16 o versioni successive. Ciò significa che MySQL non riesce a trovare una corrispondenza esatta per il database e l'utente, il che potrebbe comportare la mancata assegnazione di alcuni privilegi esistenti durante l'upgrade.

Questo problema riguarda MySQL 8.0.16 o versioni successive.

Per saperne di più, vedi Configurare i flag di database e Sicurezza e gestione degli account.

Per risolvere il problema, un amministratore deve assegnare manualmente le autorizzazioni agli utenti in MySQL 8.0.

Modifiche ai valori dei flag tra MySQL 5.7 e MySQL 8.0

Quando esegui l'upgrade da MySQL 5.7 a MySQL 8.0, alcuni valori dei flag di database potrebbero essere modificati a causa di una modifica dei valori predefiniti tra le versioni. Questo comportamento potrebbe causare problemi di prestazioni.

Per saperne di più, vedi Nuovi valori predefiniti in MySQL 8.0.

Per risolvere il problema, assicurati che tutti i valori dei flag di database assegnati manualmente in MySQL 5.7 vengano applicati anche dopo l'upgrade a MySQL 8.0 o versioni successive. Ti consigliamo di lasciare i valori predefiniti assegnati ai flag di sistema.

Passaggi successivi