挂起但未瘫痪:附连内存的 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 版一个最适用于数据库管理员的特性。