Lab128
 高级Oracle®数据库调优及监控工具
128 咨询服务 
深圳, 中国  
Lab128主页 > 最佳实践 > 课程 2

Go to previous lesson Go to next lesson

课程 2. Active Session History (ASH)以及使用Activity Explorer进行基于等待事件的调优.

Oracle服务器是提供查询服务的. 当进行查询时, 服务器进程可以是运行在CPU上或在等待状态. 数据库调优的目的是为了减少查询的执行时间, 也就是减少花费在CPU和等待事件上的时间.

从历史上看, Oracle等待事件的调优是基于视图v$system_event. 这种做法仅针对实例级别的调整并且缺乏CPU的数据. 在近年来另一种基于活动会话数据快照的技术被证明是更有效的, 对活动会话数据进行汇总分析可以反映数据库在各个层次上的状况, 最常见的是针对单个SQL语句的级别.

Oracle 10g已经集成ASH的功能, 其数据可以通过视图v$active_session_history获得, 但使用该数据需要购买许可证. Lab128有一个独立的ASH收集引擎, 有更多的统计信息和保存更多的历史数据. ASH收集功能融入Lab128, 并且不需要其他的许可证. 另外Lab128可以使用v$active_session_history数据(如果用户拥有相应的许可证)进行更多更全面的分析.

让我们来了解一下Activity Explorer, 它支持以上提到的两种数据库调优方法. 虽然有点多余, 我们还是谈一下基于视图v$system_event的技术. 这样我们可以验证ASH的数据并且可以发现一些小的在ASH中被忽略的等待事件. 使用活动浏览器时你应该熟悉这两个等待数据的来源.

有许多方法可以打开活动浏览器, 主菜单, 工具栏, 或者快捷键F5. 我们可以看到三个部分: 上面的图形图表, 中间的系统等待数据图表, 以及下面的活动进程历史(ASH).

在上面的一部分, 可以用鼠标选择感兴趣的时间段, 其他部分就会显示这个时间段相关的数据. 请注意, 第一个图表显示是从v$system_event得到的数据, 第二个图表是从ASH获得的数据. 这两个图表应该是类似的, 但是ASH图表增加了CPU的数据. CPU的部分可以取消, 但由于CPU时间是非常宝贵的信息, 你应该在大多数情况下打开它.

中间部分显示了视图 v$system_event在这段时间内的差值. 在这里这项数据为等待事件在一个实例上的统计. 这一数据和ASH是相辅相成的, 您可以调整这个窗口到一个更小的尺寸以给予ASH更多的空间.

ASH有几个标签, 默认时开启活动浏览器窗口. 有颜色的柱状图显示针对每个SQL语句的等待事件, 这有助于快速评估有问题的SQL语句..选择一个单独的SQL语句, 看看它的细节. 现在切换到历史视图. 在此视图中每一行都有针对某一特定的时刻活动的会话数据. 默认情况下数据是按SQL ID和快照的时间来组织的. 因此一个SQL语句的多个快照会在每行分别列出. 历史视图会显示活动会话的所有细节, 其数据的大小与您选择的时间段有关, 所以数据量有可能非常大. 通常情况下你不需要去查看这个图表, 除非你正在研究最详细的有关进程细节, 比如您需要进程正在读取哪个表或索引(有一个更好的方式来做这件事-通过树状视图, 稍后讨论), 或查找一个阻塞进程等. 如果您必须使用这个图表, 你可以注意到时间栏有一个链接到活动会话历史的窗口, 在这里你可以看到整个快照其中包括在那一刻所有的活动进程. 如果你想追踪某个进程, 请选择该行然后点击右键并选择“Selected Session History”.

ASH中的树状视图值得特别关注. 这个树状视图显示所有耗费时间的总和(所有的响应应时间), 按您定义的分类方式. 例如, 如果您在第一个框中选择一个SQL语句, 你会得到一个与早先看到的类似的汇总图表. 这是因为汇总图表展示以SQL语句为基础的分类方式. 让我们在第二个框选择“Event”, 在第三个框“Object”, 树状视图将更新. 现在可以遍历视图, 扩展各个节点. 如果有读取事件, 您应该可以看到其中被访问的对象以及花费在每个对象上的时间百分比, 这要比我们先前提到的通过钻取详细历史视图简单得多.

树状视图中显示的响应时间是按照不同的维度来汇总的, Lab128帮助您分析组件的响应时间. 这就是所谓的维度分析. 在每个级别有很多维度可以选择. 不过究竟应该怎样选择呢? 这取决于问题的类型. 一般来说您应该首先选择您可以直接或间接影响的维度. 举例来说, SQL语句可以调整或改变, 因此可以通过SQL语句来分析响应时间. 例如如果你有一个热点块(表, 索引, 或分区等), 您可以重新分区或移动到另一个表空间, 你应该选择“Object”, 然后“Event”(或反之). 您需要选择“Event”, 因为你要确保你是在关注造成“db file sequential read”事件的对象, 而不是“enq: TX row lock contention”. 再举一个例子, 如果你想分配I/O负载到其他表空间/数据文件, 您可以选择“Event”和“File”维度. 另一个建议是可以利用主要的维度作为一个过滤器. 例如, 如果您关心数据库里面锁问题, 您可以首先选择“Event”作为一个过滤器, 然后选择“SQL ”. 然后扩展Event, 您可以找到“enq: TX row lock contention”, 然后看看哪个SQL语句造成了这些等待事件.

作为提醒, 所有在活动浏览器中数据都是针对某个选定的时间段的. 您可能会想要了解同一时间段数据库其他的性能状况. Lab128可以切换到另一个窗口, 并自动作出同样的时间段选择. 举例来说, 如果您决定要研究同一时间段的SQL浏览器的数据, 右键点击任何图表选择相应菜单, 将调用适当的工具. 这是一个强大的功能, 它可以使监测和调整容易得多. 另一个有用的特点是能够从其他任何图表添加更多的统计数据. 同样地, 多个图形对象可以合并到一个单独的窗口. 课程4 会提供更多这方面的资料.

课程总结. 通过使用自己的ASH采集机制和系统范围的视图v$system_event, 活动浏览器提供更详细有关等待事件的信息. 您应该已经熟悉这两个数据的来源. 在此窗口中呈现的所有数据都是针对特定时间段的, 因此在图表中选择一个感兴趣的时间段是很重要的. 另外活动浏览器可以被从其他窗口调用而不改变时间段的属性. 中间部分呈现的是整个实例范围内的等待事件, 这是为了完整性添加的. 但是你应侧重ASH, 因为它通常包含了更多的相关资料. 调优的目的是为了减少数据库的响应时间(消耗时间), 其中有两个组成部分: CPU时间和等待时间. 摘要视图显示了最耗时SQL语句以及这些时间花费在哪一部分: 等待和CPU时间. 历史视图提供了更精细的细节, 但信息量通常是过大而难以处理. 如果您需要了解这些细节, 你应该选择一个SQL语句然后切换到历史视图. 从历史视图上, 会话历史窗口可以根据某一特定的快照或会话ID打开. 树状视图可用于先进的响应时间分析, 使用者可以自定义维度. 维度的选择应根据用户的可控性来进行. 另外, 选定的维度可以作为过滤器来分析响应时间.

Activity Explorer界面.

Go to previous lesson Go to next lesson

  Copyright © 128 咨询服务