Rilevamento delle statistiche del pool di buffer INNODB


20

Dopo aver letto questa pagina nella documentazione di mysql , ho cercato di dare un senso al nostro attuale utilizzo di InnoDB. Attualmente, allochiamo 6 GB di RAM per il pool di buffer. Le dimensioni del nostro database sono circa le stesse. Ecco l'output di show engine innodb status\G(stiamo eseguendo v5.5)

----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 6593445888; in additional pool allocated 0
Dictionary memory allocated 1758417
Buffer pool size   393215
Free buffers       853
Database pages     360515
Old database pages 133060
Modified db pages  300
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 7365790, not young 23099457
0.00 youngs/s, 0.00 non-youngs/s
Pages read 1094342, created 185628, written 543182148
0.00 reads/s, 0.00 creates/s, 37.32 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 360515, unzip_LRU len: 0
I/O sum[2571]:cur[0], unzip sum[0]:cur[0]

Volevo sapere quanto stiamo usando bene la cache del buffer. Dopo aver dato uno sguardo inizialmente all'output, è sembrato che lo stiamo effettivamente usando, basandoci su Pages made younge not youngcontando dei numeri e Buffer pool hit rate is 1000 / 10000(che ho visto altrove sul web che questo significa che viene usato abbastanza pesantemente. Vero?)

Quello che mi ha lanciando attraverso un ciclo è il motivo per il young-making ratee notsono entrambi a 0/1000 e l' young/se non-young/saccessi sono entrambi a 0. Questi indicano tutte che non è in uso a tutti, giusto?

Qualcuno può aiutare a dare un senso a questo?

Risposte:


18
 Buffer pool hit rate is 1000 / 1000

Questo è l' unico valore davvero significativo nella situazione in cui ti trovi ... e quella situazione è che sei abbastanza fortunato da avere un pool di buffer con una percentuale di hit del 100% perfetta. Non analizzare troppo il resto, perché non è necessario modificare nulla, a meno che il sistema operativo del server non abbia poca memoria, causando lo scambio.

I valori giovani / non giovani non sono interessanti in un caso in cui non vi è alcuna pressione sul pool di buffer. InnoDB lo sta usando, non fa nulla senza di esso. Se il pool è troppo piccolo, le pagine vengono sfrattate e le nuove pagine vengono lette e le altre statistiche ti aiutano a capire che ... ma questo è un problema che sembra non avere.

Lo spazio libero "inutilizzato" nella piscina non verrà mai trascurato o lasciato inattivo da InnoDB se è necessario per qualsiasi motivo, quindi il fatto che sia gratuito significa solo che hai un po 'di spazio per espanderti in quanto dimensione del tuo lavoro il set di dati cresce.

Questo è tutto ciò che significa, a meno che, naturalmente, non hai riavviato di recente il server, nel qual caso, è incompleto .. Il server deve eseguire un periodo completo di utilizzo "normale" (inclusi i backup completi) prima che le statistiche raccontino l'intera storia ... che si tratti di un'ora, un giorno, una settimana, un mese o un anno, dipende dalla tua applicazione.


28

The Buffer pool size 393215 Questo è in pagine non byte.

Per visualizzare la dimensione del pool di buffer in GB, eseguire questo:

SELECT FORMAT(BufferPoolPages*PageSize/POWER(1024,3),2) BufferPoolDataGB FROM
(SELECT variable_value BufferPoolPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_total') A,
(SELECT variable_value PageSize FROM information_schema.global_status
WHERE variable_name = 'Innodb_page_size') B;

Database pages 360515 Questo è il numero di pagine con dati all'interno del pool di buffer

Per vedere la quantità di dati nella dimensione del pool di buffer in GB, eseguire questo:

SELECT FORMAT(BufferPoolPages*PageSize/POWER(1024,3),2) BufferPoolDataGB FROM
(SELECT variable_value BufferPoolPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_data') A,
(SELECT variable_value PageSize FROM information_schema.global_status
WHERE variable_name = 'Innodb_page_size') B;

Per vedere la percentuale del pool di buffer in uso, eseguire questo:

SELECT CONCAT(FORMAT(DataPages*100.0/TotalPages,2),' %') BufferPoolDataPercentage FROM
(SELECT variable_value DataPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_data') A,
(SELECT variable_value TotalPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_total') B;

Modified db pages 300Questo è il numero di pagine nel pool di buffer che devono essere riscritte nel database. Sono anche chiamate pagine sporche.

Per vedere lo spazio occupato dalle pagine sporche, esegui questo:

SELECT FORMAT(DirtyPages*PageSize/POWER(1024,3),2) BufferPoolDirtyGB FROM
(SELECT variable_value DirtyPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_dirty') A,
(SELECT variable_value PageSize FROM information_schema.global_status
WHERE variable_name = 'Innodb_page_size') B;

Per visualizzare la percentuale di pagine sporche, eseguire questo:

SELECT CONCAT(FORMAT(DirtyPages*100.0/TotalPages,2),' %') BufferPoolDirtyPercentage FROM
(SELECT variable_value DirtyPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_dirty') A,
(SELECT variable_value TotalPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_total') B;

Per quanto riguarda le altre cose sul display, esegui questo:

SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool%';

Vedrai tutte le variabili di stato per il pool di buffer. Puoi applicare le stesse domande a qualunque cosa tu debba esaminare.


Grazie! Quindi, da questo, ho capito che la nostra cache buffer viene effettivamente utilizzata, ma ciò che voglio sapere è se la stiamo usando EFFETTIVAMENTE. Se capisco il concetto di pagine giovani e vecchie, la mia ipotesi sarebbe che un buon indicatore del fatto che la cache buffer sia utilizzata al massimo sarebbe il numero di pagine rese giovani e gli accessi a pagine giovani, giusto? Usiamo mysqldump per eseguire i backup ogni 3 ore, il che spiegherebbe perché è pieno. Ma con young-making rate 0 / 1000e 0.00 youngs/s, ciò ci dice che non lo stiamo davvero utilizzando. Sto leggendo questo giusto?
Safado,

2
Il tasso di creazione giovane di 0/1000 indica che le pagine di dati per le query in esecuzione non si adattano tutte alla cache, ma si adattano alla dimensione più piccola (3/8) della cache giovane. In altre parole, le query non utilizzano dati sufficienti per invecchiare alcune pagine nella cache non giovane di grandi dimensioni.
Thomas Jones-Low,

Una breve spiegazione sulle rimanenti variabili di stato innodb_buffer_pool sarà molto utile. Puoi per favore aggiungerlo alla tua risposta
vidyadhar

5

Non sono d'accordo con la valutazione secondo cui "sei abbastanza fortunato da avere un pool di buffer con una percentuale di hit del 100% perfetta"

Nella parte superiore dell'output (che è troncato), c'è una linea simile a:

Per second averages calculated from the last 16 seconds

Questo mi dice che non sono avvenute letture negli ultimi 16 secondi, quindi (artificialmente) ottenendo un punteggio perfetto "1000/1000".

0.00 reads/s, 0.00 creates/s, 37.32 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000

Nel frattempo c'erano alcune scritture. Probabilmente si trattava di scritture differite per scaricare pagine "sporche" o ripulire gli indici dal "buffer di modifica".

Probabilmente non c'è stata alcuna attività nella zona giovane / calda negli ultimi 16 secondi.


Bene, in media tra 6k-10k SELECT al secondo e allo stesso tempo riesco a vedere quasi 0 attività di lettura del disco sul server, quindi non penso che sia così
Safado

La "cache delle query" soddisfa la maggior parte delle query? SHOW VARIABLES LIKE 'query%';e SHOW GLOBAL STATUS LIKE 'Qc%';e SHOW GLOBAL VARIABLES LIKE 'Com_SELECT';.
Rick James,

0

Il pool di buffer è diviso in due parti, un elenco giovane e un elenco non giovane. La velocità di creazione mostra quante pagine nei pool di buffer vengono mescolate tra i due elenchi.

Le pagine rese giovani non sono pagine giovani che vengono create (ovvero vengono lette dalla cache. Le pagine rese non giovani sono pagine spostate dall'elenco giovani perché sono troppo vecchie o perché l'elenco giovane è pieno.

La velocità alle pagine viene spostata tra i due dipende dalla quantità del pool buffer attualmente utilizzata rispetto alla dimensione del pool giovane. Impostato su zero significa che il tuo set attivo (le pagine che stai utilizzando) è più piccolo del pool giovane.

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.