MySQL può sfruttare efficacemente 64 GB di RAM?


22

Abbiamo riscontrato un problema in cui l'esecuzione di query su una tabella con circa 50 milioni di righe e una dimensione dell'indice di 4 GB (dimensioni della tabella di circa 6 GB) provoca lo scambio di memoria del server di database e il rallentamento drammatico. Sono abbastanza sicuro che questo abbia a che fare con il superamento delle dimensioni della tabella temporanea e lo scambio su disco.

Se ho aggiornato il mio server di database da 32 GB di RAM a 64 GB di RAM, mi chiedo se il database MySQL sarà in grado di sfruttare appieno questa memoria aggiuntiva e non lo scambio. Ho esaminato alcune delle variabili (ad es. KEY_BUFFER_SIZE, ecc ...) e sembrano supportare valori di impostazione superiori a 64 GB. Tuttavia, la documentazione di MySQL afferma che tmp_table_size raggiunge il massimo a 4 GB.

Quindi varrebbe la pena l'aggiornamento della memoria? Il problema "query-large-table" trarrebbe vantaggio da questo o non aiuterebbe a causa del limite di 4 GB? So che ci sono potenzialmente altre soluzioni come ristrutturare la tabella per essere partizionata in diversi modi, ecc ... ma senza cambiare nulla sulla tabella, sarebbe utile ulteriore memoria?

Inoltre, in generale, ci sono altre variabili relative alla memoria che MySQL non sarebbe in grado di sfruttare quando si passa da 32 a 64 GB di RAM?

Stiamo usando Linux a 64 bit (Ubuntu) come nostro server di database.

Grazie Galeno

Risposte:


5

Se stai usando InnoDB, la variabile più importante da impostare è innodb_buffer_pool_size. Vorrei impostarlo su circa l'80% della memoria del sistema. Dopo il riscaldamento della cache dopo un certo utilizzo, i dati più attivi (set di dati di lavoro) saranno in memoria (innodb_buffer_pool_size) e le operazioni su di esso dovrebbero essere molto veloci. Con 64 GB di memoria, puoi sicuramente adattarti molto. La memoria è sempre un buon acquisto per i server DB.


11

Sì, se si utilizza InnoDB e si ha un carico di lavoro ad alta intensità di lettura, è possibile sfruttare appieno grandi quantità di RAM [supponendo che il set di dati si adatti ai mem - il server sarà estremamente rapido].

Sto usando MySQL con archiviazione InnoDB su server da 8-16 GB con set di lavoro funzionante in memoria.


Lo stesso qui - eseguiamo InnoDB su scatole da 64 GB ed è fantastico.
James,

9

Forse varrebbe la pena dedicare un po 'di tempo e sforzi alla ricerca di ciò che sta causando lo scambio del sistema prima di spendere soldi in memoria?

32 GB di memoria lascia molta memoria disponibile anche dopo aver caricato l'intera tabella, l'indice e la tabella di temperatura massima in memoria. Una rapida ricerca ha portato alla luce questi due documenti che potrebbero essere rilevanti:


0

Se ritieni che sia dovuto alla creazione di una tabella temporanea molto grande, potresti prendere in considerazione i modi in cui puoi migliorare la query per evitare tabelle temporanee.

È possibile pubblicare su StackOverflow un post contenente lo schema, la query, il piano esplicativo e alcuni dettagli del problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.