10G之前的一些情况:用户的连接将产生会话,当前会话记录保存在V$SESSION中;处于等待状态的会话会被复制一份放在v$session_wait中。当该连接断开后,其原来的连接信息在V$SESSION和V$SESSION_WAIT中就会被删除。
10G或以后:出现一个新的视图,v$session_wait_history 这个视图保存了每个活动SESSION在V$SESSION_WAIT中最近10次的等待事件,但这对于一段时期内的数据库性能状况的监测是远远不够的,为了解决这个问题,在10G中还新添加了一个视图:v$active_session_history。这就是ASH(active session history)。ASH的策略是每秒从v$session中每秒进行采样一次,并将采样信息保存在内存中,采样只针对active的session和等待非空闲的SESSION。
AWR
ASH的采样数据是保存在内存中的,而分配给ASH的内存空间是有限的,当所分配空间占满后,旧的记录就会被覆盖掉;而且数据库重启后,所有的这些ASM信息都会消息。这样,对于长期检测ORACLE 的性能是不可能的。在ORACLE 10G 中,提供了永久保留ASH信息的方法,这就是AWR。
由于全部保存ASH中的信息是非常耗费时间和空间的,AWR 用的策略是:每小时对v$active_session_history进行采样一次,并将信息保存到磁盘中,并且保留七天,七天后旧的记录才会被覆盖。这些采样信息被保存在视图wrh$_active_session_history中。策略:每一个小时一次,保留七天时间。这个是可以调整的。
管理包:dbms_workload_repository
小结: ASH 保存了系统最新的处于等待的会话记录,可以用来诊断数据库的当前状态;而AWR中的信息最长可能有1个小时的延迟,所以其采样信息并不能用于诊断数据库的当前状态,但可以用来作为一段时期内数据库性能调整的参考。
视图间的继承关系:
v$session
v$session_wait v$active_session_history
v$session_wait_history wrh$_active_session_history
dba_hist_active_sess_history
其中视图dba_hist_active_sess_history 是wrh$_active_session_history和其他几个视图的联合展现,通常通过这个视图进行历史数据的访问。
AWR:
1. ASH 占用的内存大小
select pool, name, bytes/1024/1024 from v$sgastat where name like'%ASH%';
POOL NAME BYTES/1024/1024
------------ -------------------------- ---------------
shared pool ASH buffers 4
2.ASH 中的信息被保存到了AWR 的视图wrh$_active_session_history中。ASH是AWR 的真子集。
3.mmon进程与 mmnl进程。
快照由一个称为MMON 的新的后台进程(及其从进程)以及MMNL 后台进程自动地每隔固定时间采样一次。
MMON进程负载执行多种和管理相关的后台任务:
当某个测量值超过了预设的限定值后提交警告。
创建新的MMON 隶属进程(MMON) 来进行快照。
捕获最近修改的SQL 对象的统计信息
MMNL 进程负责执行轻量级的且频率较高的和可管理性相关的后台任务,例如捕获会话历史信息,测量值计算等。
AWR 的采样工作由MMON进程每个小时执行一次,ASH信息同样会被采样写出到AWR负载库中。虽然ASH BUFFER被设计为保留1小时的信息,但很多时候这个内存是不够的,当ASH BUFFER 写满后,另外一个后台进程MMNL将会主动将ASH信息写出。
4.SYSAUX表空间。
这些采样数据都存储在SYSAUX表空间中,并且以WRM$_* 和 WRH$_* 的格式命名。前一种类型存储元数据信息(如检查的数据库和采集的快照),后一种类型保存实际采集的统计数据。
手动生成SNAP_ID
exec dbms_workload_repository.create_snapshot();
注意: AWR的一次报告中的SNAP_ID是不能够跨重启数据库的。
2.脚本准备:
2.1 sql 脚本准备:
conn xbrlsystem/xbrlsystem@67;
set echo off;
set veri off;
set feedback off;
set termout on;
set heading off;
variable rpt_options number;
define NO_OPTIONS = 0;
define ENABLE_ADDM = 8;
-- according to your needs, the value can be 'text' or 'html'
define report_type='html';
begin
:rpt_options := &NO_OPTIONS;
end;
/
variable dbid number;
variable inst_num number;
variable bid number;
variable eid number;
begin
select max(snap_id)-48 into :bid from dba_hist_snapshot;
select max(snap_id) into :eid from dba_hist_snapshot;
select dbid into :dbid from v$database;
select instance_number into :inst_num from v$instance;
end;
/
column ext new_value ext noprint
column fn_name new_value fn_name noprint;
column lnsz new_value lnsz noprint;
--select 'txt' ext from dual where lower('&report_type') = 'text';
select 'html' ext from dual where lower('&report_type') = 'html';
--select 'awr_report_text' fn_name from dual where lower('&report_type') = 'text';
select 'awr_report_html' fn_name from dual where lower('&report_type') = 'html';
--select '80' lnsz from dual where lower('&report_type') = 'text';
select '1500' lnsz from dual where lower('&report_type') = 'html';
set linesize &lnsz;
-- print the AWR results into the report_name file using the spool command:
column report_name new_value report_name noprint;
select 'awr'||'.'||'&ext' report_name from dual;
set termout off;
spool &report_name;
select output from table(dbms_workload_repository.&fn_name(:dbid, :inst_num,:bid, :eid,:rpt_options ));
spool off;
set termout on;
clear columns sql;
ttitle off;
btitle off;
repfooter off;
undefine report_name
undefine report_type
undefine fn_name
undefine lnsz
undefine NO_OPTIONS
exit
2.2 PYTHON 脚本准备:
#!/usr/bin/python
#coding=gbk
#created by tianlesoftware
#2011-4-12
import os
import sys
import smtplib
import pickle
import mimetypes
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage
from email.MIMEMultipart import MIMEMultipart
SMTP_SERVER='smtp.mail.yahoo.com.cn'
EMAIL_USER='wshxgdan@yahoo.cn'
EMAIL_PASSWD='wshxgxiaoli32105'
EMAIL_SUBJECT='performance report for dg'
FROM_USER='wshxgdan@yahoo.cn'
TO_USERS=['408673035@qq.com','zhangys@gtadata.com']
def createawr():
pipe = os.popen(' C:\Ora10InstantClient\sqlplus /nolog @myawrrpt.sql')
def mysendmail(fromaddr,toaddrs,subject):
COMMASPACE=','
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = COMMASPACE.join(toaddrs)
msg['Subject'] = subject
txt = MIMEText("performance report for dg ")
msg.attach(txt)
fileName = r'awr.html'
ctype, encoding = mimetypes.guess_type(fileName)
if ctype is None or encoding is not None:
ctype = 'application/octet-stream'
maintype, subtype = ctype.split('/', 1)
att = MIMEImage((lambda f: (f.read(), f.close()))(open(fileName, 'rb'))[0], _subtype = subtype)
att.add_header('Content-Disposition', 'attachment', filename = fileName)
msg.attach(att)
server=smtplib.SMTP(SMTP_SERVER)
server.login(EMAIL_USER,EMAIL_PASSWD)
server.sendmail(fromaddr,toaddrs,msg.as_string())
server.quit()
if __name__=='__main__':
createawr()
mysendmail(FROM_USER, TO_USERS, EMAIL_SUBJECT)
print 'send successful'
注: 上面的空行一定要要, 不能省去,另外PYTHON移植性不是很好, 在WINDOWS转到LINUX下要注意空格及空行还有制表符。而且要同版本PYTHON,要不然你将会面临跟我一样的过失, 一个空格整了一个上午。这就是很悲剧的事了。
执行:createSendAWR.py > createSendAWR.log 2>&1
就会生成报告了。
另注: 本文整理来源:http://blog.csdn.net/tianlesoftware/article/details/6319198
10G或以后:出现一个新的视图,v$session_wait_history 这个视图保存了每个活动SESSION在V$SESSION_WAIT中最近10次的等待事件,但这对于一段时期内的数据库性能状况的监测是远远不够的,为了解决这个问题,在10G中还新添加了一个视图:v$active_session_history。这就是ASH(active session history)。ASH的策略是每秒从v$session中每秒进行采样一次,并将采样信息保存在内存中,采样只针对active的session和等待非空闲的SESSION。
AWR
ASH的采样数据是保存在内存中的,而分配给ASH的内存空间是有限的,当所分配空间占满后,旧的记录就会被覆盖掉;而且数据库重启后,所有的这些ASM信息都会消息。这样,对于长期检测ORACLE 的性能是不可能的。在ORACLE 10G 中,提供了永久保留ASH信息的方法,这就是AWR。
由于全部保存ASH中的信息是非常耗费时间和空间的,AWR 用的策略是:每小时对v$active_session_history进行采样一次,并将信息保存到磁盘中,并且保留七天,七天后旧的记录才会被覆盖。这些采样信息被保存在视图wrh$_active_session_history中。策略:每一个小时一次,保留七天时间。这个是可以调整的。
管理包:dbms_workload_repository
小结: ASH 保存了系统最新的处于等待的会话记录,可以用来诊断数据库的当前状态;而AWR中的信息最长可能有1个小时的延迟,所以其采样信息并不能用于诊断数据库的当前状态,但可以用来作为一段时期内数据库性能调整的参考。
视图间的继承关系:
v$session
v$session_wait v$active_session_history
v$session_wait_history wrh$_active_session_history
dba_hist_active_sess_history
其中视图dba_hist_active_sess_history 是wrh$_active_session_history和其他几个视图的联合展现,通常通过这个视图进行历史数据的访问。
AWR:
1. ASH 占用的内存大小
select pool, name, bytes/1024/1024 from v$sgastat where name like'%ASH%';
POOL NAME BYTES/1024/1024
------------ -------------------------- ---------------
shared pool ASH buffers 4
2.ASH 中的信息被保存到了AWR 的视图wrh$_active_session_history中。ASH是AWR 的真子集。
3.mmon进程与 mmnl进程。
快照由一个称为MMON 的新的后台进程(及其从进程)以及MMNL 后台进程自动地每隔固定时间采样一次。
MMON进程负载执行多种和管理相关的后台任务:
当某个测量值超过了预设的限定值后提交警告。
创建新的MMON 隶属进程(MMON) 来进行快照。
捕获最近修改的SQL 对象的统计信息
MMNL 进程负责执行轻量级的且频率较高的和可管理性相关的后台任务,例如捕获会话历史信息,测量值计算等。
AWR 的采样工作由MMON进程每个小时执行一次,ASH信息同样会被采样写出到AWR负载库中。虽然ASH BUFFER被设计为保留1小时的信息,但很多时候这个内存是不够的,当ASH BUFFER 写满后,另外一个后台进程MMNL将会主动将ASH信息写出。
4.SYSAUX表空间。
这些采样数据都存储在SYSAUX表空间中,并且以WRM$_* 和 WRH$_* 的格式命名。前一种类型存储元数据信息(如检查的数据库和采集的快照),后一种类型保存实际采集的统计数据。
手动生成SNAP_ID
exec dbms_workload_repository.create_snapshot();
注意: AWR的一次报告中的SNAP_ID是不能够跨重启数据库的。
2.脚本准备:
2.1 sql 脚本准备:
conn xbrlsystem/xbrlsystem@67;
set echo off;
set veri off;
set feedback off;
set termout on;
set heading off;
variable rpt_options number;
define NO_OPTIONS = 0;
define ENABLE_ADDM = 8;
-- according to your needs, the value can be 'text' or 'html'
define report_type='html';
begin
:rpt_options := &NO_OPTIONS;
end;
/
variable dbid number;
variable inst_num number;
variable bid number;
variable eid number;
begin
select max(snap_id)-48 into :bid from dba_hist_snapshot;
select max(snap_id) into :eid from dba_hist_snapshot;
select dbid into :dbid from v$database;
select instance_number into :inst_num from v$instance;
end;
/
column ext new_value ext noprint
column fn_name new_value fn_name noprint;
column lnsz new_value lnsz noprint;
--select 'txt' ext from dual where lower('&report_type') = 'text';
select 'html' ext from dual where lower('&report_type') = 'html';
--select 'awr_report_text' fn_name from dual where lower('&report_type') = 'text';
select 'awr_report_html' fn_name from dual where lower('&report_type') = 'html';
--select '80' lnsz from dual where lower('&report_type') = 'text';
select '1500' lnsz from dual where lower('&report_type') = 'html';
set linesize &lnsz;
-- print the AWR results into the report_name file using the spool command:
column report_name new_value report_name noprint;
select 'awr'||'.'||'&ext' report_name from dual;
set termout off;
spool &report_name;
select output from table(dbms_workload_repository.&fn_name(:dbid, :inst_num,:bid, :eid,:rpt_options ));
spool off;
set termout on;
clear columns sql;
ttitle off;
btitle off;
repfooter off;
undefine report_name
undefine report_type
undefine fn_name
undefine lnsz
undefine NO_OPTIONS
exit
2.2 PYTHON 脚本准备:
#!/usr/bin/python
#coding=gbk
#created by tianlesoftware
#2011-4-12
import os
import sys
import smtplib
import pickle
import mimetypes
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage
from email.MIMEMultipart import MIMEMultipart
SMTP_SERVER='smtp.mail.yahoo.com.cn'
EMAIL_USER='wshxgdan@yahoo.cn'
EMAIL_PASSWD='wshxgxiaoli32105'
EMAIL_SUBJECT='performance report for dg'
FROM_USER='wshxgdan@yahoo.cn'
TO_USERS=['408673035@qq.com','zhangys@gtadata.com']
def createawr():
pipe = os.popen(' C:\Ora10InstantClient\sqlplus /nolog @myawrrpt.sql')
def mysendmail(fromaddr,toaddrs,subject):
COMMASPACE=','
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = COMMASPACE.join(toaddrs)
msg['Subject'] = subject
txt = MIMEText("performance report for dg ")
msg.attach(txt)
fileName = r'awr.html'
ctype, encoding = mimetypes.guess_type(fileName)
if ctype is None or encoding is not None:
ctype = 'application/octet-stream'
maintype, subtype = ctype.split('/', 1)
att = MIMEImage((lambda f: (f.read(), f.close()))(open(fileName, 'rb'))[0], _subtype = subtype)
att.add_header('Content-Disposition', 'attachment', filename = fileName)
msg.attach(att)
server=smtplib.SMTP(SMTP_SERVER)
server.login(EMAIL_USER,EMAIL_PASSWD)
server.sendmail(fromaddr,toaddrs,msg.as_string())
server.quit()
if __name__=='__main__':
createawr()
mysendmail(FROM_USER, TO_USERS, EMAIL_SUBJECT)
print 'send successful'
注: 上面的空行一定要要, 不能省去,另外PYTHON移植性不是很好, 在WINDOWS转到LINUX下要注意空格及空行还有制表符。而且要同版本PYTHON,要不然你将会面临跟我一样的过失, 一个空格整了一个上午。这就是很悲剧的事了。
执行:createSendAWR.py > createSendAWR.log 2>&1
就会生成报告了。
另注: 本文整理来源:http://blog.csdn.net/tianlesoftware/article/details/6319198
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22740983/viewspace-734630/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22740983/viewspace-734630/