Oracle中同一SQL语句的不同响应时间

时间:2018-11-21 11:05:54

标签: database-performance

我正在数据库中运行一个简单的select语句(使用腻子从远程计算机连接)。我从腻子连接到SQLPLUS,然后执行select语句。但是每次运行查询时,响应时间都会有所不同。这是我的观察结果。

1)启用跟踪(10046)。每次执行查询时,跟踪文件中的“ elapsed_time”都不同。

2)在控制台上显示的经过时间与跟踪文件中存在的经过时间有很大的区别...从腻子中,经过时间显示为大约。 2-3秒而在跟踪中记录的经过时间显示为1秒的经过时间...在腻子控制台上的经过时间与跟踪文件日志之间有什么区别?

油灰控制台输出:


从WWSH_TEST.T01DATA_LINK选择*

选择489043行。

已过去: 00:02:57.16

Tracefile输出:


选择* 从  WWSH_TEST.T01DATA_LINK

call      count      cpu    elapsed     disk    query current    rows
----    -------  -------  --------- -------- -------- -------  ------
Parse         1     0.00       0.00        0        0       0       0 
Execute       1     0.00       0.00        0        0       0       0 
Fetch     32604     0.38       2.32    10706    42576       0  489043

在腻子控制台上,经过时间显示为2.57秒,而在跟踪文件中,经过时间为2.32 ..为什么我们会看到这种差异?

此外,当我重复运行此相同的SQL语句时,我可以在跟踪文件中看到不同的经过时间(范围从2.3到2.5秒)。.没有响应时间的原因可能是什么?完全改变数据库。

数据库版本:11.2.0.3.0

1 个答案:

答案 0 :(得分:0)

看起来时差是“客户端处理”-基本上是sqlplus格式化输出所花费的时间。 另外,看起来您的数组大小为15。尝试以更大的数组大小(例如512或1024)运行。

设置数组大小的机制因客户端而异。在sqlplus中:

set arraysize 1024

获取时间不包括网络时间,但是如果您使用级别8跟踪

alter session set events '10046 trace name context forever, level 8';

这将给您等待事件。寻找的是来自客户端的SQL * Net消息,这基本上是数据库等待被要求执行某项操作的时间,例如获取下一组行。