Por que o MySQL repentinamente mudou seu uso de memória 'real' para trocar e liberar a diferença? img anexado

2

Por nenhuma boa razão (sem grandes consultas, sem carga de CPU grande, nada mudou) O Mysql 5.1 no Ubuntu 10.04 de repente liberou cerca de 20% da sua memória em pool e moveu-o para a troca. Agora meu uso de memória de swap está em uma constante ~ 30% .. (a menos que se reduza e se reajuste)

mas por que isso acontece? De acordo com o top, o mysql VIRT e RES ficaram o mesmo @ 12.5g 11g. Então, por que a memória se move assim?

isso é em um sistema de 16GB com 12GB reservados como o Innodb_buffer_pool.

O serviço mysql não foi reiniciado em aproximadamente 3 meses.

    
por John Ingles 25.01.2012 / 03:05

2 respostas

3

O MySQL não é responsável por gerenciar a troca no servidor; Esse é o trabalho do subsistema de gerenciamento de memória do kernel. O ajuste do kernel que rege esse comportamento específico é chamado de "swappiness" e você pode ler mais sobre isso aqui:

link

Basicamente, se um aplicativo solicitar alguma quantidade de memória e a memória do servidor estiver cheia, isso fará com que o aplicativo espere até que o conteúdo da memória ociosa seja paginado, o que causa latência no aplicativo. Como não queremos essa latência, o kernel tenta manter sempre certa quantidade de memória livre. Ao fazer isso de forma preventiva e em segundo plano quando o servidor fica próximo de ficar sem memória, ele garante que todas as novas solicitações de memória no servidor sejam atendidas imediatamente, acelerando as coisas sem afetar visivelmente os aplicativos em execução. Essa é a teoria, de qualquer maneira.

Às vezes você não quer isso, especialmente se toda a memória física do servidor deve ser usada como cache por algum aplicativo (por exemplo, MySQL). Nesses casos, você desejará diminuir o sysctl vm.swappiness para 0.

    
por 25.01.2012 / 03:26
1

O sistema move o material para fora da RAM se não for acessado em muito, muito tempo. Isso torna mais memória física disponível para armazenar coisas que podem afetar o desempenho.

O motivo pelo qual tantas informações foram movidas de uma só vez é provável que o comportamento de troca nunca tenha sido acionado antes (ou não por um tempo muito longo), de modo que muitas informações acumuladas eram tão antigas quanto o sistema era capaz de rastrear. Ejetando qualquer coisa acionada ejetando tudo isso. (O controle de idade da página do sistema é muito grosseiro, pois a granularidade de rastreamento vem com um grande aumento no custo de falhas de página inconsistentes.)

Provavelmente quase tudo isso são dados que nunca serão usados. Ele será definido no disco até que o sistema seja reinicializado. Assim, a memória livre extra que o sistema tem agora para armazenar os dados que serão usados é efetivamente livre.

    
por 25.01.2012 / 03:56

Tags