SAS PROC SQL:如何在测试之间清除缓存
SAS PROC SQL: How to clear cache between testing
我正在阅读这篇论文:"Need for Speed - Boost Performance in Data Processing with SAS/Access® Interface to Oracle"。我想知道如何清除 SAS 中的缓存/缓冲区,以便我的重复查询/测试能够准确反映更改?
我注意到相同的查询 运行 第一次需要 10 秒,并且(不)更改 运行 之后将花费更短的时间(比如 1-2 秒)。是否有清除缓存/缓冲区的命令/指令。这样我就可以对我的新更改进行干净的测试。
我正在使用 SAS Enterprise Guide 处理托管在 Oracle 服务器上的数据。谢谢!
我不是 Oracle 专家,但我怀疑您有什么方法可以 'clear' oracle 缓存(如果有的话,您可能需要成为 DBA 才能这样做)。
通常我所做的是稍微更改查询的参数,以便确切的查询不再匹配缓存中的任何内容。例如,您可以更改要查询的日期范围。
它不会为您提供准确的性能比较(因为您得到了不同的结果),但如果一个查询的性能明显优于另一个,它会给您一个很好的主意。
为了刷新 Oracle 端的缓存,您需要 DBA 权限(在 Oracle 中达到 运行 alter system flush buffer_cache;
)和 OS 级访问权限(刷新 OS' 缓冲区缓存 - echo 3 > /proc/sys/vm/drop_caches
在 Linux 下的通用文件系统上。
如果您运行针对生产数据库,您可能没有这些权限——无论如何您都不想运行在生产数据库上执行这些命令,因为它会降低数据库所有用户的性能,并且其他查询会影响 运行 你的查询所花费的时间。
与其尝试准确测量 运行 您的查询所花费的时间,我建议您关注 如何 执行查询:
- 它的哪一部分是 'pushed down' 到数据库的,有多少数据在 SAS 和 Oracle 之间流动
- Oracle 的
explain plan
查询是什么 -- 它是否有明显的低效率
当以明显次优的方式执行查询时,您会发现(通常)固定版本在使用冷缓存和热缓存时都会 运行 更快。
要将此应用于您提到的情况(10 秒对 2 秒)- 在考虑如何准确测量之前,请先查看
- 如果您的查询被正确地推送到 Oracle(可能会),
- 以及它是否需要对足够大的 table 进行完整 table(分区)扫描(取决于数据库中的 IO 有多慢 - 大约 1-10 GB) .
如果您发现查询需要读取 1 GB 的数据并且您的典型(数据库内)读取速度为 100MB/s,那么使用冷缓存的 10 秒是 运行 的预期时间。
我正在阅读这篇论文:"Need for Speed - Boost Performance in Data Processing with SAS/Access® Interface to Oracle"。我想知道如何清除 SAS 中的缓存/缓冲区,以便我的重复查询/测试能够准确反映更改?
我注意到相同的查询 运行 第一次需要 10 秒,并且(不)更改 运行 之后将花费更短的时间(比如 1-2 秒)。是否有清除缓存/缓冲区的命令/指令。这样我就可以对我的新更改进行干净的测试。
我正在使用 SAS Enterprise Guide 处理托管在 Oracle 服务器上的数据。谢谢!
我不是 Oracle 专家,但我怀疑您有什么方法可以 'clear' oracle 缓存(如果有的话,您可能需要成为 DBA 才能这样做)。
通常我所做的是稍微更改查询的参数,以便确切的查询不再匹配缓存中的任何内容。例如,您可以更改要查询的日期范围。
它不会为您提供准确的性能比较(因为您得到了不同的结果),但如果一个查询的性能明显优于另一个,它会给您一个很好的主意。
为了刷新 Oracle 端的缓存,您需要 DBA 权限(在 Oracle 中达到 运行 alter system flush buffer_cache;
)和 OS 级访问权限(刷新 OS' 缓冲区缓存 - echo 3 > /proc/sys/vm/drop_caches
在 Linux 下的通用文件系统上。
如果您运行针对生产数据库,您可能没有这些权限——无论如何您都不想运行在生产数据库上执行这些命令,因为它会降低数据库所有用户的性能,并且其他查询会影响 运行 你的查询所花费的时间。
与其尝试准确测量 运行 您的查询所花费的时间,我建议您关注 如何 执行查询:
- 它的哪一部分是 'pushed down' 到数据库的,有多少数据在 SAS 和 Oracle 之间流动
- Oracle 的
explain plan
查询是什么 -- 它是否有明显的低效率
当以明显次优的方式执行查询时,您会发现(通常)固定版本在使用冷缓存和热缓存时都会 运行 更快。
要将此应用于您提到的情况(10 秒对 2 秒)- 在考虑如何准确测量之前,请先查看
- 如果您的查询被正确地推送到 Oracle(可能会),
- 以及它是否需要对足够大的 table 进行完整 table(分区)扫描(取决于数据库中的 IO 有多慢 - 大约 1-10 GB) .
如果您发现查询需要读取 1 GB 的数据并且您的典型(数据库内)读取速度为 100MB/s,那么使用冷缓存的 10 秒是 运行 的预期时间。