Executando uma consulta sem o cache do sistema operacional

2

Eu quero emular um site de cliente que não tenha muito cache porque eles têm muito I / O o tempo todo. Eu quero executar uma consulta SQL na minha máquina (na minha VM, para ser preciso) com as mesmas limitações que eles têm, então eu pensei que iria liberar o cache antes de executá-lo toda vez.

Eu preciso liberar o cache do postgres SQL (o que eu posso fazer reiniciando-o, aparentemente). Eu também preciso liberar o cache do sistema operacional na minha máquina virtual (onde o código está sendo executado) e na máquina host que está executando a máquina virtual para garantir que ela não otimize toda a máquina virtual. Meu objetivo é conseguir executar a consulta de forma totalmente não otimizada (sem qualquer tipo de cache, nem o SO, nem o postgres, nada).

Então, eu tenho executado esses comandos (que encontrei em fóruns), na minha VM e no meu host:

sync;
echo 1 > /proc/sys/vm/drop_caches;
echo 2 > /proc/sys/vm/drop_caches;
echo 3 > /proc/sys/vm/drop_caches;

Você acha que isso é apropriado? E você acha que é o suficiente? Ou devo usar outra abordagem inteiramente?

Estou executando o Red Hat 6.2.

    
por Philippe Carriere 06.06.2012 / 21:37

1 resposta

0

Em primeiro lugar, echo 3 > /proc/sys/vm/drop_caches é suficiente, pois combina os comandos echo 1 e echo 2 . Caso contrário, sim, eles são apropriados para limpar o cache - link

Estes comandos apenas eliminam os caches existentes, por ex. você cria um ambiente de inicialização a frio, mas depois de executar suas primeiras consultas, o cache será usado. Também pode ajudar a desotimizar a configuração do postgres e diminuir coisas como shared_buffers .

Se você estiver usando kvm para sua VM, certifique-se de usar um dispositivo de bloco como o disco e de usar o virtio sem fazer cache - link

    
por 07.06.2012 / 05:14