首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >即使有NOCACHE提示,Oracle 11g查询似乎也会缓存。

即使有NOCACHE提示,Oracle 11g查询似乎也会缓存。
EN

Stack Overflow用户
提问于 2015-10-30 23:48:58
回答 1查看 11.5K关注 0票数 8

我正在使用cx_Oracle模块在Python中做一些数据库基准测试。要对结果进行基准测试,我将运行150个唯一的查询,并对每个查询的执行时间进行计时。我在做这样的事:

代码语言:javascript
运行
复制
c = connection.cursor()
starttime = time.time()
c.execute('SELECT /*+ NOCACHE */ COUNT (*) AS ROWCOUNT FROM (' + sql + ')')
endtime = time.time()
runtime = endtime - starttime

每个查询都通过变量sql传入,它们在长度、运行时和访问的表上有很大差异。尽管如此,所有查询都显示了以下行为:

第一轮:非常慢(相对地)

第二轮:明显更快(时间从1/2到1/5不等)

第三轮:略快于第二轮

所有后续运行>= 4:大约等于第三次运行

我需要禁用缓存才能得到准确的结果,但最初的几次运行实际上是在抛出我的数据;就好像NOCACHE根本无法工作.这里发生了什么事?

编辑:艾伦回答了我的问题,但对于任何可能感兴趣的人,我做了更多的研究,并发现了这两页也是有帮助的:

如何清除Oracle中的所有缓存项

cache.htm

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-31 00:10:29

来自文档

NOCACHE提示指定,当执行完整的表扫描时,为表检索的块被放置在缓冲区缓存中LRU列表的至少最近使用的末端。这是缓冲区缓存中块的正常行为。

从这一点看,nocache提示根本没有达到您的预期效果。

您可以通过运行ALTER SYSTEM FLUSH SHARED_POOL来清除共享缓存,并通过运行ALTER SYSTEM FLUSH BUFFER_CACHE清除缓冲区缓存。您需要在每个查询之间执行此操作,以防止缓存被使用。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33446459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档