首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle数据库10g视图性能

Oracle数据库10g视图性能
EN

Stack Overflow用户
提问于 2009-02-18 03:44:16
回答 5查看 6.6K关注 0票数 0

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

我们是否可以验证这个视图的性能,或者如何检查语句会话是否处于“挂起”状态?

谢谢,N2EE

更新

我意识到问题出在视图中的底层查询上。感谢Edwin的自动跟踪修复。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-02-18 05:48:05

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

您可以使用explain plan查看查询是如何在数据库中执行的。

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

代码语言:javascript
复制
set autotrace traceonly

然后输入查询,您将获得查询的统计信息,如下所示:

代码语言:javascript
复制
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

如果其中一个资源非常高,可以重写查询和/或将索引添加到您正在使用的表中。

票数 5
EN

Stack Overflow用户

发布于 2009-02-18 04:26:36

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

票数 1
EN

Stack Overflow用户

发布于 2009-02-18 05:14:16

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

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

在后一种情况下,它不是一个慢的视图,而是一个查询。视图几乎无关紧要。检查解释计划(最好使用带有来自v$sql的sql_id的DBMS_XPLAN.DISPLAY_CURSOR ),看看它在做什么。v$session_longops可以给出一个指针。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/559759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档