您的位置:首页 > 其它

创新谈-AWR性能优化工具介绍-刘斌

2006-07-21 10:54 375 查看
AWR性能优化工具介绍

本文主要介绍Oracle10g新提供的AWR工具,我在工作中经常需要使用AWR进行数据库性能优化和故障诊断。
AWR(Automatic Workload Repository)是Oracle 10g新提供的收集数据库统计信息的工具。它主要包括AWR内存区, 历史数据存储文件和ASH等部件。
AWR报告的主要内容包括以下几部分,
前言部分: 这是AWR报告的第一段,用于描述环境包括数据库名,数据库版本,是否为RAC节点, 快照报告的采集时间等。
综述部分: 包含等待事件段,Load Profile段,实例效率统计段,Shared Pool统计段,Cache Size段, 其中最重要的是等待事件段, 它告诉我们在快照时间内数据库遇到哪些性能瓶颈,它们将是性能调整或问题诊断的主要候选对象。以下Top Time Event数据摘自我的数据库产生的AWR报告。

[align=center]Event[/align]
[align=center]Waits[/align]
[align=center]Time(s)[/align]
[align=center]Avg Wait(ms)[/align]
[align=center]% Total Call Time[/align]
[align=center]Wait Class[/align]
CPU time
[align=right] [/align]
[align=right]17,306[/align]
[align=right] [/align]
[align=right]99.6[/align]
db file scattered read
[align=right]19,469,037[/align]
[align=right]4,448[/align]
[align=right]0[/align]
[align=right]25.6[/align]
User I/O
log file parallel write
[align=right]492,258[/align]
[align=right]221[/align]
[align=right]0[/align]
[align=right]1.3[/align]
System I/O
log file sync
[align=right]253,519[/align]
[align=right]143[/align]
[align=right]1[/align]
[align=right].8[/align]
Commit
read by other session
[align=right]421,942[/align]
[align=right]73[/align]
[align=right]0[/align]
[align=right].4[/align]
User I/O
报告显示”db file scattered read”是这个快照时间内最重要的等待事件,这种等待是由于会话在等待一个” multiblock IO”的完成, 通常这是由于在大表上执行全表扫描或索引快速扫描引起。接下来可以查看哪些SQL执行这些查询,查询操作集中在哪些表上,检查SQL PLAN看是否使用了索引。
SQL部分:无效的SQL语句是性能不好的主要原因,这部分对这段时间区间内的SQL按照执行时间,逻辑读,磁盘读等指标进行了分类和排序,和STATSPACK不同的是,从AWR报告中可以直接查到该SQL的文本和发送请求的客户端进程信息,极大的提高了SQL分析的效率。
实例活动统计部分:这部分是快照期间,对实例的各个内部模块的活动和各种资源使用情况的统计,主要包括CPU使用情况,SQL*Net消息,链接的行存取和PGA使用情况。
段统计部分:告诉哪些段(包括表和索引)在快照期间经历最高的磁盘读操作,这些信息可以帮助我们决定是否需要重建索引,或对段进行分区来减少发生在这些数据文件上的I/O。
AWR地一些常用操作主要包括修改快照的收集和保存时间,创建Baseline,导出并迁移AWR数据。下面介绍一下这些功能使用方法。
默认情况下AWR每隔1小时自动收集一个系统负载快照,并且此快照默认保存一周。但Oracle10g 提供以下命令可以修改快照收集时间间隔和保存时间。
execute dbms_workload_repository.modify_snapshot_settings(interval => 120,retention => 20160);
上述命令修改快照的收集间隔为2小时,保存时间为两周。
可以为AWR数据创建baseline, 保存这些数据用于将来分析和比较。具体命令如下,
execute dbms_workload_repository.create_baseline (start_snap_id =>1, end_snap_id =>100, baseline_name => 'baseline name', dbid => yourdbid);
可以将AWR数据导出并迁移到其它数据库以便于以后分析。Oracle10g Release2提供两个新工具来完成导出和迁移。AWR数据的工作。
DBMS_SWRF_INTERNAL.AWR_EXTRACT用来导出数据,其使用方法如下,
Begin
DBMS_SWRF_INTERNAL.AWR_EXTRACT (
dmpfile => 'awr_data.dmp',
dmpdir => 'TMP_DIR',
bid => 302,
eid => 305);
end;
其中,dmpfile参数用于指定将要导出的AWR数据文件的名字,dmpdir是指定存放导出文件的目录路径,bid是起始快照编号,eid是结束快照编号。
DBMS_SWRF_INTERNAL用来迁移AWR数据文件到其他数据库。导入AWR数据的过程分为两个步骤,首先使用DBMS_SWRF_INTERNAL.AWR_LOAD方法把数据导入到一个临时模式中,本例是AWR_TEST(也可以自己定义名称),具体方法如下,
begin
DBMS_SWRF_INTERNAL.AWR_LOAD (
SCHNAME => 'AWR_TEST',
dmpfile => 'awr_data',
dmpdir => 'TMP_DIR');
end;
接下来把需要把AWR数据转移到SYS模式中,操作方法如下,
exec DBMS_SWRF_INTERNAL.MOVE_TO_AWR (SCHNAME => 'TEST');
这样AWR数据的导入工作已经完成,现在可以使用这种方法建立一个专门存放AWR数据的数据库,用于集中管理和分析多个数据库实例的性能统计数据。
下面以我工作中的一个实例,说明如何在Oracle 10g中使用AWR来调整和诊断数据库。我们的应用在连续运行一周后,发现数据库服务器的CPU利用率逐渐增高,进一步检查AWR报告,在最后一天的AWR报告中显示系统有大量的” db file scattered read"等待事件发生,导致这种现象发生的原因有多种,可能是SQL语句问题,相关表上缺乏索引或者是发生了I/O争用。通过检查”Top SQL” 的Buffer Get和Physical Reads部分,发现在连续5天的时间内,有一些SQL一直在查询同一个日志表,与此同时在这个表上有大量的并发的Insert操作,连续跑一周后该表数据量达到上千万。检查这些SQL的PLAN发现这些查询没有使用该表上的索引,所以我们采用重建索引,修改日志表和应用设计定期转储日志表的方法解决了该问题。
普通应用用户主要使用数据访问服务。用户并不关心数据库管理系统怎样实现这些服务 以进化论的视角观察DBMS系统的演变, 发现用户要求的数据种类不断增加,包括结构数据和多媒体数据等,DBMS系统提供的数据访问服务的功能也不断增强,,现在先进的DBMS系统可以使用集群方案,根据不同应用类型和工作负载的变化,自动调整计算资源的再分配计算任务,并可在多个实例间进行负载均衡,自动选择由哪个实例提供访问服务。 数据库和应用系统的优化和故障诊断没有公式可寻,它们随着应用类型和应用属性的变化而变化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: