View a markdown version of this page

Risoluzione dei problemi di memoria insufficiente per i database Aurora MySQL - Amazon Aurora

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à.

Risoluzione dei problemi di memoria insufficiente per i database Aurora MySQL

Quando la memoria di un'istanza di Aurora MySQL DB è estremamente bassa, il sistema operativo può interrompere il processo del database, provocando un riavvio non pianificato. Per aiutare a prevenire questi riavvii, Aurora MySQL include funzionalità di gestione della memoria che monitorano la memoria di sistema e intraprendono azioni di ripristino automatiche quando la memoria è insufficiente. Queste azioni aiutano a prevenire l'indisponibilità del database a causa dell'esaurimento della memoria.

I seguenti parametri controllano questo comportamento:

  • aurora_enable_memory_management— Disponibile solo in Aurora MySQL 8.4.

    • Quando ON (impostazione predefinita), Aurora gestisce automaticamente le azioni di ripristino della memoria e il parametro viene ignorato. aurora_oom_response

    • Impostato su per OFF controllare manualmente le azioni di ripristino tramite. aurora_oom_response

  • aurora_oom_response— Un elenco separato da virgole di azioni di ripristino. Una stringa vuota disabilita tutte le azioni. Disponibile in Aurora MySQL versione 3. Disponibile anche in Aurora MySQL 8.4 ma considerato solo quando è impostato su. aurora_enable_memory_management OFF

Azioni di risposta OOM

È possibile includere le seguenti azioniaurora_oom_response, elencate dalla meno aggressiva alla più aggressiva.

Azione Cosa fa Note
print Registra le interrogazioni e le connessioni che richiedono molta memoria nel registro degli errori. Nessuna richiesta o connessione viene interrotta. Disponibile nelle versioni Aurora MySQL 3 e 8.4.
tune Riduce le cache interne delle tabelle (,) per liberare memoria. table_open_cache table_definition_cache Le dimensioni della cache vengono ripristinate quando la memoria torna alla normalità. Le voci precedentemente memorizzate nella cache non vengono ripristinate; le nuove voci vengono aggiunte solo quando le query successive vi accedono. Disponibile nelle versioni Aurora MySQL 3 e 8.4. Solo istanze con provisioning, non supportate su Serverless v2.
tune_buffer_pool Riduce il pool di buffer InnoDB per liberare memoria. La dimensione del buffer pool viene ripristinata quando la memoria torna alla normalità. Le pagine precedentemente rimosse dalla cache non vengono ricaricate automaticamente; le nuove pagine vengono memorizzate nella cache solo quando le query successive vi accedono. Solo Aurora MySQL versione 3 (3.06 e successive) e Aurora MySQL 8.4. Supportato solo su istanze con provisioning con 2 vCPU. Non supportato su Serverless v2.
decline Rifiuta le nuove query con un errore mentre la memoria è insufficiente. Disponibile nelle versioni Aurora MySQL 3 e 8.4.
kill_query Termina le SELECT query in esecuzione, iniziando dal consumo di memoria più elevato, fino a quando la memoria non torna alla normalità. DDL, altri DML e transazioni non sono interessati. Disponibile nelle versioni Aurora MySQL 3 e 8.4. Si escludono a vicenda conkill_connect: se entrambi sono impostati, si attiva solo. kill_connect
kill_connect Termina le connessioni degli utenti, ripristina le transazioni attive e termina le dichiarazioni DDL. Vedi il comportamento specifico della versione di seguito.
Importante

È necessario associare tune_buffer_pool con kill_query o kill_connect nel valore del parametro aurora_oom_response. Senza uno di questi, il ridimensionamento del buffer pool non avviene nemmeno quando è incluso. tune_buffer_pool

comportamento specifico della versione kill_connect

Versione Aurora MySQL Comportamento
Aurora MySQL 3.04 — Aurora MySQL 3.10 Termina le connessioni utente per liberare memoria sufficiente per consentire al database di recuperare dalla pressione della memoria.
Aurora MySQL 3.11+, Aurora MySQL 8.4 Termina le connessioni utente per liberare memoria sufficiente per consentire al database di recuperare dalla pressione della memoria. Inoltre, interrompe qualsiasi connessione utente che tenti di allocare memoria durante la pressione della memoria.

Su Serverless v2, Aurora risponde alla pressione della memoria scalando innanzitutto le ACU per fornire memoria aggiuntiva. Se la pressione della memoria persiste mentre è in corso il ridimensionamento, Aurora può interrompere le connessioni esistenti per recuperare la memoria. L'interruzione delle connessioni che tentano di allocare memoria si verifica solo quando l'istanza ha raggiunto il limite ACU massimo configurato e non può più scalare ulteriormente.

Valori predefiniti per versione

Aurora MySQL si configura automaticamente in aurora_oom_response base alla versione del motore, al tipo di istanza e alla memoria disponibile.

In Aurora MySQL 8.4, quando aurora_enable_memory_management è ON (impostazione predefinita), Aurora gestisce automaticamente le azioni di ripristino della memoria e il valore non viene utilizzato. aurora_oom_response Se impostato suOFF, Aurora utilizza direttamente il aurora_oom_response valore, che è vuoto per impostazione predefinita, il che significa che non vengono intraprese azioni di ripristino a meno che non le configuri esplicitamente. La seguente tabella delle impostazioni predefinite si applica solo a Aurora MySQL versione 3.

Soglia di istanza ridotta: ≤2 GiB per le versioni 3.04 e 3.05. ≤4 GiB per la versione 3.06 e successive.

Soglia di istanza ampia: >2 GiB per le versioni 3.04 e 3.05. > 4 GiB per la versione 3.06 e successive.

Versione Dimensioni istanza Assegnata Serverless v2
Aurora MySQL 3.04 — Aurora MySQL 3.05 Smallprint,tuneprint
Largedisabilitato disabile
Aurora MySQL 3.06 Smallprint,tune,decline,kill_connectprint
Largedisabilitato disabile
Aurora MySQL 3.07 Smallprint,tune,decline,kill_connectprint
Largeprintprint
Aurora MySQL 3.08 Smallprint,tune,tune_buffer_pool,decline,kill_connectprint
Largeprintprint
Aurora MySQL 3.09—Aurora MySQL 3.10 Smallprint,tune,tune_buffer_pool,decline,kill_connectprint
Largeprint,decline,kill_connectprint,decline,kill_connect
Aurora MySQL 3.11+ Smallprint,tune,tune_buffer_pool,decline,kill_connectprint,decline,kill_connect
Largeprint,decline,kill_connectprint,decline,kill_connect

Aurora Serverless v2

Le tune_buffer_pool azioni tune and non sono supportate su Aurora Serverless v2. Tutte le altre azioni funzionano allo stesso modo delle istanze con provisioning.

Le soglie di memoria si regolano dinamicamente man mano che l'istanza ridimensiona le proprie ACU. La colonna Serverless v2 nella tabella delle impostazioni predefinite riportata sopra mostra le impostazioni predefinite effettive per ciascuna versione.

Monitoraggio

È possibile monitorare l'attività di prevenzione dell'OOM tramite i seguenti metodi.

Log di errori

Quando vengono intraprese azioni di ripristino della memoria, Aurora MySQL scrive messaggi nel registro degli errori del database. Il prefisso del messaggio varia in base alla versione e può cambiare nelle versioni future:

  • Aurora MySQL versione 3: i messaggi sono preceduti da. OOM crash avoidance:

  • Aurora MySQL versione 8.4: i messaggi sono preceduti da. Aurora memory management:

Questi messaggi includono:

  • Pressione della memoria rilevata e notifiche ripristinate con memoria totale e disponibile

  • Dettagli delle richieste o delle connessioni terminate per il ripristino della memoria

  • Domande candidate identificate dall'azione print

Per visualizzare il registro degli errori, vedereRegistri degli errori Aurora MySQL.

CloudWatch Metriche di Amazon

Le seguenti CloudWatch metriche tracciano l'attività di prevenzione degli OOM a livello di istanza.

MetricaDescriptionDisponibile daUnità
AuroraMemoryHealthStateIndica lo stato di salute della memoria. 0significa sano (nessuna pressione della memoria), 5 significa pressione della memoria moderata, 10 significa pressione della memoria critica.Aurora MySQL 3.06.1+, Aurora MySQL 8.4Gauge
AuroraMemoryNumDeclinedSqlTotalIl numero incrementale di domande è diminuito come parte della prevenzione dell'OOM.Aurora MySQL 3.06.1+, Aurora MySQL 8.4Conteggio
AuroraMemoryNumKillConnTotalIl numero incrementale di connessioni chiuse per evitare l’esaurimento della memoria.Aurora MySQL 3.06.1+, Aurora MySQL 8.4Conteggio
AuroraMemoryNumKillQueryTotalIl numero incrementale di interrogazioni terminate come parte della prevenzione di OOM.Aurora MySQL 3.06.1+, Aurora MySQL 8.4Conteggio
AuroraMillisecondsSpentInOomRecoveryL'intervallo di tempo trascorso dal momento in cui lo stato della memoria è sceso al di sotto dello stato normale.Aurora MySQL 3.08.0+, Aurora MySQL 8.4Millisecondi
AuroraNumOomRecoverySuccessfulIl numero di volte in cui l'integrità della memoria è stata ripristinata allo stato normale.Aurora MySQL 3.08.0+, Aurora MySQL 8.4Conteggio
AuroraNumOomRecoveryTriggeredIl numero di volte in cui lo stato della memoria è sceso al di sotto dello stato normale.Aurora MySQL 3.08.0+, Aurora MySQL 8.4Conteggio

Le seguenti metriche generali sono utili anche per monitorare la pressione della memoria: CloudWatch

MetricaDescriptionUnità
FreeableMemoryLa quantità di memoria disponibile. Riporta il MemAvailable valore di/proc/meminfo.Byte
SwapUsageLa quantità di spazio di scambio utilizzato.Byte

Per l'elenco completo delle metriche a livello di istanza di Aurora MySQL, consulta. Instance-level metriche per Amazon Aurora

Variabili di stato globali

Le seguenti variabili di stato forniscono informazioni sullo stato OOM. Disponibile in Aurora MySQL versione 3.06.0 e successive.

VariabileDescription
Aurora_oom_responseLe azioni di risposta OOM attualmente attive per questa istanza DB.
aurora_oom_avoidance_recovery_stateSe il ripristino OOM è ACTIVE oINACTIVE.
aurora_oom_statusStato attuale della memoria del database: integro (nessuna pressione di memoria), pressione della memoria moderata o pressione critica della memoria. Disponibile solo nella versione 3.

Per interrogare: SHOW GLOBAL STATUS LIKE 'aurora_oom%';

Per l'elenco completo delle variabili di stato globali di Aurora MySQL, consulta. Variabili di stato globali di Aurora MySQL

Approfondimenti sulle prestazioni

Se Performance Insights è abilitato, puoi utilizzare le metriche di OS-level memoria per monitorare la pressione della memoria e rilevare gli eventi OOM. Le seguenti metriche sono disponibili sotto i contatori os.memory eos.swap:

MetricaDescription
os.memory.outOfMemoryKillCountIl numero di uccisioni OOM nell'ultimo intervallo di raccolta. Un valore diverso da zero indica che il sistema operativo ha terminato un processo a causa dell'esaurimento della memoria, che in genere comporta il riavvio del database.
os.memory.totalLa quantità totale di memoria, in kilobyte.
os.memory.freeLa quantità di memoria non assegnata, in kilobyte.
os.memory.activeLa quantità di memoria assegnata, in kilobyte.
os.memory.cachedLa quantità di memoria utilizzata per la memorizzazione nella cache del file system I/O, in kilobyte.
os.memory.dirtyLa quantità di pagine di memoria modificate ma non ancora scritte nella memoria, in kilobyte.
os.memory.inactiveLa quantità di pagine di memoria utilizzate meno frequentemente, in kilobyte.
os.memory.db.residentSetSizeLa quantità di memoria utilizzata dal processo del database (esclusa la memoria condivisa), in byte.
os.memory.db.cacheLa quantità di memoria utilizzata per la cache delle pagine dal processo di database, in byte.
os.memory.db.swapLa quantità di memoria di swap utilizzata dal processo di database, in byte.
os.swap.inLa quantità di memoria scambiata dal disco, in kilobyte.
os.swap.outLa quantità di memoria trasferita su disco, in kilobyte.

È possibile monitorare os.memory.outOfMemoryKillCount per rilevare quando il sistema operativo ha interrotto il processo del database a causa dell'esaurimento della memoria. Per l'elenco completo dei contatori del sistema operativo, vedere Contatori del sistema operativo.

Schema delle prestazioni

Se performance_schema è abilitata, è possibile utilizzare le tabelle di riepilogo della memoria per identificare i componenti e le connessioni che consumano più memoria. Per ulteriori informazioni, consulta Risoluzione dei problemi di utilizzo della memoria per i database Aurora MySQL.