Oracle 数据库AWR(Automatic Workload Repository)概述

1.自动负载信息库的概述

自动负载信息库(AWR:Automatic Workload Repository)收集、处理和维护性能统计信息,用于问题检测和自行调优。
这些数据存储在内容和数据库中,这些捕获的属性可以显示在报表和视图上。

AWR收集和处理的统计信息包括:

  • 对象统计
  • 时间模型统计
  • 系统和会话统计
  • 获取会话历史统计

自动工作负载信息库默认是启用的,由STATISTICS_LEVEL初始化参数控制。

  • STATISTICS_LEVEL初始化参数应该设置为TYPICALALL ,启用AWR统计收集。默认这是为 TYPICAL
  • STATISTICS_LEVEL参数设置为BASIC禁用许多Oracle数据库功能,包括AWR,不推荐使用。如果STATISTICS_LEVEL参数设置为BASIC,你仍然可以通过设置DBMS_WORKLOAD_REPOSITORY参数用于手动捕获AWR统计。但是,由于在内存中许多系统的统计数据是被禁用,例如段统计和内存顾问信息,这些快照捕获的统计数据可能是不完全的。

自动负载信息库包括以下内容:

  • 快照
  • 基线
  • 自适应阀值
  • 空间消耗

1.1 快照

快照是ADDM用于性能比较的指定期间的一组历史数据。默认情况下,Oracle数据库每个小时自动产生一次快照,并保留8天负载统计信息。你也可以手动创建快照,但通常是没有必要的。在快照间隔产生的数据,通过自动数据库诊断器进行分析。

AWR比较不同快照之间的差异来确定捕获影响系统负载的SQL语句,逐渐减少被捕获的SQL语句。

1.2 基线

基线包含来自指定期间保存性能数据,当出现性能问题时,用于与其他相似的负载期间进行比较。快照中包含的基线自动为WAR清除进程排除,并永久保留。

有以下这种基线类型:

  • 固定基线(Baselined)
  • 移动窗口基线
  • 模板基线

1.3 子适应阀值

启用自适应阀值,你可以监控和检测性能问题,同时可以最大限度地减少管理开销。自适应阀值可以针对已些系统指标自动设置警告和严重警告阀值。

1.4 空间消耗

自动负载信息库的空间消耗有以下几个因素:

  • 系统中活动时间的会话数
  • 快照间隔(Snapshot Retention)
  • 历史数据的保留期

2. 管理自动负载信息库(AWR)

如何管理自动负载信息库包含以下几个方面:

  • 管理快照
  • 管理基线
  • 管理基线模板
  • 传输自动负载信息库数据
  • 使用自动负载信息库视图
  • 生成自动负载信息库报表
  • 生成自动负载信息库比较期间报表
  • 生成活动会话历史表表
  • 使用活动会话历史表表

2.1 管理快照

默认情况下,Oracle数据库每个小时产生一次快照,并在负载信息库中保留8天。必要时,可以通过DBMS_WORKLOAD_REPOSITORY过程手动创建,删除和修改快照。要调用该过程,用户必须要有DBA的权限。

管理快照的主要界面是Oracle企业管理器。只要有可能,应该使用Oracle企业管理器来管理快照。如果Oracle企业管理器不可用,则可以使用DBMS_WORKLOAD_REPOSITORY包管理快照。

2.1.1 创建快照

如果你想捕获不是系统自动生成的快照,可以通过CREATE_SNAPSHOT过程手动创建快照。例如:

BEGIN
  DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();
END;

2.1.2删除快照

你可以使用DROP_SNAPSHOT_RANGE删除一个范围内的快照,查看快照ID列表以及数据库ID,检查DBA_HIST_SNAPSHOT视图。你可以删除以下范围的快照:

BEGIN
  DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE (
       low_snap_id => 22, 
       high_snap_id => 32, 
       dbid => 3310949047
  );
END;

2.1.3修改快照设置

你可以调用间隔,保留期和捕获指定数据库ID的顶层SQL。但要注意这可能会影响Oracle诊断工具的使用。

  • INTERVAL设置快照自动生成的频率,以分钟为单位。
  • RETENTION 设置负载信息库保留的期限,以分钟为单位。
  • TOPNSQL设置刷新最高的SQL。

使用MODIFY_SNAPSHOT_SETTINGS过程调整设置。如下:

BEGIN
  DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
     retention => 43200, 
     interval => 30, 
     topnsql => 100, 
     dbid => 3310949047
  );
END;

在这个例子中,保留期限被指定为43200分中(30天),每个快照之间的间隔被指定为30分钟。你可以查询DBA_HIST_WR_CONTROL 视图查看数据库实例的当前设置。

2.2 管理基线

管理基线的主要界面是Oracle企业管理器(Oracle EM Manager)。只要有可能,应该使用Oracle企业管理器来管理基线。如果Oracle企业管理器不可用,则可以使用DBMS_WORKLOAD_REPOSITORY包管理快照。

2.2.1 创建基线

如果使用已存在的一个快照范围创建基线。

  1. 检阅DBA_HIST_SNAPSHOT视图中已存在的快照,以确定你想要使用的快照范围。
  2. 使用CREATE_BASELINE过程来创建期望快照范围基线。
BEGIN
     DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE (start_snap_id => 270, 
                    end_snap_id => 280, baseline_name => 'peak baseline', 
                    dbid => 3310949047, expiration => 30);
END;

2.2.2 删除基线

如果删除一个已存在的基线:

  1. 检阅DBA_HIST_SNAPSHOT视图中已存在的基线,以确定你想要删除的基线。
  2. 使用DROP_BASELINE 过程删除期望的基线。

BEGIN
DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE (baseline_name => 'peak baseline',
cascade => FALSE, dbid => 3310949047);
END;

2.2.3 重名基线

如何重名基线:

  1. 检查DBA_HIST_SNAPSHOT视图中已存在的基线,以确定你想要重名的基线。
  2. 使用DROP_BASELINE过程删除期望的基线。
BEGIN
     DBMS_WORKLOAD_REPOSITORY.RENAME_BASELINE (
                    old_baseline_name => 'peak baseline', 
                    new_baseline_name => 'peak mondays', 
                    dbid => 3310949047);
END;

2.2.4 显示基线度量

如何显示在一个时间段中捕获的基线度量阀值。

  1. 检查DBA_HIST_SNAPSHOT视图中已存在的基线,以确定你想要显示的基线的度量信息。
  2. 使用SELECT_BASELINE_METRICS函数显示期望的度量信息。
BEGIN
     DBMS_WORKLOAD_REPOSITORY.SELECT_BASELINE_METRICS (
                    baseline_name => 'peak baseline', 
                    dbid => 3310949047,
                    instance_num => '1');
END;

2.2.4 修改移动窗口基线的默认窗口大小

使用MODIFY_BASELINE_WINDOW_SIZE过程修改移动窗口的默认大小。

BEGIN
    DBMS_WORKLOAD_REPOSITORY.MODIFY_BASELINE_WINDOW_SIZE (
                   window_size => 30, 
                   dbid => 3310949047);
END;

2.3 管理基线模板

这个功能中你可以使用基线模板自动创建基线来捕获指定时间段。

2.3.1 创建单个基线模板

使用CREATE_BASELINE_TEMPLATE过程创建单个基线模板:

BEGIN
    DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
                   start_time => '2007-04-02 17:00:00 PST', 
                   end_time => '2007-04-02 20:00:00 PST', 
                   baseline_name => 'baseline_070402', 
                   template_name => 'template_070402', expiration => 30, 
                   dbid => 3310949047);
END;

2.3.2 创建多个基线模板

使用CREATE_BASELINE_TEMPLATE过程创建多个基线模板:

BEGIN
    DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
                   day_of_week => 'monday', hour_in_day => 17,
                   duration => 3, expiration => 30,
                   start_time => '2007-04-02 17:00:00 PST', 
                   end_time => '2007-12-31 20:00:00 PST', 
                   baseline_name_prefix => 'baseline_2007_mondays_', 
                   template_name => 'template_2007_mondays',
                   dbid => 3310949047);
END;

2.3.3 删除基线模板

如何删除一个已存在的基线模板。

  1. 检查DBA_HIST_SNAPSHOT视图中已存在的基线,以确定你想要删除的基线模板。
  2. 使用DROP_BASELINE_TEMPLATE删除期望的基线模板。
BEGIN
   DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE_TEMPLATE (
                    template_name => 'template_2007_mondays',
                    dbid => 3310949047);
END;

2.4 传输自动负载信息库数据

Oracle数据允许系统之间传递AWR数据,你想使用单独的系统来执行AWR数据分析的情况下非常有用。传输AWR数据,你必须先从原系统数据库上提取AWR快照数据,然后在加载到目标系统数据库上。

2.4.1 提取数据

awrextr.sql脚本从数据库中提取一个快照范围的AWR数据到数据备份导出文件中。一旦被创建,这个备份文件可以被传输到另一个系统,可以加载所提取的数据。要运行awrextr.sql这个脚本,必须以SYS用户连接到数据库。

提取AWR数据:

1.在SQL提示符下,输入

@$ORACLE_HOME/rdbms/admin/awrextr.sql

显示AWR模式下的数据库列表

2.指定将要提取AWR数据的数据库

Enter value for db_id: 1377863381

3.指定你要列出快照ID的天数

Enter value for num_days: 2

4.指定开始和结束快照ID,定义的AWR数据的快照范围。

Enter value for begin_snap: 30
Enter value for end_snap: 40

5.目录对象列表

目录对象指导出备份文件存储的目录

Enter value for directory_name: DATA_PUMP_DIR

6.指定导出文件名称的前缀(自动附件.dmp后缀)

Enter value for file_name: awrdata_30_40

2.4.2 加载数据

一旦导出备份文件爱你被传输到目标系统,则可以使用awrload.sql脚本加载提取的AWR数据。该awrload.sql脚本首先会创建一个暂存模式,并将快照数据从导出备份文件传输到数据库中。然后将数据库从暂存模式传输到AWR相应的表中。要运行awrload.sql脚本,必须使用SYS用户连接数据库。

加载数据:

  1. 在SQL提示符下,输入:
@$ORACLE_HOME/rdbms/admin/awrload.sql
  1. 指定导出本备份文件放置目录的目录对象
Enter value for directory_name: DATA_PUMP_DIR
  1. 指定导出备份文件名称的前缀(自动附件.dmp后缀)
Enter value for file_name: awrdata_30_40
  1. 指定加载AWR数据的暂存模式
Enter value for schema_name: AWR_STAGE
  1. 指定暂存模式的默认表空间
Enter value for default_tablespace: SYSAUX
  1. 指定暂存模式的临时表空间
Enter value for temporary_tablespace: TEMP
  1. 一个名为AWR_STAGE的模式将被创建,并加载AWR数据。AWR数据被加载到AWR_STAGE模式之后,数据将被转移到SYS模式下的AWR表中。
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Completed 113 CONSTRAINT objects in 11 seconds
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Completed 1 REF_CONSTRAINT objects in 1 seconds
Job "SYS"."SYS_IMPORT_FULL_03" successfully completed at 09:29:30
... Dropping AWR_STAGE user
End of AWR Load

2.5 使用自动负载信息库视图

通常情况下,使用Oracle企业管理器或AWR表报查看AWR数据。然而,你也可以使用以下的视图查看统计信息:

  • V$ACTIVE_SESSION_HISTORY
  • V$METRICGROUP 视图,提供度量数据跟踪系统性能
  • DBA_HIST视图

DBA_HIST视图显示数据库中保存的历史数据,包括以下几个视图组:

  • DBA_HIST_ACTIVE_SESS_HISTORY 限制最近活动系统的内存活动会话内容的历史信息
  • DBA_HIST_BASELINE 显示系统中捕获的基线信息
  • DBA_HIST_BASELINE_DETAILS 显示基线的详细信息
  • DBA_HIST_BASELINE_TEMPLATE 显示用于生成基线的基线模板信息
  • DBA_HIST_DATABASE_INSTANCE 显示数据库环境信息
  • DBA_HIST_SNAPSHOT 显示系统中的快照信息
  • DBA_HIST_SQL_PLAN 显示SQL执行计划
  • DBA_HIST_WR_CONTROL 显示AWR控制的设置信息

2.6 生成自动负载信息库报告

一个AWR报告显示两个快照(或两个时间点)之间的捕获数据,AWR报告分为多部分。HTML报告包含快速浏览章节的导航链接。该报告内容包含选定范围快照的系统负载概括。

2.6.1 生成快照范围的AWR报告

awrrpt.sql脚本生成一个HTML或文本格式的快照范围统计报告。

生成快照范围的AWR报告:

  1. 在SQL提示符下,输入
@$ORACLE_HOME/rdbms/admin/awrrpt.sql
  1. 指定HTML或文本报告
Enter value for report_type: html(可以输入html/text)
  1. 指定你要列出快照ID的天数
Enter value for num_days: 2
  1. 指定负载信息库报告的开始和结束快照ID
Enter value for begin_snap: 30
Enter value for end_snap: 40
  1. 输入报告名称,或者使用默认报告名称
Enter value for report_name:
Using the report name awrrpt_1_150_160

默认存储在SQLPLUS的当前目录中。如果想要存储在其他位置,则需要指定报告的绝对路径,

例如:

Enter value for report_name: D:\Chicle Data\awrrpt_1_150_160.html

2.6.2 生成指定实例快照范围的AWR报告

该awrrpti.sql脚本生成一个HTML或文本报告,显示指定数据库和实例的快照ID范围的统计信息。在输入快照范围ID之前,需要先指定数据库和实例。

生成指定实例快照范围的AWR报告:

1.在SQL提示符下,输入

@$ORACLE_HOME/rdbms/admin/awrrpti.sql

2.指定HTML或文本报表

Enter value for report_type: text

显示可用的数据库标识符和实例编号。

Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   DB Id    Inst Num DB Name      Instance     Host
----------- -------- ------------ ------------ ------------
 3309173529        1 MAIN         main         examp1690
 3309173529        1 TINT251      tint251      samp251
  1. 输入数据库标识符(dbid)和实例编号(inst_num)
Enter value for dbid: 3309173529
Using 3309173529 for database Id
Enter value for inst_num: 1
  1. 指定你要列出快照ID的天数
Enter value for num_days: 2
  1. 指定负载信息库报告的开始和结束快照ID
Enter value for begin_snap: 150
Enter value for end_snap: 160
  1. 输入报告名称,或者使用默认报告名称
Enter value for report_name:
Using the report name awrrpt_1_150_160

2.6.3 生成SQL语句的AWR报告

awrsqrpt.sql脚本生成一个HTML或文本报告,显示指定SQL语句的快照ID范围的统计信息。运行此报告,检查和调试SQL语句的性能。

生成SQL语句的AWR报告:

  1. 在SQL提示符下,输入
@$ORACLE_HOME/rdbms/admin/awrsqrpt.sql
  1. 指定HTML或文本报表
Enter value for report_type: html
  1. 指定你要列出快照ID的天数
Enter value for num_days: 1
  1. 指定负载信息库报告的开始和结束快照ID
Enter value for begin_snap: 146
Enter value for end_snap: 147
  1. 指定SQL语句的ID
Enter value for sql_id: 2b064ybzkwf1y
  1. 输入报告名称,或者使用默认报告名称
Enter value for report_name:
Using the report name awrrpt_1_146_147.html

2.6.4 其他AWR报告

类似的AWR报告还有好几个,生成的步骤也差不多,这里就不做详细的介绍:

  • 生成指定实例的SQL语句的AWR报告:
@$ORACLE_HOME/rdbms/admin/awrsqrpi.sql
  • 生成比较期间的AWR报告:
@$ORACLE_HOME/rdbms/admin/awrddrpt.sql
  • 生成指定实例比较期间的AWR报告:
@$ORACLE_HOME/rdbms/admin/awrddrpi.sql
  • 生成活动会话历史(ASH)的AWR报告:
@$ORACLE_HOME/rdbms/admin/ashrpt.sql
  • 生成指定实例的活动会话历史(ASH)的AWR报告:
@$ORACLE_HOME/rdbms/admin/ashrpti.sql
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,898评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,401评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,058评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,539评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,382评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,319评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,706评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,370评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,664评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,715评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,476评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,326评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,730评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,003评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,275评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,683评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,877评论 2 335

推荐阅读更多精彩内容