"Oracle 12c ASH 学习手册"
Oracle 12c 的 Active Session History (ASH) 是一个强大的诊断工具,专门用于解决和分析数据库中的瞬态性能问题。ASH 实时记录所有活动会话的信息,每秒对这些会话进行采样,并将这些数据存储在数据库的 Shared Global Area (SGA) 的特定缓冲区中。由于它关注的是正在执行工作的会话,而非处于空闲状态的会话,因此,ASH 提供了一种高效的方式,以管理和理解与性能密切相关的数据集。
ASH 数据存储在视图 `V$ACTIVE_SESSION_HISTORY` 中,这个视图包含了在指定时间段内捕获的各种会话信息。通过查询此视图,DBA 可以深入分析系统的活动模式,识别出可能导致性能瓶颈的特定会话或等待事件。
在 Oracle 10g 中,Automatic Workload Repository (AWR) 被引入,它定期收集和存储活动会话的等待事件信息到 `V$SESSION_WAIT` 和 `V$SESSION_WAIT_HISTORY` 视图。然而,与 ASH 不同,AWR 的数据是在后台以固定的时间间隔(如每小时)收集的,并且存储在磁盘上的快照中。这意味着 AWR 适用于分析一段时间内的性能趋势,而不是实时的问题诊断。
ASH 的策略是在内存中保存采样数据,但内存空间有限,一旦达到上限,旧的记录会被新记录覆盖。并且,数据库重启会导致所有 ASH 数据丢失。相反,AWR 通过保存在 `H$_ACTIVE_SESSION_HISTORY` 表中的快照,能够长期保留历史性能数据,这使得 DBA 能够对比不同时间点的性能表现。
在 Oracle 11g 及以后版本,ASH 与 AWR 更加紧密地集成,提供了更丰富的性能监控和分析能力。例如,可以将 ASH 数据与 AWR 报告结合,以获得更全面的性能视图。同时,对于多租户环境,如 Oracle 12c 的 Pluggable Databases (PDB),ASH 也能够跨不同的 PDB 进行性能监控。
通过 SQL 命令,如 `ALTER PLUGGABLE DATABASE OPEN`,DBA 可以控制 PDB 的开放状态,这在管理和配置 ASH 监控时是必不可少的。使用 ASH 和 AWR 的组合,数据库管理员能够有效地诊断当前问题,同时也能根据历史数据进行性能调优,从而确保 Oracle 数据库的高效运行。