使用SQL Developer查找查询的执行时间

时间:2014-03-05 13:15:10

标签: sql oracle-sqldeveloper

我是Oracle DB的初学者。  我想知道查询的执行时间。此查询返回大约20,000条记录。  当我看到SQL Developer时,它只显示50行,最多可以调整为500.并使用F5高达5000.

我会通过在应用程序中进行更改来完成,但是由于它在生产中运行,因此无法进行应用程序重新部署。  所以,我只能使用SQL Developer。我不知道如何获得执行查询所花费的秒数? 任何想法都会对我有所帮助。 谢谢。

此致 JE

3 个答案:

答案 0 :(得分:14)

如果向下滚过最初返回的50行,则会获取更多内容。当我想要所有这些时,我只需点击50中的第一个,然后按 Ctrl 结束一直滚动到底部。

这将更新所使用时间的显示(在结果上方会显示“All Rows Fetched:20000 in 3.606 seconds”),为您提供完整查询的准确时间。

答案 1 :(得分:4)

如果您的对帐单是已部署的应用程序的一部分,并且您有权访问该视图V$SQLAREA,则可以检查EXECUTIONSCPU_TIME的数量。您可以使用SQL_TEXT搜索语句:

SELECT CPU_TIME, EXECUTIONS 
  FROM V$SQLAREA
 WHERE UPPER (SQL_TEXT) LIKE 'SELECT ... FROM ... %';

这是确定实际运行时间的最精确方法。视图V$SESSION_LONGOPS也可能对您有用。

如果您无权访问这些视图,您还可以使用游标循环来运行所有记录,例如

CREATE OR REPLACE PROCEDURE speedtest AS
   count number;

   cursor c_cursor is
     SELECT ...;
BEGIN
   -- fetch start time stamp here
   count := 0;

   FOR rec in c_cursor
   LOOP
     count := count +1;
   END LOOP;   
   -- fetch end time stamp here
END;

根据体系结构,这可能或多或少准确,因为数据可能需要传输到运行SQL的系统。

答案 2 :(得分:2)

您可以更改这些限制;但是你将在数据库和客户端之间的数据传输中使用一些时间,并可能用于显示;而这又会受到每次获取所拉动的行数的影响。这些东西也会影响你的应用程序,所以查看原始执行时间可能无法告诉你整个故事。

要更改工作表(F5)限制,请转到工具 - >首选项 - >数据库 - >工作表,然后增加“要在脚本中打印的最大行数”值(也可以是“脚本输出中的最大行数”) “)。要更改提取大小,请转到首选项中的Database-> Advanced面板;也许是为了匹配你的应用程序的价值。

这并不完美,但如果您不想查看实际数据,只需获取在数据库中运行所需的时间,您可以将查询包装成单行:

select count(*) from (
  <your original query
);

它通常会执行整个原始查询,然后计算结果,这不会添加任何重要的时间。 (我认为可能会在内部重写查询,但我认为这不太可能,如果需要,你可以使用提示来避免它。)