Oracle自动性能统计
高效诊断性能问题,需要提供完整可用的统计信息,好比医生给病人看病的望闻问切,才能够正确的确诊,然后再开出相应的药方。Oracle数据库为系统、会话以及单独的sql语句生成多种类型的累积统计信息。本文主要描述Oracle性能统计涉及到的相关概念及统计对象,以更好的利用统计信息为性能调整奠定基础。
一、性能统计信息的几个术语
- 增量值(delta)
性能统计信息依赖于delta值的累计,即增量值。增量值反映了在某个特定时段某个特定事件的趋势,或者说波动的幅度。通过对比在开始期间统计的累计值和结尾处的累计值之间的差异,才能够更清晰的了解该项值在系统不同负载时间段所需要的资源开销以及用于定位性能瓶颈。
在Oracle数据库中,可以通过查询V$SESSTAT和V$SYSSTAT来查询统计值的累计情况。由于这2个视图为动态性能视图,因此,这2个视图的数据收集的仅仅是自实例启动以来的统计数据。如此这般,那数据库关闭后所有的统计信息丢失肿么办,不用着急,有AWR来定期进行保存。
- 度量(metric)
度量是Oracle数据库收集的另一种统计类型。一个度量被定义为在一些累积统计信息的变化率。该速率可以对各种单元进行测量,包括时间、事务或数据库调用。例如,每秒的数据库调用是一个度量。度量值可以从动态性能视图查询获得。其中的值是在一个相当小的时间间隔的平均值,通常为60秒。最近的度量值的历史是在V$视图,同时一些数据也由AWR快照进行持久化保持。
- 采样(sampling)
Oracle对活动会话过程中出现的相关等待进行采样,并将这些数据收集到内存中,可以用V$视图进行访问,也可以将其生成报告,用于快速或者实时的定位性能问题。那这个部分就是所谓的ASH,活动会话历史。同时这些数据由AWR快照处理也将其写入持久存储。
- 基线(baseline)
有数据,能比对,才能够真正反映问题的实质。那么在Oracle数据库里边,我们可以将其业务负载高峰期的活动会话历史数据,更确切的说是AWR持久化的数据贴个标签,这个标签就是所谓的基线。因此基线就是某个特定时段业务高峰期数据库整体性能的一个基准报告,一旦当后续数据库出现性能问题或运行不佳的时候,通过使用基线,与性能问题期间的性能统计数据进行比对,得出两者的差异报告,有助于问题的定位于解决。
二、系统级别性能统计
操作系统基本性能统计提供了系统主要硬件部件的使用和性能的信息,以及操作系统本身的性能。这些信息对于检测潜在的资源消耗,如CPU周期和物理内存,以及检测外设性能不良,如磁盘驱动器是至关重要的。 操作系统统计是硬件和操作系统工作状况的重要的指标。主要包括以下重要信息。
- CPU统计信息
CPU利用率是调优过程中最重要的操作系统统计。应获取整个系统和多处理器系统中单个CPU的利用率。每个CPU的利用率可以检测单线程和可扩展性问题。大多数操作系统在用户空间或内核空间显示CPU时间开销,这些额外的统计数据可以更好地分析CPU实际执行情况。
在仅仅单个应用程序运行的Oracle数据库系统中,通常情况下,该业务系统在用户空间中运行数据库活动。服务于数据库的活动请求(如调度、同步、I/O、内存管理、进程/线程创建和删除)则在内核模式(空间)下运行。在一个CPU充分利用的系统中,一个健康的Oracle数据库在用户空间CPU的开销通常在运行65%到95%之间。
可以通过查询V$osstat视图捕获硬件和操作系统级别的相关信息,使得判定硬件级资源存在的问题更容易。V$sysmetric_history视图保留主机一小时内CPU使用度量,以每一分钟时间间隔来表示的CPU使用率。V$ sys_time_model视图提供了有多少CPU被Oracle数据库使用。这两组统计数据更能够确定Oracle数据库或其他系统活动是否是CPU问题的原因。
- 虚拟内存统计信息
虚拟内存统计主要用于判断系统上是否存在大量分页或交换活动。当大量分页和交换时,系统性能会迅速下降。单个进程的内存统计数据可以检测内存泄漏是否是由于某个进程释放内存失败而导致。
- 磁盘I/O统计信息
I/O子系统的性能决定或影响着数据库的性能。大多数操作系统对磁盘提供一些扩展的统计信息。最重要的磁盘统计信息是当前的响应时间和磁盘队列的长度。这些统计数据显示磁盘是否处于最佳状态,或者磁盘是否正在超负荷工作。
测量I/O系统的正常性能;取决于所使用的硬件,单个块读取范围的典型值从5到20毫秒。如果硬件显示的响应时间远高于正常的性能值,那么它表现不佳或超负荷工作。这就是瓶颈。如果磁盘队列开始超过两个,那么磁盘是一个潜在的瓶颈系统。
Oracle数据库提供了一些在I/O调用时的I/O统计信息。这些统计数据在以下视图获取。
v$iostat_consumer_group :
在启用资源计划后,该视图捕获I/O相关信息,是所有资源消费群组统计。数据库样本统计每小时累积并将它们存储在AWR中。
v$iostat_file :
该视图是基于磁盘文件I/O的统计,主要用于以文件级别展现文件访问频度。
v$iostat_function:
该视图是基于I/O数据库功能(如LGWR和DBWR)的统计数据。
- 网络统计信息
用于确定网络或网络接口是否过载或没有最佳执行。在今天的网络应用中,网络延迟可以是实际用户响应时间的很大一部分。出于这个原因,这些统计是一个关键的调试工具。
v$IOSTAT_NETWORK:
该视图提供网络相关统计信息查询
三、数据库统计信息
数据库统计提供数据库上的负载类型以及数据库使用的内部和外部资源的信息。
- 等待事件
等待事件是由服务器进程或线程递增的统计数据,也就是说在继续处理当前某项任务之前,它必须等待某个事件完成才能继续处理。等待事件数据揭示了可能影响性能的问题的各种症状,如锁存争用、缓冲区争用和I/O争用。
为了更好的分析不同等待事件,Oracle将等待事件进行了分类。等待事件分类包括:管理,应用程序,集群,提交,并发,配置,空闲,网络,其他,调度,系统I/O,和用户I/O。
Author : Leshami
Blog : http://blog.csdn.net/leshami
下面的列表包括一些类中的等待的常见示例:
1. 应用程序:由行级锁定或显式锁命令所引起的锁等待
2. 提交:提交后等待重做日志写入确认
3. 空闲:表示会话不活动的等待事件,例如来自客户端的sql*net消息
4. 网络:等待数据通过网络发送
5. 用户I/O:等待块被读取磁盘
- 时间模型统计
基于时间模型统计,主要是基于操作类型测量在数据库中花费的时间的统计信息。最重要的时间模型统计是数据库时间,即DB Time。数据库时间表示在数据库调用中所花费的总时间,是实例工作负载量的总指示器。
在Oracle数控中,每个组件都有自己的统计数据。因此通过该组件与整体DB Time进行比对,可以很好地衡量这个组件的性能,或者说这个组件占据整个DB Time的百分比。如果能够基于这些开销过大的组件来进行调整,也即是整个DB Time开销的时间更少。
DB Time:
即所有花费在数据库层面调用时间的总和,包括所有会话(前台进程)以及非空闲等待,CPU时间等
DB Time 是从实例启动以来时间的累计测量。由于DB时间是由所有非空闲用户会话的时间组合来计算的,所以DB时间可能超过实例开始后所经过的实际时间。例如,已经运行了30分钟的实例可能有四个活动用户会话,其累积DB Time大约为120分钟。
更多关于时间统计模型可以参考:Oracle Time Model Statistics(时间模型统计)
- 活动会话历史(ASH)
Oracle对当前数据库活动会话,每秒进行采样,并将其最近10次的等待信息保存到v$session_wait,同时将其归档到活动会话历史表v$session_wait_history。这即是活动会话历史(ASH)。这些数据被保留在从SGA分配的特定内存中,并且采用循环写的方式,即采取LRU算法定期清理该部分缓存。说简单一点,ASH采用的策略是:保存处于等待状态的活动session的信息,每秒从v$session_wait中采样一次,并将采样信息保存在内存中。由于SGA中的活动会话信息存储在循环缓冲区中,系统活动越大,可以在循环缓冲区中存储的会话活动的秒数越小。因此这些数据就需要定期将其写入到磁盘,那就是由MMON进程定期将部分数据写入到AWR。AWR采用的策略是:每小时对v$active_session_history进行采样一次,并将信息保存到磁盘中,并且保留8天(11g缺省值),8天后旧的记录才会被覆盖。这些采样信息被保存在视图wrh$_active_session_history中。而这个采样频率(1小时)和保留时间(8天)可以根据实际情况进行调整。
活动会话历史通常包括以下数据:
SQL语句及SQLID
用于执行sql语句的sql计划的sql计划标识符和哈希值
SQL执行计划信息
对象编号、文件号和块号
等待事件标识符和参数
会话标识符和会话序列号
模块和动作名称
会话的客户端标识符
服务散列标识符
消费组标识符
- 系统和会话统计信息
可以从V$SYSSTAT和V$SESSTAT两个视图获取大量系统级别以及会话级别的统计信息。