Problemi noti nelle versioni secondarie di MySQL 8.0

Questa pagina descrive i problemi e le incompatibilità noti 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 ulteriori informazioni sull'upgrade della versione principale, consulta Eseguire l'upgrade della versione principale del database sul posto. Per saperne di più sui log degli errori, consulta e Visualizzare i log degli errori.

Problemi di prestazioni

Le sezioni seguenti trattano i problemi di rendimento noti.

Problemi con la query SELECT DISTINCT

Se utilizzi la query SELECT DISTINCT in MySQL 8.0.18 fino a MySQL 8.0.20, potresti riscontrare prestazioni ridotte. I tempi di esecuzione delle query potrebbero triplicarsi rispetto a MySQL 5.7.

Per ulteriori informazioni, consulta MySQL Bug #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 fino a 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 query SELECT... GROUP BY in MySQL 8.0.36 o versioni precedenti, potresti riscontrare prestazioni ridotte e tempi di esecuzione delle query più lunghi.

Ciò potrebbe accadere se la query utilizza il motore TempTable.

Per ulteriori informazioni, consulta il bug n. 107700 di MySQL.

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 flag del database internal_tmp_mem_storage_engine per utilizzare il motore di memoria anziché il motore delle tabelle temporanee:
        SET SESSION internal_tmp_mem_storage_engine='memory' ;
      

Problemi relativi ai thread con 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 flag innodb_log_writer_threads per migliorare le prestazioni sui sistemi ad alta concorrenza. Questo flag è attivo 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 disattivare il flag innodb_log_writer_threads.

Per ulteriori informazioni, consulta MySQL Bug #93734.

Problemi con JOINS

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

Per ulteriori informazioni, consulta il bug n. 109361 di MySQL.

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, per la stessa query potrebbe essere utilizzato un piano di query diverso in MySQL 8.0 rispetto a MySQL 5.7.

Per ulteriori informazioni, consulta 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 seguenti sezioni trattano i problemi noti di perdita di memoria in MySQL 8.0 o versioni successive. Questi problemi influiscono probabilmente anche sulle prestazioni dell'istanza.

Perdita di memoria causata dalle query di intervallo

Se utilizzi l'ottimizzatore di intervalli nelle istanze con MySQL 8.0.16 fino a 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 maggiori informazioni, consulta il bug n. 105331 di MySQL.

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 fino alla versione 8.0.31, la query potrebbe consumare una quantità molto elevata di memoria nel file di codice e nella funzione memory/sql/sp_head::execute_mem_root.

Per ulteriori informazioni, consulta il bug n. 107327 di MySQL.

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 dispone di privilegi di revoca parziale.

Per maggiori informazioni, consulta Bug #103133 di MySQL.

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 disponga di privilegi di revoca parziale. Se devi utilizzare l'utente root@'%' o il ruolo cloudsqlsuperuser, assicurati di utilizzarli solo per le procedure amministrative 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 molte scritture, le operazioni dell'istanza potrebbero essere sospese a tempo indeterminato a causa di un deadlock e dell'accumulo di ritardo di replica.

Questo problema si verifica in MySQL 8.0.27 fino a MySQL 8.0.32.

Per ulteriori informazioni, consulta MySQL Bug #95863 e MySQL Bug #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.
  • Disattiva la replica parallela per verificare la causa del problema e poi pianifica un upgrade corretto. Sebbene la disattivazione della replica parallela possa risolvere temporaneamente il problema, non è consigliata come soluzione a lungo termine.

Problemi relativi ai privilegi

Le sezioni seguenti descrivono 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 disporre dei privilegi CREATE ROLE e DROP ROLE, in quanto questi privilegi non esistevano in MySQL 5.7.
  • Gli utenti che hanno eseguito l'upgrade da MySQL 5.7 potrebbero non essere in grado di eseguire il comando KILL, che ora richiede i privilegi CONNECTION_ADMIN per funzionare in MySQL 8.0.

Per ulteriori informazioni, puoi controllare tutti i privilegi disponibili in MySQL 8.0.

Un messaggio di errore di esempio è 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 ulteriori informazioni, vedi Eseguire l'upgrade in loco della versione principale del database.

Le modifiche ai privilegi causano l'errore Accesso negato

Gli utenti creati in MySQL 5.7 e aggiornati a MySQL 8.0 potrebbero non riuscire a 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 la revoca parziale dei 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 causare la mancata assegnazione di alcuni privilegi esistenti durante l'upgrade.

Questo problema riguarda MySQL 8.0.16 o versioni successive.

Per ulteriori informazioni, vedi Configurare i flag del database e Gestione della sicurezza e 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 variazione dei valori predefiniti tra le versioni. Questo comportamento potrebbe causare problemi di prestazioni.

Per ulteriori informazioni, consulta la sezione Nuovi valori predefiniti in MySQL 8.0.

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

Passaggi successivi