我如何清除oracle执行计划缓存以进行基准测试?

时间:2009-05-13 16:03:38

标签: sql oracle10g

在oracle 10gr2上,我有几个sql查询,我正在比较性能,但是在第一次运行之后,v $ sql表存储了用于缓存的执行计划,因此对于其中一个查询我在第一次运行时从28秒开始到.5秒后。

我试过

ALTER SYSTEM FLUSH BUFFER_CACHE; - 运行此命令后,查询始终以5秒运行,我认为这不准确。

认为可能会从缓存中删除订单项本身: 从v $ sql中删除sql_text就像'select * from .... 但是得到一个关于无法从视图中删除的错误。

3 个答案:

答案 0 :(得分:51)

答案 1 :(得分:17)

自从我使用Oracle以来已经有一段时间了,但我相信执行计划会缓存在共享池中。试试这个:

alter system flush shared_pool;

缓冲区缓存是Oracle存储最近使用的数据的地方,以便最大限度地减少磁盘空间。

答案 2 :(得分:0)

我们最近在性能调优查询方面做了大量工作,而且查询性能不一致的罪魁祸首是Oracle所处的文件系统缓存。

当您刷新Oracle缓存时,文件系统仍然可能存在查询要求的数据,这意味着查询仍将快速返回。

不幸的是我不知道如何清除文件系统缓存 - 我只是从我们非常有用的系统管理员中使用一个非常有用的脚本。