清除 ubuntu 中的缓存

清除 ubuntu 中的缓存

我需要清除系统缓存,以便记录冷缓存中 postgres 查询所花费的时间。为了清除系统缓存,我在 Ubuntu 服务器 12.04 上以 root 身份执行以下命令:

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

我正在运行以下 SQL 命令并清除缓存:

1. select col1 from my_table;  //Time Taken= 3000 ms
2. sync; echo 1 > /proc/sys/vm/drop_caches
   sync; echo 2 > /proc/sys/vm/drop_caches
   sync; echo 3 > /proc/sys/vm/drop_caches
3. Now again running the same select command and clearing caches:
   select col1 from my_table;  //Time Taken= 200 ms
4. sync; echo 1 > /proc/sys/vm/drop_caches
   sync; echo 2 > /proc/sys/vm/drop_caches
   sync; echo 3 > /proc/sys/vm/drop_caches
5. Now again running the same select command and clearing caches:
   select col1 from my_table;  //Time Taken= 10 ms

从查询执行时间的减少中我可以理解的是,即使清除了缓存,实际上缓存也没有被清除。我的解释正确吗?还有其他方法可以在 Ubuntu 12.04 服务器中清除缓存吗?

答案1

我认为你的假设是错误的。通过该drop_caches界面,你可以清除内核管理的缓存,但这不会将所有用户空间进程重置回之前的状态。

SQL 服务器可能在自己的内存中缓存了一些中间结果,甚至可能是查询的最终结果。或者,它可能根据前两次运行期间收集的统计数据动态调整了查询​​的执行计划。

您可以通过重新启动守护程序来部分补偿,但对于像 SQL 服务器这样的复杂系统,除了“全新安装”之外,很难准确重现任何以前的状态。除非您对整个机器进行快照。

相关内容