Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103695341
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-20 21:12:10

    文章来源:    
  挂起但未瘫痪:附连内存的 SGA 查询

  假设您使用 Oracle 企业管理器诊断和解决性能问题。一天,出现了一个棘手的问题:一个设计糟糕的应用程序引起了严重的库高速缓存锁定问题,并且数据库呈现挂起状态。您必须快速确定导致该问题发生的会话,并快速终止这些会话。

  您可以启动 Oracle 企业管理器来诊断此问题。且慢!如果整个数据库充满了挂起的会话,那么 Oracle 企业管理器中的查询是否也会挂起?

  如果使用 Oracle 数据库 10g 第 2 版,则答案是否定的。正如我在第 2 部分中所介绍的,在该版本中,“在内存访问模式下进行监控”选项使企业管理器可以直接从 SGA 内存(而不是 V$SESSION)中选择会话。因为在该模式下绕过了 SQL 层,挂起的数据库就不会阻碍此查询的执行。相反,将自动启动查询。

  让我们看看该特性是如何工作的。在 Enterprise Manager 屏幕上,选择 Performance 选项卡并滚动到该页面底部的“Additional Monitoring Links”部分,屏幕与下图类似。



  注意红色椭圆框中“Hang Analysis”的超链接。单击该链接,将显示一个与下图类似的屏幕。



  该图展示了各种“死”会话。在该示例中,您可以看到 SID 为 193 的会话(根会话)已经阻止了其他两个会话,即 192 和 214。该图中的会话颜色表示会话受阻的时间。可以单击 SID 访问 Session Details 屏幕,以获取更多信息。

  还记得 ORADEBUG 实用程序吗?Oracle 企业管理器使用该实用程序获得有关系统挂起的数据。启用 SGA 直接连接时,Oracle 将对每个实例使用一个 SQL 收集器。该收集器随企业管理器自动启动。检索到以下视图中的数据:
V$SESSION 
V$SESSION_WAIT 
V$SYSTEM_EVENT 
V$SYSSTAT 

  附连内存的 SGA 查询是一个非常强大的特性,以后肯定能帮您解决棘手问题。我们都对可“征服”数据库的应用程序有一种亲切感,为什么呢?现在,您可以给出答案了。我认为此特性是第 2 版一个最适用于数据库管理员的特性。

  可中断的 SQL Access Advisor

  您可能熟悉 Oracle 数据库 10g 中的 SQL Access Advisor。它主要提供了一个自动化的方法,通过确定可提高 SQL 性能的索引和物化视图来调整 SQL 工作负载。

  但请考虑下面这种情况:您遇到了一些性能问题,并希望对一组 SQL 语句运行 SQL Access Advisor。为获得一个更准确的分析,您选择了“综合模式”选项。随后,您将等待结果。

  如果 SQL 工作负载很大(包含上百条语句)并且 SQL 语句比较复杂,您可能等待较长的时间。但与些同时却用户迫切要求您提供答案。您该怎么办?

  在 Oracle 数据库 10g 第 2 版中,您可以轻松地中断此顾问程序并查看到目前为止生成的建议或查找结果。第 1 版中的 SQL Tuning Advisor 中提供这些功能,现在已经扩展到 SQL Access Advisor。

  让我们看看该功能的工作方式。从 Advisor Central 屏幕中,单击 SQL Access Advisor 链接。



  从标题“Actions”旁边的右侧下拉列表中选择“Interrupt”选项,然后按 Go 按钮。该命令将中断 SQL Access Advisor,您可以立即看到建议。当然,这些建议并不是完整的集合,但在大多数情况下可以满足用户的需要。

  如果您使用的是命令行版本的 SQL Access Advisor 而不是 Oracle 企业管理器,那么您是否仍可以查看工作进度?当然,您可以使用新的视图 V$ADVISOR_PROGRESS。
SQL> desc v$advisor_progress 
Name                              Null?类型 
 ----------------------------------------- -------- ----------- 
SID                                                NUMBER 
SERIAL#                                            NUMBER 
USERNAME                                           VARCHAR2(30) 
OPNAME                                             VARCHAR2(64) 
ADVISOR_NAME                                       VARCHAR2(64) 
TASK_ID                                            NUMBER 
TARGET_DESC                                        VARCHAR2(32) 
SOFAR                                              NUMBER 
TOTALWORK                                          NUMBER 
UNITS                                              VARCHAR2(32) 
BENEFIT_SOFAR                                      NUMBER 
BENEFIT_MAX                                        NUMBER 
FINDINGS                                           NUMBER 
RECOMMENDATIONS                                    NUMBER 
TIME_REMAINING                                     NUMBER 
START_TIME                                         DATE 
LAST_UPDATE_TIME                                   DATE 
ELAPSED_SECONDS                                    NUMBER 
ADVISOR_METRIC1                                    NUMBER 
METRIC1_DESC                                       VARCHAR2(64) 


  此处的列 TOTALWORK 和 SOFAR 显示了已经完成的工作量以及总工作量,这与您从 V$SESSION_LONGOPS 视图中看到的内容相似。

阅读(225) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~