oracle10gAWR基本管理
2013-04-15 18:20
309 查看
高峰时段压力=DB Time/Elapsed/CPU数
手动执行
SQL>exec dbms_workload_repository.create_snapshot;
$@?/rdbms/admin/awrrpt.sql 单实例
$@?/rdbms/admin/awrrpti.sql RAC
DBA 可以容易地获知最近数据库的活动状态,数据库的各种性能指标的变化趋势曲线,最近数据库可能存在的异常,分析数据库可能存在的性能瓶颈从而对数据库进行优化。
一、概述
awr(Automatic Workload Repository)是oracle 10g推出的一个强有力的信息收集工具,它比之前的statspack有显著的改进,收集的信息也更多、更全面,使用方法也更简单。
二、安装
awr是默认安装的,装好了10g的数据库就已经可以使用awr了。
三、配置
awr默认每个小时收集一次统计信息,并且保留7天的数据。awr配置信息可以从以下视图查询:
SQL> select * from dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL
---------- ---------------------------- ----------------------- ----------
3939087858 +00000 00:10:00.0 +00002 00:00:00.0 DEFAULT
awr与statspack不同,它不是由job来调度的,而是由MMON来定期收集的。
SQL> show parameter job
NAME TYPE VALUE
-------------------------- ----------- --------------------
job_queue_processes integer 10
SQL> select count(1) from dba_jobs;
COUNT(1)
----------
0
我们可以用dbms_workload_repository.modify_snapshot_settings来修改默认配置
SQL> desc dbms_workload_repository.modify_snapshot_settings
Parameter Type Mode Default?
--------- -------- ---- --------
RETENTION NUMBER IN Y --设定awr信息保留多长时间,单位是分钟,默认是60分钟
INTERVAL NUMBER IN Y --设定收集时间间隔,单位是分钟,默认是1周
TOPNSQL NUMBER IN Y --设定取多少条耗费资源的sql
DBID NUMBER IN Y
如把awr设置为10分钟收集一次、每次收集50条耗费资源的sql,并保留2天的收集数据,可以用如下方式修改
SQL> exec dbms_workload_repository.modify_snapshot_settings(2*24*60,10,50);
PL/SQL procedure successfully completed
可以看出配置已经改变
SQL> select * from dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL
---------- -------------------------- ----------------------- ----------
3939087858 +00000 00:10:00.0 +00002 00:00:00.0 50
四、生成报表
1、调用脚本
和statspack一样,awr也提供一个脚本来生成报表。报表的形式有两种:text和html。强烈建议生成html格式的报表,可读性非常强。
脚本位置和名称:$ORACLE_HOME/rdbms/admin/awrrpt.sql
用脚本生成awr报表的过程与生成statspack报表非常类似,你需要以sys用户执行这个脚本,执行过程需要输入报表类型、天数(用来决定显示那几天内的snapshot)、begin_snap、end_snap、以及报表名称等5个参数。
如果不不想手工输入参数,你可以修改$ORACLE_HOME/rdbms/admin/awrrpti.sql文件,把需要到的5个变量设置好,在执行过程就不用输入了。
修改awrrpti这个脚本可以让你自动生成报表。
2、直接用函数
oracle提供2个函数来生成对应的报表:
DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT :生成text报表
DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML :生成html报表
比如:
--获得普通文本格式的awr报告输出
SQL> SELECT output FROM table (DBMS_WORKLOAD_REPOSITORY.awr_report_text (262089084, 1, 2529, 2696, 0));
SELECT output FROM table (DBMS_WORKLOAD_REPOSITORY.awr_report_text (4076803828, 1, 1091, 1258, 0));
然后把输出内容拷贝到某个文件,并命名为xxx.txt即可。
--获得超文本格式的awr报告输出
SQL> SELECT output FROM table (DBMS_WORKLOAD_REPOSITORY.awr_report_html (262089084, 1, 2529, 2696, 0));
然后把输出内容拷贝到某个文件,并命名为xxx.html即可。
desc DBMS_WORKLOAD_REPOSITORY
FUNCTION AWR_REPORT_HTML RETURNS AWRRPT_HTML_TYPE_TABLE
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
L_DBID NUMBER IN
L_INST_NUM NUMBER IN
L_BID NUMBER IN
L_EID NUMBER IN
L_OPTIONS NUMBER IN DEFAULT
其实$ORACLE_HOME/rdbms/admin/awrrpt.sql就是通过调用以上两个函数来生成报表的。
--先获得7天内dbid,实例号,开始快照id,结束快照id
SELECT dbid, instance_number,
MIN (snap_id) begin_snap_id,
MAX (snap_id) end_snap_id
FROM dba_hist_snapshot
WHERE end_interval_time >= SYSDATE - 7
GROUP BY dbid, instance_number;
DBID INSTANCE_NUMBER BEGIN_SNAP_ID END_SNAP_ID
---------- --------------- ------------- -----------
262089084 1 2529 2696
-- Author : DR Timothy S Hall
-- Description : Generates AWR reports for all snapsots between the specified start and end point.
-- Requirements : Access to the v$ views, UTL_FILE and DBMS_WORKLOAD_REPOSITORY packages.
-- Call Syntax : Create the directory with the appropriate path.
-- Adjust the start and end snapshots as required.
-- @generate_multiple_awr_reports.sql
-- Last Modified: 02/08/2007
-- -----------------------------------------------------------------------------------
CREATE OR REPLACE DIRECTORY awr_reports_dir AS '/tmp/';
DECLARE
-- Adjust before use.
l_snap_start NUMBER := 1;
l_snap_end NUMBER := 10;
l_dir VARCHAR2(50) := 'AWR_REPORTS_DIR';
l_last_snap NUMBER := NULL;
l_dbid v$database.dbid%TYPE;
l_instance_number v$instance.instance_number%TYPE;
l_file UTL_FILE.file_type;
l_file_name VARCHAR(50);
BEGIN
SELECT dbid
INTO l_dbid
FROM v$database;
SELECT instance_number
INTO l_instance_number
FROM v$instance;
FOR cur_snap IN (SELECT snap_id
FROM dba_hist_snapshot
WHERE instance_number = l_instance_number
AND snap_id BETWEEN l_snap_start AND l_snap_end
ORDER BY snap_id)
LOOP
IF l_last_snap IS NOT NULL THEN
l_file := UTL_FILE.fopen(l_dir, 'awr_' || l_last_snap || '_' || cur_snap.snap_id || '.htm', 'w', 32767);
FOR cur_rep IN (SELECT output
FROM TABLE(DBMS_WORKLOAD_REPOSITORY.awr_report_html(l_dbid, l_instance_number, l_last_snap, cur_snap.snap_id)))
LOOP
UTL_FILE.put_line(l_file, cur_rep.output);
END LOOP;
UTL_FILE.fclose(l_file);
END IF;
l_last_snap := cur_snap.snap_id;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
IF UTL_FILE.is_open(l_file) THEN
UTL_FILE.fclose(l_file);
END IF;
RAISE;
END;
/
手动执行
SQL>exec dbms_workload_repository.create_snapshot;
$@?/rdbms/admin/awrrpt.sql 单实例
$@?/rdbms/admin/awrrpti.sql RAC
DBA 可以容易地获知最近数据库的活动状态,数据库的各种性能指标的变化趋势曲线,最近数据库可能存在的异常,分析数据库可能存在的性能瓶颈从而对数据库进行优化。
一、概述
awr(Automatic Workload Repository)是oracle 10g推出的一个强有力的信息收集工具,它比之前的statspack有显著的改进,收集的信息也更多、更全面,使用方法也更简单。
二、安装
awr是默认安装的,装好了10g的数据库就已经可以使用awr了。
三、配置
awr默认每个小时收集一次统计信息,并且保留7天的数据。awr配置信息可以从以下视图查询:
SQL> select * from dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL
---------- ---------------------------- ----------------------- ----------
3939087858 +00000 00:10:00.0 +00002 00:00:00.0 DEFAULT
awr与statspack不同,它不是由job来调度的,而是由MMON来定期收集的。
SQL> show parameter job
NAME TYPE VALUE
-------------------------- ----------- --------------------
job_queue_processes integer 10
SQL> select count(1) from dba_jobs;
COUNT(1)
----------
0
我们可以用dbms_workload_repository.modify_snapshot_settings来修改默认配置
SQL> desc dbms_workload_repository.modify_snapshot_settings
Parameter Type Mode Default?
--------- -------- ---- --------
RETENTION NUMBER IN Y --设定awr信息保留多长时间,单位是分钟,默认是60分钟
INTERVAL NUMBER IN Y --设定收集时间间隔,单位是分钟,默认是1周
TOPNSQL NUMBER IN Y --设定取多少条耗费资源的sql
DBID NUMBER IN Y
如把awr设置为10分钟收集一次、每次收集50条耗费资源的sql,并保留2天的收集数据,可以用如下方式修改
SQL> exec dbms_workload_repository.modify_snapshot_settings(2*24*60,10,50);
PL/SQL procedure successfully completed
可以看出配置已经改变
SQL> select * from dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL
---------- -------------------------- ----------------------- ----------
3939087858 +00000 00:10:00.0 +00002 00:00:00.0 50
四、生成报表
1、调用脚本
和statspack一样,awr也提供一个脚本来生成报表。报表的形式有两种:text和html。强烈建议生成html格式的报表,可读性非常强。
脚本位置和名称:$ORACLE_HOME/rdbms/admin/awrrpt.sql
用脚本生成awr报表的过程与生成statspack报表非常类似,你需要以sys用户执行这个脚本,执行过程需要输入报表类型、天数(用来决定显示那几天内的snapshot)、begin_snap、end_snap、以及报表名称等5个参数。
如果不不想手工输入参数,你可以修改$ORACLE_HOME/rdbms/admin/awrrpti.sql文件,把需要到的5个变量设置好,在执行过程就不用输入了。
修改awrrpti这个脚本可以让你自动生成报表。
2、直接用函数
oracle提供2个函数来生成对应的报表:
DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT :生成text报表
DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML :生成html报表
比如:
--获得普通文本格式的awr报告输出
SQL> SELECT output FROM table (DBMS_WORKLOAD_REPOSITORY.awr_report_text (262089084, 1, 2529, 2696, 0));
SELECT output FROM table (DBMS_WORKLOAD_REPOSITORY.awr_report_text (4076803828, 1, 1091, 1258, 0));
然后把输出内容拷贝到某个文件,并命名为xxx.txt即可。
--获得超文本格式的awr报告输出
SQL> SELECT output FROM table (DBMS_WORKLOAD_REPOSITORY.awr_report_html (262089084, 1, 2529, 2696, 0));
然后把输出内容拷贝到某个文件,并命名为xxx.html即可。
desc DBMS_WORKLOAD_REPOSITORY
FUNCTION AWR_REPORT_HTML RETURNS AWRRPT_HTML_TYPE_TABLE
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
L_DBID NUMBER IN
L_INST_NUM NUMBER IN
L_BID NUMBER IN
L_EID NUMBER IN
L_OPTIONS NUMBER IN DEFAULT
其实$ORACLE_HOME/rdbms/admin/awrrpt.sql就是通过调用以上两个函数来生成报表的。
--先获得7天内dbid,实例号,开始快照id,结束快照id
SELECT dbid, instance_number,
MIN (snap_id) begin_snap_id,
MAX (snap_id) end_snap_id
FROM dba_hist_snapshot
WHERE end_interval_time >= SYSDATE - 7
GROUP BY dbid, instance_number;
DBID INSTANCE_NUMBER BEGIN_SNAP_ID END_SNAP_ID
---------- --------------- ------------- -----------
262089084 1 2529 2696
-- Author : DR Timothy S Hall
-- Description : Generates AWR reports for all snapsots between the specified start and end point.
-- Requirements : Access to the v$ views, UTL_FILE and DBMS_WORKLOAD_REPOSITORY packages.
-- Call Syntax : Create the directory with the appropriate path.
-- Adjust the start and end snapshots as required.
-- @generate_multiple_awr_reports.sql
-- Last Modified: 02/08/2007
-- -----------------------------------------------------------------------------------
CREATE OR REPLACE DIRECTORY awr_reports_dir AS '/tmp/';
DECLARE
-- Adjust before use.
l_snap_start NUMBER := 1;
l_snap_end NUMBER := 10;
l_dir VARCHAR2(50) := 'AWR_REPORTS_DIR';
l_last_snap NUMBER := NULL;
l_dbid v$database.dbid%TYPE;
l_instance_number v$instance.instance_number%TYPE;
l_file UTL_FILE.file_type;
l_file_name VARCHAR(50);
BEGIN
SELECT dbid
INTO l_dbid
FROM v$database;
SELECT instance_number
INTO l_instance_number
FROM v$instance;
FOR cur_snap IN (SELECT snap_id
FROM dba_hist_snapshot
WHERE instance_number = l_instance_number
AND snap_id BETWEEN l_snap_start AND l_snap_end
ORDER BY snap_id)
LOOP
IF l_last_snap IS NOT NULL THEN
l_file := UTL_FILE.fopen(l_dir, 'awr_' || l_last_snap || '_' || cur_snap.snap_id || '.htm', 'w', 32767);
FOR cur_rep IN (SELECT output
FROM TABLE(DBMS_WORKLOAD_REPOSITORY.awr_report_html(l_dbid, l_instance_number, l_last_snap, cur_snap.snap_id)))
LOOP
UTL_FILE.put_line(l_file, cur_rep.output);
END LOOP;
UTL_FILE.fclose(l_file);
END IF;
l_last_snap := cur_snap.snap_id;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
IF UTL_FILE.is_open(l_file) THEN
UTL_FILE.fclose(l_file);
END IF;
RAISE;
END;
/
相关文章推荐
- oracle 基本管理
- oracle基础知识-基本管理操作(登录、归档)
- Oracle 帐号基本管理
- Oracle系统管理和系统资料获取的一些基本命令
- oracle基本管理(3)
- ORACLE 10g常用管理工具和基本操作(第二次上机)
- Oracle:基本asm管理
- oracle基本管理(4)
- Oracle 帐号基本管理
- Oracle帐号基本管理
- ORACLE基本命令及用户管理
- Oracle 帐号基本管理
- oracle基本权限的管理
- Oracle教程之管理索引(二)--Oracle管理索引基本概念
- oracle基本语句(第七章、数据库逻辑对象管理)
- 源码-Oracle数据库管理-第九章-SQL查询-Part 2(基本查询)
- Oracle 帐号基本管理
- oracle基本语句(第四章、数据库安全管理)
- Oracle帐号基本管理
- Oracle 帐号基本管理