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

时间:2017-11-06 17:01:35

标签: sas proc-sql

我正在读这篇论文:"Need for Speed - Boost Performance in Data Processing with SAS/Access® Interface to Oracle"。我想知道如何清除SAS中的缓存/缓冲区,所以我的重复查询/测试将准确地反映这些变化?

我注意到第一次运行的同一个查询需要10秒,并且(没有)更改后立即运行它将花费更短的时间(比如说1-2秒)。是否有命令/指令来清除缓存/缓冲区。所以我可以对我的新变化进行干净的测试。

我正在使用SAS Enterprise Guide以及托管在Oracle服务器上的数据。谢谢!

2 个答案:

答案 0 :(得分:2)

为了在Oracle端刷新缓存,您需要DBA权限(在Oracle中运行alter system flush buffer_cache;)和操作系统级访问(以刷新操作系统的缓冲区缓存 - echo 3 > /proc/sys/vm/drop_caches Linux下的文件系统。)

如果您针对生产数据库运行,则可能没有这些权限 - 您不希望在生产数据库上运行这些命令,因为这会降低数据库的所有用户的性能,以及其他查询会影响运行您的查询所需的时间。

我建议您不要试图准确衡量运行查询所需的时间,而应该关注 执行查询的方式:

  • 它被“推下”到数据库的哪一部分以及SAS和Oracle之间的数据流量
  • 查询的Oracle explain plan是什么?它有明显的低效率

当查询以非常不理想的方式执行时,您会发现(通常情况下)固定版本在冷和热缓存中运行速度更快。

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

  • 如果您的查询被正确推送到Oracle(可能会这样做),
  • 以及是否需要对足够大的表进行全表(分区)扫描(取决于数据库中IO的速度 - 大约1-10 GB)。

如果您发现查询需要读取1 GB的数据并且您的典型(数据库内)读取速度为100 MB / s,则使用冷缓存的10秒是预期运行它的时间。

答案 1 :(得分:1)

我不是Oracle专家,但我怀疑你有什么方法可以'清除'oracle缓存(如果你有可能需要成为DBA的话)。

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

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

相关问题