Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Problemi e limitazioni note per Amazon RDS for MySQL
I problemi e le limitazioni note per l’utilizzo di Amazon RDS for MySQL sono sotto riportarti.
Argomenti
Parola riservata InnoDB
InnoDB
è una parola riservata per RDS per MySQL. Non è possibile utilizzare questo nome per un database MySQL.
Comportamento in caso di storage pieno per Amazon RDS for MySQL
Quando lo storage diventa pieno per un'istanza di database MySQL, possono verificarsi delle incongruenze di metadati, disallineamenti del dizionario e tabelle orfane. Per evitare questi problemi, Amazon RDS interrompe automaticamente un'istanza database che raggiunge lo stato storage-full
.
Un'istanza MySQL database raggiunge lo stato storage-full
nei seguenti casi:
-
L'istanza database ha meno di 20.000 MiB di storage e lo storage disponibile raggiunge almeno 200 MiB.
-
L'istanza database ha più di 102.400 MiB di storage e lo storage disponibile raggiunge 1024 MiB o meno.
-
L'istanza database ha tra 20.000 MiB e 102.400 MiB di storage e ha meno dell'1% di storage disponibile.
Dopo che Amazon RDS interrompe automaticamente un'istanza database perché ha raggiunto lo stato storage-full
, è comunque possibile modificarla. Per riavviare l'istanza database, completa almeno una delle seguenti operazioni:
-
Modifica l'istanza database per abilitare il dimensionamento automatico dello storage.
Per ulteriori informazioni sul dimensionamento automatico dello storage, consulta Gestione della capacità automaticamente con Auto Scaling dello storage Amazon RDS.
-
Modifica l'istanza database per aumentarne la capacità di storage.
Per ulteriori informazioni sull'aumento della capacità di storage, consulta Aumento della capacità di storage dell'istanza database.
Dopo aver apportato una di queste modifiche, l'istanza database viene riavviata automaticamente. Per ulteriori informazioni sulla modifica di un'istanza di database, consulta Modifica di un'istanza Amazon RDS DB.
Dimensione del pool di buffer Innodb incoerente
Per MySQL 5.7, esiste attualmente un bug nel modo in cui viene gestita la dimensione del pool di buffer InnoDB. MySQL 5.7 potrebbe regolare il valore del parametro innodb_buffer_pool_size
in un valore maggiore che possa far sì che il pool di buffer InnoDB diventi troppo grande e utilizzi troppa memoria. Questo effetto può causare l'arresto del motore database MySQL o impedirne l'avvio. Questo problema è più comune per le classi di istanze database con meno memoria disponibile.
Per risolvere questo problema, impostare il valore del parametro innodb_buffer_pool_size
su un multiplo del prodotto del valore del parametro innodb_buffer_pool_instances
e del valore del parametro innodb_buffer_pool_chunk_size
. Ad esempio, si potrebbe impostare il valore del parametro innodb_buffer_pool_size
su un multiplo di otto volte del prodotto del valore del parametro innodb_buffer_pool_instances
e innodb_buffer_pool_chunk_size
, come mostrato nel seguente esempio.
innodb_buffer_pool_chunk_size = 536870912 innodb_buffer_pool_instances = 4 innodb_buffer_pool_size = (536870912 * 4) * 8 = 17179869184
L'ottimizzazione dell'unione dell'indice restituisce risultati errati
Le query che utilizzano l'ottimizzazione dell'unione degli indici potrebbero restituire risultati errati a causa di un bug nell'ottimizzatore di query MySQL introdotto in MySQL 5.5.37. Quando esegui una query su una tabella con più indici, lo strumento di ottimizzazione analizza gli intervalli di riga in base a più indici, ma non unisce i risultati correttamente. Per ulteriori informazioni sul bug di Query Optimizer, consulta http://bugs.mysql.com/bug.php?id=72745
Ad esempio, si consideri una query su una tabella con due indici in cui gli argomenti di ricerca fanno riferimento alle colonne indicizzate.
SELECT * FROM table1 WHERE indexed_col1 = 'value1' AND indexed_col2 = 'value2';
In questo caso, la ricerca verrà effettuata su entrambi gli indici. Tuttavia, a causa del bug, i risultati uniti non sono corretti.
Per risolvere il problema, è possibile procedere in uno dei seguenti modi:
Imposta il parametro
optimizer_switch
suindex_merge=off
nel gruppo di parametri di database per l'istanza di database MySQL. Per informazioni sull'impostazione dei parametri appartenenti a un gruppo di parametri di database, consulta Gruppi di parametri per RDS.-
Aggiorna l'istanza database MySQL a MySQL versione 5.7 o 8.0. Per ulteriori informazioni, consulta Aggiornamenti del motore RDS for MySQL DB.
-
Se non riesci ad aggiornare l'istanza o a modificare il parametro
optimizer_switch
, puoi aggirare il bug identificando in modo esplicito un indice per la query, ad esempio:SELECT * FROM table1 USE INDEX covering_index WHERE indexed_col1 = 'value1' AND indexed_col2 = 'value2';
Per ulteriori informazioni, consulta Index merge optimization
Eccezioni dei parametri di MySQL per le istanze database Amazon RDS
Alcuni parametri MySQL richiedono considerazioni speciali quando vengono utilizzati con un'istanza database Amazon RDS.
lower_case_table_names
Poiché Amazon RDS usa un file system che fa distinzione tra maiuscole e minuscole, l'impostazione del valore del parametro server lower_case_table_names
su 2 (nomi archiviati come dati ma confrontati in lettere minuscole) non è supportata. Di seguito sono riportati i valori supportati per le istanze database Amazon RDS for MySQL:
-
0 (nomi archiviati come dati e confronti con distinzione tra minuscole e maiuscole) è supportato per tutte le versioni di per MySQL.
-
1 (i nomi memorizzati in minuscolo e i confronti non fanno distinzione tra maiuscole e minuscole) è supportato per RDS for MySQL versione 5.7, versione 8.0.28 e versioni successive 8.0 e versione 8.4.
Prima di creare un'istanza database, il parametro lower_case_table_names
dovrebbe essere impostato come parte di un gruppo di parametri database personalizzato. Quindi, specificare il gruppo di parametri database personalizzato quando viene creata l'istanza database.
Quando un gruppo di parametri è associato a un'istanza database MySQL con una versione inferiore a 8.0, si consiglia di evitare di modificare il parametro lower_case_table_names
nel gruppo di parametri. La modifica potrebbe causare incongruenze nei backup di ripristino e nella lettura delle istanze DB di replica. point-in-time
Quando un gruppo di parametri è associato a un'istanza DB MySQL versione 8.0 o 8.4, non è possibile modificare il lower_case_table_names
parametro nel gruppo di parametri.
Le repliche di lettura dovrebbero sempre usare lo stesso valore del parametro lower_case_table_names
in qualità di istanza DB di origine.
long_query_time
È possibile impostare il parametro long_query_time
su un valore del punto variabile che consenta di registrare query lente nel log delle query lente MySQL con risoluzione al microsecondo. È possibile impostare un valore come 0,1 secondi, che sarebbe 100 millisecondi, per aiutare durante il debug delle transazioni lente che richiedono meno di un secondo.
Limiti delle dimensioni dei file MySQL in Amazon RDS
Per le istanze DB MySQL versione 8.0 e successive, la dimensione massima del file è di 16 TiB. Quando si utilizzano file-per-table i tablespace, la dimensione massima del file limita la dimensione di una tabella InnoDB a 16 TiB. I file-per-table tablespace InnoDB (con tabelle ciascuna nel proprio tablespace) sono impostati di default per le istanze DB MySQL. Per ulteriori informazioni, consulta InnoDB Limits nella documentazione
Nota
Alcune istanze database esistenti hanno un limite inferiore. Ad esempio, le istanze database MySQL create prima di aprile 2014 hanno un limite di dimensioni di file e tabelle di 2 TB. Questo limite di 2 TB delle dimensioni si applica anche alle istanze database o alle repliche di lettura create da snapshot DB effettuati prima di aprile 2014, a prescindere dalla data di creazione dell'istanza database.
L'utilizzo dei file-per-table tablespace InnoDB presenta vantaggi e svantaggi, a seconda dell'applicazione. Per determinare l'approccio migliore per la tua applicazione, consulta i File-per-table tablespace
Non è consigliabile consentire alle tabelle di crescere fino alla dimensione massima del file. In generale, una pratica migliore consiste nel partizionare i dati in tabelle più piccole, che possano migliorare le prestazioni e i tempi di ripristino.
Un'opzione che è possibile utilizzare per suddividere una tabella di grandi dimensioni in tabelle più piccole è rappresentata dal partizionamento. Il partizionamento distribuisce porzioni della tabella di grandi dimensioni in file separati in base alle regole specificate. Ad esempio, se si archiviano le transazioni per data, è possibile creare regole di partizionamento che distribuiscono le transazioni meno recenti in file separati mediante il partizionamento. Quindi, periodicamente, è possibile archiviare i dati storici della transazione che non devono essere prontamente disponibili per l'applicazione. Per ulteriori informazioni, consulta Partitioning
Poiché non esiste un'unica tabella o vista di sistema che fornisca le dimensioni di tutte le tabelle e dello spazio tabella del sistema InnoDB, è necessario eseguire query su più tabelle per determinare la dimensione degli spazi tabella.
Determinazione della dimensione dello spazio tabella del sistema InnoDB e dello spazio tabella del dizionario dati
-
Utilizza il seguente comando SQL per stabilire se qualche spazio tabella supera le dimensioni consentite e può essere scelta per il partizionamento.
Nota
Il tablespace del dizionario dei dati è specifico per MySQL 8.0 e versioni successive.
select FILE_NAME,TABLESPACE_NAME, ROUND(((TOTAL_EXTENTS*EXTENT_SIZE) /1024/1024/1024), 2) as "File Size (GB)" from information_schema.FILES where tablespace_name in ('mysql','innodb_system');
Determinazione della dimensione delle tabelle utente di InnoDB al di fuori dello spazio tabella del sistema InnoDB (per le versioni 5.7 di MySQL)
-
Utilizza il seguente comando SQL per stabilire se qualche tabella supera le dimensioni consentite e può essere scelta per il partizionamento.
SELECT SPACE,NAME,ROUND((ALLOCATED_SIZE/1024/1024/1024), 2) as "Tablespace Size (GB)" FROM information_schema.INNODB_SYS_TABLESPACES ORDER BY 3 DESC;
Per determinare la dimensione delle tabelle utente InnoDB al di fuori del tablespace del sistema InnoDB (per MySQL 8.0 e versioni successive)
-
Utilizza il seguente comando SQL per stabilire se qualche tabella supera le dimensioni consentite e può essere scelta per il partizionamento.
SELECT SPACE,NAME,ROUND((ALLOCATED_SIZE/1024/1024/1024), 2) as "Tablespace Size (GB)" FROM information_schema.INNODB_TABLESPACES ORDER BY 3 DESC;
Determinazione della dimensione delle tabelle utente non InnoDB
-
Utilizza il seguente comando SQL per stabilire se qualche tabella utente non InnoDB ha dimensioni eccessive.
SELECT TABLE_SCHEMA, TABLE_NAME, round(((DATA_LENGTH + INDEX_LENGTH+DATA_FREE) / 1024 / 1024/ 1024), 2) As "Approximate size (GB)" FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT IN ('mysql', 'information_schema', 'performance_schema') and ENGINE<>'InnoDB';
Per abilitare i tablespace InnoDB file-per-table
-
Imposta il parametro innodb_file_per_table su
1
nel gruppo di parametri dell'istanza database.
Per disabilitare i tablespace InnoDB file-per-table
-
Imposta il parametro innodb_file_per_table su
0
nel gruppo di parametri dell'istanza database.
Per informazioni sull'aggiornamento di un gruppo di parametri database, consulta Gruppi di parametri per RDS.
Dopo aver abilitato o disabilitato file-per-table i tablespace InnoDB, puoi emettere un ALTER
TABLE
comando per spostare una tabella dal tablespace globale al proprio tablespace o dal proprio tablespace al tablespace globale come mostrato nell'esempio seguente:
ALTER TABLE table_name TABLESPACE=innodb_file_per_table;
Plugin Keyring MySQL non supportato
Al momento, Amazon RDS per MySQL non supporta il plugin Keyring Amazon Web Services MySQL keyring_aws
.
Porte personalizzate
Amazon RDS blocca le connessioni alla porta personalizzata 33060 per il motore MySQL. Scegli una porta diversa per il motore MySQL.
Limitazioni delle stored procedure di MySQL
Le stored procedure mysql.rds_kill e mysql.rds_kill_query non possono terminare sessioni o query di proprietà di utenti MySQL con nomi utente più lunghi di 16 caratteri nelle seguenti versioni di RDS per MySQL:
-
8.0.32 e versioni precedenti alla 8
-
5.7.41 e versioni precedenti alla 5.7
Replica basata su GTID con un'istanza di origine esterna
Amazon RDS supporta la replica basata su identificatori di transazione globali (GTIDs) da un'istanza MySQL esterna in un'istanza DB Amazon RDS for MySQL che richiede l'impostazione di GTID_PURGED durante la configurazione. Tuttavia, solo RDS for MySQL 8.0.37 e versioni successive supportano questa funzionalità.
Plugin di autenticazione MySQL predefinito
RDS per MySQL versione 8.0.34 e versioni successive 8.0 utilizzano il plug-in. mysql_native_password
Non è possibile modificare l'impostazione default_authentication_plugin
.
La versione 8.4 e successive di RDS per MySQL utilizza caching_sha2_password
il plug-in come plug-in di autenticazione predefinito. È possibile modificare il plug-in di autenticazione predefinito per MySQL 8.4. Il mysql_native_password
plugin funziona ancora con MySQL 8.4, ma il supporto di questo plugin termina con MySQL 8.4. Per modificare il plug-in di autenticazione predefinito, create un gruppo di parametri personalizzato e modificate il valore del parametro. authentication_policy
Per ulteriori informazioni, consulta Gruppi di parametri predefiniti e personalizzati.
Sovrascrivere innodb_buffer_pool_size
Con classi di istanze DB micro o piccole, il valore predefinito per il innodb_buffer_pool_size
parametro potrebbe differire dal valore restituito eseguendo il comando seguente:
mysql> SELECT @@innodb_buffer_pool_size;
Questa differenza può verificarsi quando Amazon RDS deve sovrascrivere il valore predefinito come parte della gestione delle classi di istanze DB. Se necessario, puoi sovrascrivere il valore predefinito e impostarlo su un valore supportato dalla classe dell'istanza DB. Per determinare un valore valido, aggiungi l'utilizzo della memoria e la memoria totale disponibile sull'istanza DB. Per ulteriori informazioni, consulta i tipi di istanze di Amazon RDS
Se la tua istanza DB ha solo 4 GB di memoria, non puoi innodb_buffer_pool_size
impostarla su 8 GB ma potresti essere in grado di impostarla su 3 GB, a seconda della quantità di memoria allocata per altri parametri.
Se il valore immesso è troppo grande, Amazon RDS lo riduce ai seguenti limiti:
-
Classi di istanze Micro DB: 256 MB
-
classi di istanze db.t4g.micro DB: 128 MB
Aggiornamento da MySQL 5.7 a MySQL 8.4
Non è possibile eseguire l'aggiornamento direttamente da MySQL 5.7 a MySQL 8.4. È necessario prima eseguire l'aggiornamento da MySQL 5.7 a MySQL 8.0 e quindi l'aggiornamento da MySQL 8.0 a MySQL 8.4. Per ulteriori informazioni, consulta Principali aggiornamenti di versione per RDS for MySQL.
Compressione delle pagine InnoDB
La compressione delle pagine InnoDB non funziona con le istanze DB di Amazon RDS che hanno una dimensione del blocco del file system di 16k perché la dimensione del blocco del file system deve essere inferiore alla dimensione della pagina InnoDB. A partire da febbraio 2024, tutte le istanze DB di nuova creazione hanno una dimensione dei blocchi del file system di 16.000 unità, che aumenta la velocità effettiva e riduce il consumo di IOPS durante lo svuotamento delle pagine.