我想模拟一个没有太多缓存的客户端站点,因为它们始终有大量 I/O。我想在我的机器上(准确地说是在我的虚拟机上)运行 SQL 查询,并具有与它们相同的限制,所以我想我应该在每次运行它之前刷新缓存。
我需要从 postgres SQL 刷新缓存(显然,我可以通过重新启动它来完成)。我还需要刷新虚拟机(运行代码的地方)和运行虚拟机的主机上的操作系统缓存,以确保它不会优化整个虚拟机。我的目标是能够以完全非优化的方式运行查询(没有任何类型的缓存,没有操作系统,没有 postgres,什么都没有)。
所以我一直在我的虚拟机和主机上运行这些命令(我在论坛中找到):
sync;
echo 1 > /proc/sys/vm/drop_caches;
echo 2 > /proc/sys/vm/drop_caches;
echo 3 > /proc/sys/vm/drop_caches;
您认为这些合适吗?你认为这就足够了吗?或者我应该完全使用另一种方法?
我正在运行红帽 6.2。
答案1
首先echo 3 > /proc/sys/vm/drop_caches
就足够了,因为它结合了echo 1
和echo 2
命令。否则,是的,他们适合清除缓存 -http://linux-mm.org/Drop_Caches
这些命令只是删除现有的缓存,例如,您创建一个冷启动环境,但在运行第一个查询后,将使用缓存。它还可能有助于取消优化 postgres 配置并减少shared_buffers
.
如果您用于kvm
VM,请确保使用块设备作为磁盘并使用不带缓存的 virtio -http://www.linux-kvm.org/page/Tuning_KVM