Oracle数据库10g VIEW性能

时间:2009-02-18 03:44:16

标签: sql oracle plsql oracle10g views

我的Oracle数据库中有一个视图,执行时间太长。当语句运行时,它似乎没有停止。

我们是否可以验证此视图的效果,或者我们如何检查语句会话是否“挂起”?

谢谢, N2EE

更新

我意识到问题在于视图中的基础查询。 感谢Edwin的autotrace修复。

5 个答案:

答案 0 :(得分:5)

很可能执行查询的速度非常慢。

您可以使用说明计划了解如何在数据库中执行查询。

如果您有SQL * Plus,可以使用以下语句轻松完成此操作:

set autotrace traceonly

然后输入查询,您将获得有关您的查询的统计信息:

SQL> set autotrace traceonly
SQL>  select * from o_drops;

4461 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 3820245448

-----------------------------------------------------------------------------
| Id  | Operation         | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |         |  4287 |   280K|    11  (10)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| O_DROPS |  4287 |   280K|    11  (10)| 00:00:01 |
-----------------------------------------------------------------------------


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
        333  consistent gets
         48  physical reads
          0  redo size
     337057  bytes sent via SQL*Net to client
       2316  bytes received via SQL*Net from client
        299  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
       4461  rows processed

如果其中一个资源非常高,它可能会重写查询和/或添加索引 你正在使用的桌子。

答案 1 :(得分:1)

您需要了解构成视图的查询的性能。最好的方法是对视图使用的sql语句执行解释计划。这将表明它是否正在进行全表扫描或其他一些不太理想的行为。调整查询,您的视图应该运行得更好。

答案 2 :(得分:1)

您是在谈论创建或替换现有视图(即执行CREATE OR REPLACE VIEW ...语句)还是从视图中进行选择。

在前一种情况下,某些会话可能已被锁定。例如,如果有人通过视图更新或删除,您将无法替换它。根据您的版本,您可以通过查看v $ session的“BLOCKING_SESSION”列来查看阻止程序。

在后一种情况下,它不是一个慢的视图,而是一个查询。这个观点几乎无关紧要。检查解释计划(最好使用DBMS_XPLAN.DISPLAY_CURSOR和v $ sql中的sql_id),看看它到底是什么。 v $ session_longops可能会给出一个指针。

答案 3 :(得分:0)

假设问题是基础查询,性能问题可能是因为尚未分析使用的表 您可以使用DBMS_STATS包更新Oracle有关表的信息,然后查看查询速度是否有所提高。

答案 4 :(得分:0)

根据快照ID

生成AWR报告

有两个sql脚本来创建AWR报告。 1. awrrpt.sql 如果我们只有一个Oracle数据库,那么运行awrrpt.sql sql脚本。

  1. awrrpti.sql 如果我们有多个Oracle实例(如RAC),则运行awrrpti.sql脚本,以便我们可以为awr报告创建特定实例。
  2. AWR报告sql脚本的位置 $ ORACLE_HOME / RDBMS /管理