课程 3. SQL Explorer和基于SQL性能统计数据的调优.
你应该已经熟悉视图v$sql, 这一视图提供了SQL语句的累积统计数据. 一直以来这一视图被用于查找不同类别的TOP SQL语句: 物理读, 逻辑读, 响应时间, CPU时间等. 这种调优方法被广泛使用, 并且也十分有效(Lab128的SQL Area功能窗口涵盖了这种类型的调整). 这种方法明显的缺点是, 它不能在当负荷发生时实时显示. 这个缺点可以通过计算两个快照的差值或者清空共享缓冲区来解决. 但是这些技巧并不是最终的解决方案, 繁琐并且缺乏时间精度.
Lab128使用同样的方法采集v$sql的快照, 但是用更高的频率: 每15-30秒采集一次. 这会产生大量的数据, 所以Lab128以压缩形式进行存储, 这项技术非常惊人! 过去的任何时间段都可以进行分析, 查找TOP SQL语句, 各个语句的统计图表, 并可以与其他主要性能数据进行比较.
那么这种技术与ASH比较如何呢? v$sql快照及ASH都是主要针对代价昂贵的SQL语句. 在这方面这两种方法功能类似, 结果也接近. 根据我们的经验, 对于纯粹的SQL统计v$sql快照提供更多的完整和准确的数据(10gR2和更高版本). 而另一方面, ASH涵盖更广泛的范围, 因为他们提供额外的数据, 如等待事件, 相关的数据库对象等. 因此这两项技术是相辅相成的. 事实上SQL Explorer窗口集成所有的数据, 使其成为一个非常强大的工具.
让我们来看一下SQL Explorer. 有许多方法可以打开SQL Explorer窗口, 使用主菜单, 或通过工具栏图标. 在此窗口中有三个部分: 上面是图形图表, 中间是等待事件的标签栏, 下面是ASH.
上面一部分显示的是汇总的所有SQL语句统计数据的图表. 这些图表提供了数据库活动的概览. 使用复选框选择需要的统计项目. 通常情况下, "Elapsed Time", "CPU Time", "Disk Reads", 和 "Buffer Gets" 是我们经常使用的数据. 对频繁和快速的查询, “Executions”也可能是有帮助的. 如果您怀疑有锁的问题, 请检查“Application Wait Time”; 对于索引争用和其他并发问题, 请检查“Concurrency Wait Time”. 在同一时间内不要选择太多图表, 选择足以提供您所需要信息的图表以使界面整齐. 在大多数情况下, 图表“Elapsed Time”(响应时间)就足够了.
在上面部分用鼠标选择你感兴趣的时间段. 时间段的选择很重要, 因为其他两部分的数据是根据选定的时间间隔来显示的.
中间的标签视图显示的是统计数据在选定的时间间隔内的差值, 这是针对每个SQL语句的. 点击栏标题进行排序. 这些图表中, 您最感兴趣的可能是"Elapsed Time", "CPU Time", "Disk Reads", 和 "Buffer Gets". 点击去查看那些排在前面的SQL语句. 您也可以直接选择感兴趣的SQL语句. 如果您想要关于这个语句的单独的图表, 点击右键并选择“Show Graph for selected SQL ”. 在“Select SQL Statistics”窗口选择确定, 图表将被添加进来. 这个图表动态的显示了语句的执行, 并可以确定在哪个确定的时刻其使用了最多的系统资源.
在标签中选择另一列并加进这个SQL语句. 但是怎么知道第一个SQL语句的图表对应哪一行呢? 它有一个经过处理的ID所以很困难. 您可以这样做: 右键点击图表并选择“Locate SQL for this Graph”, 相应的行就会被再次选中. 您可以对标签视图进行搜索, 按Ctrl - F可以前后搜索所有数据和列标题.
有时候图表会变得拥挤你可以通过右键菜单, 或通过使用“Remove Extra Charts”链接移除您不需要的图表.
让我们假定你只对某个SQL语句感兴趣, 并要通过改变时间段和查看统计数据仔细研究它. 使用“Selected Row only”复选框. 只有一列将被显示在列表视图中, 然后您就可以改变时间段, 观察统计数据如何改变. “Selected Row only”使跟踪单个的SQL语句简单得多, 您当然可以随时取消这个选项.
下面的的SQL Explorer窗口中包含了您已经熟悉的ASH. 如果你选择一个特定的SQL语句, ASH相应地更新针对这个语句的数据显示. 正如上文所述, ASH与SQL统计数据是互补的. ASH的操作与在课程2中讲述的Activity Explorer都是一致的.
在右下角您可以看到SQL文本. 该SQL_ID 和"Plan Hash Value"链接到SQL语句的详细窗口. 点击一个链接打开此窗口. 这里面的数据和SQL Explorer是一致的, 它包括所有针对这个语句的信息. 此窗口的操作和SQL Explorer是一样的, 您很快就可以熟悉. 您可以关闭此窗口返回到SQL Explorer中, 这个链接可以用来快速检查单个的SQL图表. SQL语句的细节窗口有自己的用处, 这是另外一个课程所有讨论的内容.
这里要提醒你, 所有在SQL Explorer中显示的数据都是针对选定的时间段的. 如果您想要查看同一时间段内的其他窗口的数据, Lab128可以直接进行切换.
例如, 您可能会想要查看同一时间段内Activity Explorer中的数据. 一旦你选择好时间段, 在任何图表中右键点击呼叫Activity Explorer. 另一个有用的功能是你能够从外部添加更多的统计信息到一个图形窗口. 所有的图形对象都可以合并到其他窗口. 课程4将提供更多这方面的资料.
课程总结. Lab128利用频繁的针对v$sql (或v$sqlstats在10gr2及更高版本中)的快照来增强SQL Explorer的功能. 所有重要的SQL统计都可以浏览并以图形的方式呈现. 此窗口中所有的数据都是针对某个特定时间段的, 因此选择好需要分析的时间段是至关重要的. 另外SQL Explorer可以被从其他窗口调用, 同时保持选中时间段的属性. 中间部分是针对每个SQL语句的数据, 可以进行排序和查找. 这个课程里面已经给出了最重要的统计数据. 可以通过选择和使用右键菜单来查看各个语句的图形图表. 另外可以通过链接打开SQL语句详细窗口, 它提供的更详细的图表和其他资料. 最后, 集成了SQL的性能统计数据和ASH数据的SQL Explorer功能更加强大.