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 un'istanza DB Aurora MySQL ha una memoria estremamente bassa, il sistema operativo può interrompere il processo del database, causando un riavvio non pianificato. Per evitare 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 è scarsa. Queste azioni aiutano a prevenire l'indisponibilità del database dovuta all'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 aurora_oom_response parametro viene ignorato.

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

  • aurora_oom_response— Un elenco di azioni di ripristino separate da virgole. Una stringa vuota disabilita tutte le azioni. Disponibile nella versione 3 di Aurora MySQL. Disponibile anche in Aurora MySQL 8.4, ma viene 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 interrogazione o connessione viene interrotta. Disponibile nelle versioni 3 e 8.4 di Aurora MySQL.
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 3 e 8.4 di Aurora MySQL. Solo istanze con provisioning, non supportate su Serverless v2.
tune_buffer_pool Riduce il pool di buffer InnoDB per liberare memoria. La dimensione del pool di buffer viene ripristinata quando la memoria torna alla normalità. Le pagine precedentemente memorizzate nella cache che erano state rimosse 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 interrogazioni con un errore quando la memoria è insufficiente. Disponibile nelle versioni 3 e 8.4 di Aurora MySQL.
kill_query Interrompe l'esecuzione SELECT delle query, a partire dai consumatori di memoria più elevati, finché la memoria non ritorna alla normalità. DDL, altri file DML e transazioni non sono interessati. Disponibile nelle versioni 3 e 8.4 di Aurora MySQL. Si esclude 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 istruzioni 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 pool di buffer non si verifica 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 degli utenti per liberare memoria sufficiente per il ripristino del database dalla pressione della memoria.
Aurora MySQL 3.11+, Aurora MySQL 8.4 Termina le connessioni degli utenti per liberare memoria sufficiente per il ripristino del database dalla pressione della memoria. Interrompe inoltre 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 durante 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, when is aurora_enable_memory_management (impostazione predefinita), Aurora gestisce automaticamente ON 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 per impostazione predefinita è vuoto, il che significa che non vengono intraprese azioni di ripristino a meno che non le si configuri esplicitamente. La seguente tabella dei valori predefiniti si applica solo ad Aurora MySQL versione 3.

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

Soglia di istanze 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.05Smallprint,tuneprint
Largedisabilitatodisabilitato
Aurora MySQL 3.06Smallprint,tune,decline,kill_connectprint
Largedisabilitatodisabilitato
Aurora MySQL 3.07Smallprint,tune,decline,kill_connectprint
Largeprintprint
Aurora MySQL 3.08Smallprint,tune,tune_buffer_pool,decline,kill_connectprint
Largeprintprint
Aurora MySQL 3.09—Aurora MySQL 3.10Smallprint,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 adattano dinamicamente man mano che l'istanza ridimensiona le sue ACU. La colonna Serverless v2 nella tabella dei valori predefiniti sopra riportata 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 eseguite azioni di ripristino della memoria, Aurora MySQL scrive i messaggi nel registro degli errori del database. Il prefisso del messaggio varia in base alla versione e potrebbe cambiare nelle versioni future:

  • Aurora MySQL versione 3: i messaggi hanno il prefisso con. OOM crash avoidance:

  • Aurora MySQL versione 8.4: i messaggi hanno il prefisso con. Aurora memory management:

Questi messaggi includono:

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

  • Dettagli delle interrogazioni o delle connessioni interrotte per il ripristino della memoria

  • Domande dei candidati identificate dall'azione print

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

CloudWatch Metriche Amazon

Le seguenti CloudWatch metriche tengono traccia delle attività di prevenzione dell'OOM a livello di istanza.

MetricaDescriptionDisponibile daUnità
AuroraMemoryHealthStateIndica lo stato di salute della memoria. 0significa sano (nessuna pressione sulla memoria), 5 significa pressione della memoria moderata, 10 significa pressione critica della memoria.Aurora MySQL 3.06.1+, Aurora MySQL 8.4Gauge
AuroraMemoryNumDeclinedSqlTotalIl numero incrementale di query è diminuito come parte dell'eliminazione 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 query terminate come parte dell'elusione dell'OOM.Aurora MySQL 3.06.1+, Aurora MySQL 8.4Conteggio
AuroraMillisecondsSpentInOomRecoveryIl periodo di tempo trascorso dallo stato di salute della memoria è sceso al di sotto dello stato normale.Aurora MySQL 3.08.0+, Aurora MySQL 8.4Millisecondi
AuroraNumOomRecoverySuccessfulIl numero di volte in cui lo stato di salute della memoria è stato ripristinato allo stato normale.Aurora MySQL 3.08.0+, Aurora MySQL 8.4Conteggio
AuroraNumOomRecoveryTriggeredIl numero di volte in cui lo stato di salute 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 da/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 di integrità attuale della memoria del database: integro (nessuna pressione della 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, vedere. Variabili di stato globali di Aurora MySQL

Approfondimenti sulle prestazioni

Se Performance Insights è abilitato, puoi utilizzare le metriche OS-level della 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 interrotto 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 di 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 di memoria insufficiente. Per l'elenco completo dei contatori del sistema operativo, consulta le metriche del sistema operativo Performance Insights.

Schema delle prestazioni

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