查询所用时间的差异,其中跟踪中的所有内容似乎都相同

时间:2014-03-06 06:34:23

标签: sql performance oracle

在分析程序的痕迹时,我在创建两个新索引之前运行了一个程序,我发现一些查询现在比以前的运行具有更高的运行时间(没有使用任何新索引我已创建并具有相同的执行计划)。

一个特定的查询是:

SELECT GP.PERIOD_YEAR, GP.PERIOD_NAME, GP.PERIOD_YEAR || '-' || 
LPAD(GP.PERIOD_NUM, 2, '0') 
FROM
GL_PERIODS GP WHERE GP.PERIOD_TYPE = :B3 AND GP.PERIOD_SET_NAME = :B2 AND 
GP.ADJUSTMENT_PERIOD_FLAG = 'N' AND TRUNC (:B1 ) BETWEEN TRUNC 
(GP.START_DATE) AND TRUNC (GP.END_DATE)

Before Stats:
call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute 1738112     31.63      31.26          0          0          0           0
Fetch   1738112    778.18     780.36         17    6952448          0     1738112
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total   3476225    809.81     811.63         17    6952448          0     1738112

After Stats:
call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute 1738112     75.80      76.87          0          0          0           0
Fetch   1738112   1490.70    1499.47         17    6952448          0     1738112
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total   3476225   1566.50    1576.36         17    6952448          0     1738112

此查询的等待事件是

  1. db file sequential read,
  2. latch:cache buffers chains,
  3. latch:shared pool
  4. 没有超过一秒的总等待时间。

    所以我想知道的是为什么这个特定的查询在运行时显示出这种差异?我应该考虑所有领域以获得运行时差异的原因。

    我在同一个实例中运行程序。如果需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

根据性能调优的oracle文档:

您可以使用索引来提高返回少于表中行的15%的查询的性能。通过完全扫描,即通过顺序读取所有行,可以更快地执行返回表中15%或更多行的查询。

因此,在您的情况下,请检查提取的行数不大于或等于15%。

您可以参考此performance tuning文档。