CentOS VM usando apenas um terço da memória disponível

2

Eu tenho uma fatia de VM rodando o CentOS, no Parallels.

Aqui está a saída de free -m

[root@server ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           960        272        687          0          0          0
-/+ buffers/cache:        272        687
Swap:            0          0          0

Este é um servidor LAMP e o próprio banco de dados é superior a 1000 MB.

Os "buffers" e "cache" não devem mostrar valores mais altos, armazenando em cache os arquivos do banco de dados? Parece que apenas 1/3 da memória está sendo usada.

    
por soupagain 11.09.2012 / 12:28

1 resposta

1

Os buffers e caches exibidos são do ponto de vista do SO.

Para ver o que o MySQL está armazenando em cache, você deve executar as seguintes consultas

MYSQL_CONN="-uroot -prootpassword"
BPSIZE='mysql ${MYSQL_CONN} -ANe"SHOW GLOBAL VARIABLES LIKE 'innodb_buffer_pool_size'" | awk '{print $2}''
BPDATA='mysql ${MYSQL_CONN} -ANe"SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_data'" | awk '{print $2}''
BPPAGE='mysql ${MYSQL_CONN} -ANe"SHOW GLOBAL STATUS LIKE 'Innodb_page_size'" | awk '{print $2}''
BPDATABYTES='echo ${BPDATA}*${BPPAGE}|bc'
BPPCTUSED='echo ${BPDATABYTES}00/${BPSIZE}|bc'
KBSIZE='mysql ${MYSQL_CONN} -ANe"SHOW GLOBAL VARIABLES LIKE 'key_buffer_size'" | awk '{print $2}''
KBUSED='mysql ${MYSQL_CONN} -ANe"SHOW GLOBAL STATUS LIKE 'Key_blocks_used'" | awk '{print $2}''
KCSIZE='mysql ${MYSQL_CONN} -ANe"SHOW GLOBAL STATUS LIKE 'key_cache_block_size'" | awk '{print $2}''
KBDATABYTES='echo ${KBUSED}*${KCSIZE}|bc'
KBPCTUSED='echo ${KBDATABYTES}00/${KBSIZE}|bc'
echo "InnoDB Buffer Pool Size : ${BPSIZE}, (${BPPCTUSED}) Percent Full"
echo "MyISAM Key Buffer Size : ${KBSIZE}, (${KBPCTUSED}) Percent Full"

Se você quiser ver quantos dados você realmente executou:

SELECT IFNULL(B.engine,'Total') "Storage Engine",
CONCAT(LPAD(REPLACE(FORMAT(B.DSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Data Size",
CONCAT(LPAD(REPLACE(FORMAT(B.ISize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Index Size",
CONCAT(LPAD(REPLACE(FORMAT(B.TSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Table Size"
FROM (SELECT engine,SUM(data_length) DSize,SUM(index_length) ISize,
SUM(data_length+index_length) TSize FROM information_schema.tables
WHERE table_schema NOT IN ('mysql','information_schema','performance_schema')
AND engine IS NOT NULL GROUP BY engine WITH ROLLUP) B,(SELECT 3 pw) A
ORDER BY TSize;

Isso mostrará quantos dados do InnoDB e do MyISAM você tem na Instância do MySQL.

Por favor, tenha em mente

  • a soma dos Índices MyISAM é o máximo key_buffer_size que você pode alocar para sua instância
  • a soma de InnoDB Data e Index Pages é o máximo innodb_buffer_pool_size para sua instância

Para mais informações sobre como dimensionar o key_buffer_size e o innodb_buffer_pool_size, consulte minha postagem no DBA StackExchange .

    
por 11.09.2012 / 21:21