一 管理快照
默认情况下,Oracle数据库每小时产生一次快照,并把这些统计信息保存在负载信息库8天。可以使用OEM管理快照,也可以使用DBMS_WORKLOAD_REPOSITORY手动创建、删除和修改快照,调用此过程,需要DBA角色。
1、创建快照
可以使用下面的过程手动创建快照,如下:
BEGIN
dbms_workload_repository.create_snapshot();
END;
可以通过视图Dba_Hist_Snapshot查看快照信息。
2、删除快照
删除快照后,属于该快照区间的ASH信息也将会被清除,可以通过视图Dba_Hist_Ash_Snapshot查看ASH信息,删除快照如下:
BEGIN
dbms_workload_repository.drop_snapshot_range(low_snap_id => 6900,
high_snap_id => 6906);
END;
3、修改快照设置
可以通过调整快照产生的间隔、保留时间,并捕获指定数据库ID的快照生成的TOP SQL,需要注意的是,这种操作可能会影响数据库诊断工具的精确度。可以通过视图Dba_Hist_Wr_Control查看快照的设置信息。
INTERVAL设置影响数据库自动产生快照的频率,RETENTION设置影响数据库存储快照的时间,TOPNSQL设置影响TOP SQL的数量。可以通过如下过程修改快照设置:
BEGIN
dbms_workload_repository.modify_snapshot_settings(retention => 14400,
INTERVAL => 30,
topnsql => 100);
END;
二 管理基线
1、创建基线
创建基线需要利用快照信息,具体可查视图Dba_Hist_Snapshot,可从视图Dba_Hist_Baseline查看已经创建的基线,利用过程创建基线如下:
BEGIN
dbms_workload_repository.create_baseline(start_snap_id =>6922,
end_snap_id =>6930,
baseline_name =>'baseline_test',
expiration =>30);
END;
注:expiration不指定,则该基线永不过期,上例指定为30,则30天后会过期,并自动删除;
2、删除基线
BEGIN
dbms_workload_repository.drop_baseline(baseline_name => 'baseline_test',
cascade => TRUE);
END;
注:cascade 为FALSE,则只删除基线内容,若为TRUE,则删除基线的同时,会删除与其相关联的快照。
3、重命名基线
BEGIN
dbms_workload_repository.rename_baseline(old_baseline_name =>'BL_Test',
new_baseline_name =>'New_Baseline_test');
END;
4、展示基线指标
SELECT dbms_workload_repository.select_baseline_metric(l_baseline_name => 'New_Baseline_test',
l_dbid => 1459390975,
l_instance_num => '1')
FROM dual
5、修改默认移动窗口基线的窗口大小
BEGIN
dbms_workload_repository.modify_baseline_window_size(window_size => 10,
dbid => 1459390975);
END;
注:window_size 指定移动窗口的大小,以天为单位,该窗口大小必须设置为等于或小于AWR保留时间。
三 管理基线模板
1、创建单个基线模板
BEGIN
dbms_workload_repository.create_baseline_template(start_time => to_date('2017-11-16 14:00:00',
'yyyy-mm-dd hh24:mi:ss'),
end_time => to_date('2017-11-16 14:30:00',
'yyyy-mm-dd hh24:mi:ss'),
baseline_name => 'baseline_07116',
template_name => 'template_07116',
expiration => 30,
dbid => 1459390975);
END;
2、创建重复的基线模板
重复的基线模板能够用来在将来特定的时期内特定的时间间隔自动创建基线。
BEGIN
dbms_workload_repository.create_baseline_template(day_of_week =>'ALL',
hour_in_day =>8,
duration =>3,
start_time =>TRUNC(SYSDATE),
end_time =>TRUNC(SYSDATE)+300,
baseline_name_prefix =>'Alen_BL_',
template_name =>'Alen_Test_repeat',
expiration =>30,
dbid =>1459390975);
END;
3、删除基线模板
可以通过视图Dba_Hist_Baseline_Template查看基线模板的信息,然后选择需要删除的基线模板进行删除;
BEGIN
dbms_workload_repository.drop_baseline_template(template_name => 'template_07116',
dbid => 1459390975);
END;
四 传输AWR数据
Oracle数据库能在系统之间传输AWR数据,这在需要进行单独分析AWR数据时很有帮助,传输AWR数据,必须首先从源系统提取AWR快照数据,然后加载到目标系统。
1、提取AWR数据
1)在Oracle Home目录执行下面的脚本:
SQL> @awrextr.sql
2)指定需提取AWR的数据库ID,默认即可:
Enter value for dbid:
Using 1459390975 for Database ID
3)指定需要显示的AWR的天数回车后,会出现相应天数的快照:
Enter value for num_days: 2
4)选择快照区间:
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 6910
Begin Snapshot Id specified: 6910
Enter value for end_snap: 6919
End Snapshot Id specified: 6919
5)选择目录对象:
Enter value for directory_name: DATA_PUMP_DIR
6)指定生成的文件名称,回车后会生成对应的文件,然后通过DATA PUMP传输文件到另一系统:
Enter value for file_name: awr_data_10_19
Using the dump file prefix: awr_data_10_19
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| The AWR extract dump file will be located
| in the following directory/file:
| E:appalen.liuadminorcldpdump
| awr_data_10_19.dmp
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
| *** AWR Extract Started ...
|
| This operation will take a few moments. The
| progress of the AWR extract operation can be
| monitored in the following directory/file:
| E:appalen.liuadminorcldpdump
| awr_data_10_19.log
|
End of AWR Extract
2、加载AWR数据
导出的文件传输到目标系统后,使用awrload.sql脚本进行加载。首先会创建一个staging schema,用来存放从Data Pump文件传输到数据库的快照数据,然后快照数据从staging schema传输到合适的AWR表,运行此脚本,需要使用SYS用户。
五 使用AWR视图
1、v$active_session_history
2、V$度量视图提供度量数据来追踪系统性能,v$metricgroup。
3、DBA_HIST视图,用来显示存储在数据库的历史信息。
Dba_Hist_Active_Sess_History:显示系统活动最近的会话历史的信息;
dba_hist_baseline:显示系统捕获的基线信息;
dba_hist_baseline_details:显示特定基线的详细信息;
Dba_Hist_Baseline_Template:显示系统用来产生基线的基线模板信息;
dba_hist_database_instance:显示数据库环境的信息;
Dba_Hist_Db_Cache_Advice:显示缓冲区历史的预测的物理读数量;
Dba_Hist_Dispatcher:显示每一个分发器进程的历史信息;
dba_hist_dyn_remaster_stats:显示动态remastering进程的静态信息;
Dba_Hist_Iostat_Detail:显示按文件类型和功能汇总的I/O统计的历史信息;
Dba_Hist_Shared_Server_Summary:显示共享服务器的历史信息;
Dba_Hist_Snapshot:显示快照信息;
dba_hist_sql_plan:显示SQL执行计划的信息;
Dba_Hist_Wr_Control:显示AWR的配置信息。
六 生成AWR报告
AWR报告显示在两个快照(或者两个时间点)之间捕获的数据,它分割为多个部分,可以以文本形式存在,也可以以HTML形式存在。AWR报告可以使用OEM产生,也可以使用脚本产生,使用脚本是需要授予DBA角色,下面将具体讲解以脚本生成AWR报告内容。
1、生成AWR报告
方法一:
使用awrrpt.sql脚本生成HTML或文本型的报告来展示一系列快照ID的统计信息。
方法二:
使用过程生成。
SELECT dbms_workload_repository.awr_report_html(l_dbid => 1459390975,
l_inst_num => 1,
l_bid => 6960,
l_eid => 6965)
FROM dual
2、为某个SQL语句生成快照
使用脚本awrsqrpt.sql生成,也可以使用过程生成报告。
七 生成AWR比较报告
AWR报告是显示两个快照或者两个时间点的AWR数据,而AWR比较报告则显示两个时间区间的报告(或者两个AWR报告,意味着4个快照)的不同。使用AWR比较报告可以帮助你识别两个时间区间的不同的详细的性能属性和配置设置。可以使用OEM生成比较报告,也可以使用脚本生成,使用脚本时需要使用DBA角色。
1、生成AWR比较报告
方法一:
使用awrddrpt.sql脚本生成HTML或文本型比较报告。
方法二:
使用过程生成报告。
SELECT dbms_workload_repository.awr_diff_report_html(dbid1 => 1459390975,
inst_num1 => 1,
bid1 => 6944,
eid1 => 6946,
dbid2 => 1459390975,
inst_num2 => 1,
bid2 => 6968,
eid2 => 6970)
FROM dual
八 生成ASH报告
使用ASH报告可以分析:
- 持续几分钟的短暂的性能问题
- 按不同维度或者其组合(例如时间、会话、模块,操作或sql_id)进行范围或目标的性能分析。
短暂的性能问题持续时间比较短,不会出现在ADDM分析中。在分析期间,ADDM尝试报告对DB时间影响的最重要的性能问题。如果一个特定问题持续时间很短,那么,它的严重性可能在分析期间被其他性能问题被平均或者最小化,因此,问题可能不会出现在ADDM发现中。一个性能问题是否被ADDM捕获取决于与AWR快照之间的间隔相比它的持续时间。
1、生成ASH报告
方法一:
使用ashrpt.sql脚本生成。
方法二:
使用过程生成。
SELECT dbms_workload_repository.ash_report_html(l_dbid => 1459390975,
l_inst_num => 1,
l_btime => to_date('2017-11-17 9:00:00',
'yyyy-mm-dd hh24:mi:ss'),
l_etime => to_date('2017-11-17 10:00:00',
'yyyy-mm-dd hh24:mi:ss'))
FROM dual
参考:官方文档