Mysql
 sql >> Database >  >> RDS >> Mysql

Calcolo della dimensione del pool di buffer InnoDB per il tuo server MySQL

Cos'è un pool di buffer InnoDB?

Il pool di buffer InnoDB è lo spazio di memoria che contiene molte strutture di dati in memoria di InnoDB, buffer, cache, indici e persino dati di riga. innodb_buffer_pool_size è il parametro di configurazione di MySQL che specifica la quantità di memoria allocata al pool di buffer InnoDB da MySQL. Questa è una delle impostazioni più importanti nella configurazione dell'hosting MySQL e dovrebbe essere configurata in base alla RAM di sistema disponibile.

In questo post, ti guideremo attraverso due approcci per impostare il valore della dimensione del tuo pool di buffer InnoDB, esamineremo i pro e i contro di tali pratiche e proporremo anche un metodo unico per arrivare a un valore ottimale in base alle dimensioni della RAM del tuo sistema.

Approccio 1. Metodo della regola pratica

La pratica più comunemente seguita è impostare questo valore tra il 70% e l'80% della RAM di sistema. Sebbene funzioni bene nella maggior parte dei casi, questo metodo potrebbe non essere ottimale in tutte le configurazioni. Prendiamo l'esempio di un sistema con 192 GB di RAM. Sulla base del metodo sopra, arriviamo a circa 150 GB per la dimensione del pool di buffer. Tuttavia, questo non è davvero un numero ottimale in quanto non sfrutta completamente la grande dimensione della RAM disponibile nel sistema e lascia circa 40 GB di memoria. Questa differenza può essere ancora più significativa quando passiamo a sistemi con configurazioni più grandi in cui dovremmo utilizzare la RAM disponibile in misura maggiore.

Approccio 2. Un approccio più sfumato

Questo approccio si basa su una comprensione più dettagliata degli interni del pool di buffer InnoDB e delle sue interazioni, che è descritta molto bene nel libro High Performance MySQL.

Esaminiamo il seguente metodo per calcolare la dimensione del pool di buffer InnoDB.

  1. Inizia con la RAM totale disponibile.
  2. Sottrai l'importo adeguato alle esigenze del sistema operativo.
  3. Sottrai la quantità adeguata per tutte le esigenze di MySQL (come vari buffer MySQL, tabelle temporanee, pool di connessioni e buffer correlati alla replica).
  4. Dividi il risultato per 105%, che è un'approssimazione dell'overhead richiesto per gestire il buffer pool stesso.

Ad esempio, diamo un'occhiata a un sistema con 192 GB di RAM che utilizza solo InnoDB e che ha una dimensione totale del file di registro di circa 4 GB. Possiamo usare una regola come "massimo 2 GB o 5% della RAM totale" per l'allocazione delle esigenze del sistema operativo come raccomandato nel libro sopra, che arriva a circa 9,6 GB. Quindi, allocheremo anche circa 4 GB per altre esigenze di MySQL, principalmente tenendo conto delle dimensioni del file di registro. Questo metodo si traduce in circa 170 GB per la dimensione del nostro pool di buffer InnoDB, che corrisponde a circa l'88,5% di utilizzo della dimensione della RAM disponibile.

Sebbene abbiamo utilizzato la regola "massimo 2 GB o 5% della RAM totale" per calcolare la nostra allocazione di memoria per le esigenze del sistema operativo sopra, la stessa regola non funziona molto bene in tutti i casi , specifico per sistemi con RAM di medie dimensioni comprese tra 2 GB e 32 GB. Ad esempio, in un sistema con 3 GB di RAM, l'allocazione di 2 GB per le esigenze del sistema operativo non lascia molto per il pool di buffer InnoDB, mentre l'allocazione del 5% della RAM è semplicemente troppo piccola per le esigenze del nostro sistema operativo.

Quindi, perfezioniamo la regola di allocazione del sistema operativo sopra ed esaminiamo il metodo di calcolo InnoDB su varie configurazioni RAM:

Per sistemi con RAM di piccole dimensioni (<=1 GB)

Per i sistemi con meno di 1 GB di RAM, è meglio utilizzare il valore di configurazione predefinito di MySQL di 128 MB per le dimensioni del pool di buffer InnoDB.

Per sistemi con RAM di medie dimensioni (1GB – 32GB)

Considerando il caso di sistemi con una dimensione della RAM compresa tra 1 GB e 32 GB, possiamo calcolare le esigenze del sistema operativo utilizzando questa euristica approssimativa:

256 MB + 256 * log2 (dimensione RAM in GB)

La razionalizzazione qui è che, per configurazioni con poca RAM, iniziamo con un valore di base di 256 MB per le esigenze del sistema operativo e aumentiamo questa allocazione in scala logaritmica come la quantità di RAM aumenta. In questo modo, possiamo trovare una formula deterministica per allocare la RAM per le nostre esigenze del sistema operativo. Allocheremo la stessa quantità di memoria anche per le nostre altre esigenze MySQL. Ad esempio, in un sistema con 3 GB di RAM, faremmo un'allocazione equa di 660 MB per le esigenze del sistema operativo e altri 660 MB per le altre esigenze di MySQL, risultando in un valore di circa 1,6 GB per le dimensioni del nostro pool di buffer InnoDB.

Per sistemi con RAM di dimensioni superiori (> 32 GB)

Per i sistemi con dimensioni della RAM superiori a 32 GB, torneremo a calcolare le esigenze del sistema operativo come il 5% della dimensione della RAM del nostro sistema e la stessa quantità per MySQL ha altre esigenze. Quindi, per un sistema con una dimensione della RAM di 192 GB, il nostro metodo atterrerà a circa 165 GB per la dimensione del pool di buffer InnoDB, che è ancora una volta un valore ottimale da utilizzare.

Calcolatore delle dimensioni del pool di buffer InnoDB

Calcola il valore ottimale per RAM di qualsiasi dimensione:





Calcolatore della dimensione del pool di buffer InnoDB - Calcola il numero ottimale per qualsiasi dimensione della RAM del sistemaFai clic per twittare

Traccia delle dimensioni del pool di buffer InnoDB per varie dimensioni di RAM

Avvertenza per i calcoli delle dimensioni del pool di buffer InnoDB

Le considerazioni in questo post del blog riguardano i sistemi Linux dedicati a MySQL. Per i sistemi Windows oi sistemi che eseguono più applicazioni insieme a MySQL, queste osservazioni possono essere imprecise. È anche importante notare che, sebbene possiamo usare questi strumenti come riferimenti, ci vuole davvero una buona esperienza, sperimentazione, monitoraggio continuo e messa a punto per ottenere il giusto dimensionamento per il tuo innodb_buffer_pool_size.