默认情况下,Oracle Database 每小时产生一次快照,并将统计信息在工作负载信息库中保留 8 天。如有必要,您可以使用 DBMS_WORKLOAD_REPOSITORY 包中的一些存储过程手动创建、删除和修改快照。要调用这些存储过程,用户必须授予 DBA 角色。
1、查看快照
1
2
3
4
5
6
7
|
03
:
27
:
55
SYS@ prod >select SNAP_ID,dbid,SNAP_LEVEL,BEGIN_INTERVAL_TIME
from
dba_hist_snapshot;
SNAP_ID DBID SNAP_LEVEL BEGIN_INTERVAL_TIME
---------- ---------- ---------- ------------------------------
117
219724276
1
04
-NOV
-14
02.02.
31.757
AM
114
219724276
1
04
-NOV
-14
01.29.
48.000
AM
115
219724276
1
04
-NOV
-14
01.41.
01.518
AM
116
219724276
1
04
-NOV
-14
02.01.
49.722
AM
|
2、手工创建快照
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
Syntax:
DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT
(flush_level IN VARCHAR2 DEFAULT
'TYPICAL'
);
flush_level 参数
Flush level 可以是
'TYPICAL'
或
'ALL'
03
:
28
:
22
SYS@ prod >exec dbms_workload_repository.create_snapshot();
PL/SQL procedure successfully completed.
03
:
32
:
27
SYS@ prod >select SNAP_ID,dbid,SNAP_LEVEL,BEGIN_INTERVAL_TIME
from
dba_hist_snapshot;
SNAP_ID DBID SNAP_LEVEL BEGIN_INTERVAL_TIME
---------- ---------- ---------- ------------------------------
117
219724276
1
04
-NOV
-14
02.02.
31.757
AM
118
219724276
1
04
-NOV
-14
03.00.
11.848
AM
114
219724276
1
04
-NOV
-14
01.29.
48.000
AM
115
219724276
1
04
-NOV
-14
01.41.
01.518
AM
116
219724276
1
04
-NOV
-14
02.01.
49.722
AM
|
OEM创建:
3、删除快照
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
您可以使用 DROP_SNAPSHOT_RANGE 存储过程删除个范围内的快照。要查看快照的 snap_id 和 数据库 ID 的列表,请查看 DBA_HIST_SNAPSHOT 视图。例如,您可以删除上例中 snap_id 小于
115
的快照:
Syntax:
DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(low_snap_id IN NUMBER,high_snap_id IN NUMBER dbid IN NUMBER DEFAULT NULL);
03
:
38
:
35
SYS@ prod >exec dbms_workload_repository.drop_snapshot_range(dbid=>
219724276
,low_snap_id=>
114
,high_snap_id =>
115
);
PL/SQL procedure successfully completed.
03
:
39
:
44
SYS@ prod >select SNAP_ID,dbid,SNAP_LEVEL,BEGIN_INTERVAL_TIME
from
dba_hist_snapshot;
SNAP_ID DBID SNAP_LEVEL BEGIN_INTERVAL_TIME
---------- ---------- ---------- ------------------------------
117
219724276
1
04
-NOV
-14
02.02.
31.757
AM
118
219724276
1
04
-NOV
-14
03.00.
11.848
AM
116
219724276
1
04
-NOV
-14
02.01.
49.722
AM
在调用 DROP_SNAPSHOT_RANGE 存储过程时,属于指定快照范围时间段的 Active Session History (ASH) 数据也将清除。
|
4、修改快照设置
对于指定的数据库 ID,您可以调整快照生成的时间间隔、保留期限和捕获的 Top SQL,但是请注意,这会影响 Oracle Database 诊断工具的精确性。
INTERVAL 设置影响数据库自动生成快照的频率。RETENTION 设置影响数据库在工作负载信息库中存储快照的时间。
TOPNSQL 设置影响针对每个 SQL 条件捕获的 Top SQL 的数量(Elapsed Time、CPU Time、Parse Calls、sharable Memory 和 Version Count)。
此设置的值不受 statistics_level 和 flush_level 的影响,将会覆盖系统 AWR SQL 收集的默认行为。可以讲次设置的值设置为 MAXIMUM 来捕获 shared SQL area 中的全部 SQL 集合,这么做(将此值设置为一个非常高的值)可能会导致一定的空间和性能问题,因为将会收集和存储更多的数据。要调整这些设置,请使用 MODIFY_SNAPSHOT_SETTING 存储过程。例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
Syntax:
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
retention IN NUMBER DEFAULT NULL,
interval IN NUMBER DEFAULT NULL,
topnsql IN NUMBER DEFAULT NULL,
dbid IN NUMBER DEFAULT NULL);
03
:
45
:
25
SYS@ prod >desc dba_hist_wr_control;
Name Null? Type
----------------------------------------------------------------- -------- --------------------------------------------
DBID NOT NULL NUMBER
SNAP_INTERVAL NOT NULL INTERVAL DAY(
5
) TO SECOND(
1
)
RETENTION NOT NULL INTERVAL DAY(
5
) TO SECOND(
1
)
TOPNSQL VARCHAR2(
10
)
03
:
44
:
18
SYS@ prod >col SNAP_INTERVAL
for
a20
03
:
44
:
40
SYS@ prod >col RETENTION
for
a30
03
:
45
:
25
SYS@ prod >select *
from
dba_hist_wr_control
DBID SNAP_INTERVAL RETENTION TOPNSQL
---------- -------------------- ------------------------------ ----------
219724276
+
00000
01
:
00
:
00.0
+
00008
00
:
00
:
00.0
DEFAULT
03
:
51
:
56
SYS@ prod >exec DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS( retention =>
43200
,interval =>
30
, topnsql =>
100
, dbid =>
219724276
);
PL/SQL procedure successfully completed.
在本例中,快照的保留期限将设置为
43200
分钟(
30
天),快照间隔指定未
30
分钟,每个 SQL 条件的 Top SQL 数量指定为
100
。如果指定未 NULL,则将保留现有设置。dbid 可选。如果您不指定dbid,则将使用本地数据库标示符作为默认值。您可以通过 DBA_HIST_WR_CONTROL视图查看数据库实例的当前默认值。
03
:
52
:
18
SYS@ prod >col SNAP_INTERVAL
for
a20
03
:
52
:
52
SYS@ prod >col RETENTION
for
a30
03
:
52
:
59
SYS@ prod >select *
from
dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL
---------- -------------------- ------------------------------ ----------
219724276
+
00000
00
:
30
:
00.0
+
00030
00
:
00
:
00.0
100
|
5、AWR相关视图
Oracle AWR Views
The following workload repository views are available:
V$ACTIVE_SESSION_HISTORY - Displays the active session history (ASH) sampled every second.
V$METRIC - Displays metric information.
V$METRICNAME - Displays the metrics associated with each metric group.
V$METRIC_HISTORY - Displays historical metrics.
V$METRICGROUP - Displays all metrics groups.
DBA_HIST_ACTIVE_SESS_HISTORY - Displays the history contents of the active session history.
DBA_HIST_BASELINE - Displays baseline information.
DBA_HIST_DATABASE_INSTANCE - Displays database environment information.
DBA_HIST_SNAPSHOT - Displays snapshot information.
DBA_HIST_SQL_PLAN - Displays SQL execution plans.
DBA_HIST_WR_CONTROL - Displays AWR settings.
六、AWR 报告分析
SQL ordered by Elapsed Time
记录了执行总和时间的TOP SQL(请注意是监控范围内该SQL的执行时间总和,而不是单次SQL执行时间 Elapsed Time = CPU Time + Wait Time)。
Elapsed Time(S): SQL语句执行用总时长,此排序就是按照这个字段进行的。注意该时间不是单个SQL跑的时间,而是监控范围内SQL执行次数的总和时间。单位时间为秒。Elapsed Time = CPU Time + Wait Time
CPU Time(s): 为SQL语句执行时CPU占用时间总时长,此时间会小于等于Elapsed Time时间。单位时间为秒。
Executions: SQL语句在监控范围内的执行次数总计。
Elap per Exec(s): 执行一次SQL的平均时间。单位时间为秒。
% Total DB Time: 为SQL的Elapsed Time时间占数据库总时间的百分比。
SQL ID: SQL语句的ID编号,点击之后就能导航到下边的SQL详细列表中,点击IE的返回可以回到当前SQL ID的地方。
SQL Module: 显示该SQL是用什么方式连接到数据库执行的,如果是用SQL*Plus或者PL/SQL链接上来的那基本上都是有人在调试程序。一般用前台应用链接过来执行的sql该位置为空。
SQL Text: 简单的sql提示,详细的需要点击SQL ID。
SQL ordered by CPU Time:
记录了执行占CPU时间总和时间最长的TOP SQL(请注意是监控范围内该SQL的执行占CPU时间总和,而不是单次SQL执行时间)。
SQL ordered by Gets:
记录了执行占总buffer gets(逻辑IO)的TOP SQL(请注意是监控范围内该SQL的执行占Gets总和,而不是单次SQL执行所占的Gets)。
SQL ordered by Reads:
记录了执行占总磁盘物理读(物理IO)的TOP SQL(请注意是监控范围内该SQL的执行占磁盘物理读总和,而不是单次SQL执行所占的磁盘物理读)
SQL ordered by Executions:
记录了按照SQL的执行次数排序的TOP SQL。该排序可以看出监控范围内的SQL执行次数。
SQL ordered by Parse Calls:
记录了SQL的软解析次数的TOP SQL。说到软解析(soft prase)和硬解析(hard prase),就不能不说一下Oracle对sql的处理过程。
SQL ordered by Sharable Memory:
记录了SQL占用library cache的大小的TOP SQL。Sharable Mem (b):占用library cache的大小,单位是byte。
SQL ordered by Version Count:
记录了SQL的打开子游标的TOP SQL。
SQL ordered by Cluster Wait Time:
记录了集群的等待时间的TOP SQL。