SAS PROC SQL:如何在测试之间清除缓存

SAS PROC SQL:如何在测试之间清除缓存,sas,proc-sql,Sas,Proc Sql,我正在读这篇文章。我想知道如何清除SAS中的缓存/缓冲区,以便我的重复查询/测试能够准确反映更改 我注意到第一次运行相同的查询需要10秒,之后立即运行(没有)更改将需要更短的时间(比如1-2秒)。是否有清除缓存/缓冲区的命令/指令。这样我就可以为我的新变化做一个干净的测试 我正在使用SAS Enterprise Guide(SAS企业指南),将数据托管在Oracle服务器上。谢谢 我不是Oracle专家,但我怀疑是否有任何方法可以“清除”Oracle缓存(如果有,您可能需要成为DBA才能这样做)

我正在读这篇文章。我想知道如何清除SAS中的缓存/缓冲区,以便我的重复查询/测试能够准确反映更改

我注意到第一次运行相同的查询需要10秒,之后立即运行(没有)更改将需要更短的时间(比如1-2秒)。是否有清除缓存/缓冲区的命令/指令。这样我就可以为我的新变化做一个干净的测试


我正在使用SAS Enterprise Guide(SAS企业指南),将数据托管在Oracle服务器上。谢谢

我不是Oracle专家,但我怀疑是否有任何方法可以“清除”Oracle缓存(如果有,您可能需要成为DBA才能这样做)

通常,我要做的是稍微更改查询的参数,以便精确的查询不再匹配缓存中的任何内容。例如,您可以更改要查询的日期范围


它不会给你一个精确的性能比较(因为你得到的结果不同),但如果一个查询的性能明显优于另一个查询,它会给你一个很好的主意。

为了在Oracle端刷新缓存,你需要两个DBA特权(在Oracle中运行
alter system flush buffer\u cache;
)和操作系统级访问(在Linux下的常见文件系统上刷新操作系统的缓冲区缓存-
echo3>/proc/sys/vm/drop\u缓存)

如果您运行的是生产数据库,那么您可能没有这些权限——无论如何,您都不希望在生产数据库上运行这些命令,因为这会降低数据库所有用户的性能,并且其他查询会影响运行您的数据库所需的时间

与其尝试准确测量运行查询所需的时间,我建议您注意查询的执行方式:

  • 它的哪个部分被“下推”到数据库,SAS和Oracle之间有多少数据流
  • Oracle对查询的
    解释计划是什么?它是否有明显的低效率
当查询以明显次优的方式执行时,您会发现(通常情况下)固定版本在冷缓存和热缓存中都会运行得更快

要将此应用于您提到的案例(10秒vs 2秒)-在考虑如何准确测量此值之前,请先查看

  • 如果您的查询被正确地下推到Oracle(很可能是这样)
  • 以及是否需要对足够大的表进行完整表(分区)扫描(取决于数据库中IO的速度,大约为1-10GB)
如果您发现查询需要读取1GB的数据,并且您的典型(数据库中)读取速度为100MB/s,那么使用冷缓存的10秒是运行它的预期时间