我正在使用cx_Oracle模块在Python中进行一些数据库基准测试.为了对结果进行基准测试,我运行了150个独特的查询并计算每个查询的执行时间.我正在运行这样的事情:
c = connection.cursor()
starttime = time.time()
c.execute('SELECT /*+ NOCACHE */ COUNT (*) AS ROWCOUNT FROM (' + sql + ')')
endtime = time.time()
runtime = endtime - starttime
Run Code Online (Sandbox Code Playgroud)
每个查询都通过变量传递sql,并且它们在长度,运行时和它们访问的表方面有很大差异.话虽如此,所有查询都表现出以下行为:
第一轮:很慢(相对)
第二轮:明显更快(需要1/2到1/5的时间)
第三轮:比第二轮快一点
所有后续运行> = 4:大约等于第3次运行
我需要禁用缓存来获得准确的结果,但前几次运行实际上是在抛弃我的数据; 这好像NOCACHE根本不起作用......这里发生了什么?
编辑:艾伦回答了我的问题,但是对于任何可能感兴趣的人,我做了一些研究并发现了这两个页面也很有用: