一天,出现了一个棘手的问题:一个设计糟糕的应用程序引起了严重的库高速缓存锁定问题,并且数据库呈现挂起状态。您必须快速确定导致该问题发生的会话,并快速终止这些会话。
挂起但未瘫痪:附连内存的 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 视图中看到的内容相似。