Depois de ler esta página na documentação do mysql , tentei entender nosso uso atual do InnoDB. Atualmente, alocamos 6 GB de RAM para o pool de buffers. O tamanho do nosso banco de dados é aproximadamente o mesmo. Aqui está a saída de show engine innodb status\G
(estamos executando a 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]
Eu queria saber o quão bem estamos utilizando o cache de buffer. Depois de olhar inicialmente para a saída, parecia que estávamos realmente usando, com base no Pages made young
e not young
tem números neles e Buffer pool hit rate is 1000 / 10000
(o que eu vi em outros lugares na web que isso significa que está sendo muito usado. Verdade?)
O que está me jogando em um loop é por que young-making rate
and not
estão em 0/1000 e os acessos young/s
and non-young/s
estão em 0. Isso tudo indica que não está sendo usado, certo?
Alguém pode ajudar a entender isso?
The Buffer pool size 393215
Isso está em páginas e não em bytes.Para ver o tamanho do Buffer Pool em GB, execute isto:
Database pages 360515
Este é o número de páginas com dados dentro do Buffer PoolPara ver a quantidade de dados no tamanho do Buffer Pool em GB, execute isto:
Para ver a porcentagem do Buffer Pool em uso, execute isto:
Modified db pages 300
Este é o número de páginas no Buffer Pool que precisam ser gravadas de volta no banco de dados. Eles também são chamados de páginas sujas.Para ver o espaço ocupado por páginas sujas, execute isto:
Para ver a porcentagem de páginas sujas, execute isto:
Quanto às outras coisas na tela, execute isto:
Você verá todas as variáveis de status do Buffer Pool. Você pode aplicar as mesmas consultas em tudo o que precisa examinar.
ATUALIZAÇÃO 2021-10-01 11:41
Aqui está um script que funcionará no MySQL 5.6, 5.7 e 8.0
Aqui está um exemplo de saída
Este é o único valor realmente significativo na situação em que você está... e essa situação é que você tem a sorte de ter um buffer pool com uma taxa de acerto perfeita de 100%. Não analise demais o resto, porque não há nada que você precise alterar, a menos que o sistema operacional do servidor esteja com pouca memória, causando troca.
Os valores jovens/não jovens não são interessantes em um caso em que há pressão zero no buffer pool. O InnoDB está usando, não faz nada sem ele. Se o pool for muito pequeno, as páginas são despejadas e novas páginas são lidas e as outras estatísticas ajudam você a entender isso... mas esse é um problema que você não parece ter.
O espaço livre "não utilizado" no pool nunca será negligenciado ou deixado ocioso pelo InnoDB se for necessário por qualquer motivo, portanto, o fato de ser gratuito significa apenas que você tem algum espaço para expandir conforme o tamanho do seu trabalho conjunto de dados cresce.
Isso é tudo o que significa, a menos, é claro, que você reiniciou recentemente o servidor, nesse caso, ele está incompleto. O servidor precisa ser executado por um período completo de uso "normal" (incluindo backups completos) antes que as estatísticas contem toda a história ... seja uma hora, um dia, uma semana, um mês ou um ano, depende da sua aplicação.
Eu discordo da avaliação de que "você tem a sorte de ter um buffer pool com uma taxa de acerto perfeita de 100%"
No topo da saída (que é cortada), há uma linha algo como:
Isso me diz que nenhuma leitura aconteceu nos últimos 16 segundos, assim (artificialmente) dando a você uma pontuação perfeita de '1000/1000'.
Enquanto isso, houve algumas gravações. Essas foram possivelmente gravações adiadas para liberar páginas 'sujas' ou limpar índices do 'buffer de alteração'.
Provavelmente também não houve atividade na área jovem/quente nos últimos 16 segundos.
O buffer pool é dividido em duas partes, uma lista jovem e uma lista não jovem. A taxa de criação mostra quantas páginas nos conjuntos de buffers estão sendo embaralhadas entre as duas listas.
Páginas não-jovens são páginas não-jovens sendo feitas (ou seja, sendo lidas do cache. Páginas não-jovens são páginas movidas da lista de jovens porque são muito antigas ou porque a lista de jovens está cheia.
A taxa em que as páginas são movidas entre os dois depende de quanto do pool de buffers está sendo usado no momento versus o tamanho do pool jovem. Definir em zero significa que seu conjunto ativo (as páginas que você está usando) é menor que o conjunto jovem.