在性能不正常的时候,以oracle用户,使用sqlplus “/ as sysdba”登陆到数据库后,执行下面的命令:
set pagesize 100
set linesize 150
col event format a60
select event,total_waits,time_waited from v$session_wait order by 2 desc;
求等待事件及其对应的latch
col event format a32
col name format a32
select sid,event,p1 as file_id, p2 as "block_id/latch", p3 as blocks,l.name
from v$session_wait sw,v$latch l
where event not like '%SQL%' and event not like '%rdbms%'
and event not like '%mon%' and sw.p2 = l.latch#(+);
求等待事件及其热点对象
col owner format a18
col segment_name format a32
col segment_type format a32
select owner,segment_name,segment_type
from dba_extents
where file_id = &file_id and &block_id between block_id
and block_id + &blocks - 1;
使用SQL_TRACE/10046事件进行诊断
使用前注意事项:
1.初始化参数timed_statistics
参数最好设置为true,否则一些重要信息不会被收集。
2.设置max_dump_file_size
该参数设置跟踪文件的大小限制,可以以操作系统块为单位设置;也可以以KB或MB为单位设置;如果跟踪的信息比较多,可以干脆设置为unlimited。
Alter session set max_dump_file_size=unlimited;
跟踪用户的进程
1.首先:通过查询v$session可以获得session相关的信息sid,serial#
Selet sid,serial#,username from v$session where username is not null;
2.然后调用过程,开始跟踪:
Execute dbms_system.set_sql_trace_in_session(9,399,true);
3.等待用户执行相关的SQL语句,然后再执行:
Execute dbms_system.set_sql_trace_in_session(9,399,false);
查找生成的TRACE文件
此过程将生成一个相关的跟踪文件,然后利用下面的SQL语句查找跟踪文件(红色字体表示SID):
select d.value || '/' || lower(rtrim(i.instance, chr(0))) || '_ora_' ||p.spid || '.trc' trace_file_name
from (select p.SPID
from v$session s, v$process p
where p.ADDR = s.PADDR
and s.SID=1054) p,
(select t.instance
from v$thread t, v$parameter v$
where v$.Name = 'thread'
and (v$.VALUE = 0 or t.THREAD# = to_number(v$.VALUE))) i,
(select value from v$parameter where name = 'user_dump_dest') d;
最后用tkprof生成报告:
tkprof inomc_ora_6939.trc kk.txt explain=ly_nye/oracle aggregate=yes sys=no
利用AWR工具收集数据库信息
AWR简介
AWR 实质上是一个 Oracle 的内置工具,它采集与性能相关的统计数据,并从那些统计数据中导出性能量度,以跟踪潜在的问题。与 Statspack 不同,快照由一个称为 MMON 的新的后台进程及其从进程自动地每小时采集一次。为了节省空间,采集的数据在 7 天后自动清除。快照频率和保留时间都可以由用户修改。要查看当前的设置,您可以使用下面的语句:
select snap_interval, retention from dba_hist_wr_control;
SNAP_INTERVAL RETENTION
------------------- -------------------
+00000 01:00:00.0 +00007 00:00:00.0
修改收集方法
begin
dbms_workload_repository.modify_snapshot_settings (
interval => 20,
retention => 2*24*60
);
end;
手动收集快照
begin
dbms_workload_repository.create_snapshot;
end;
生成awr报告
以Oracle用户身份,使用sqlplus “/ as sysdba”登陆到数据库,然后执行:
sqlplus / as sysdba
SQL>@?/rdbms/admin/awrrpt.sql
Current Instance
~~~~~~~~~~~~~~~~
DB Id DB Name Inst Num Instance
----------- ------------ -------- ------------
1028932844 INOMC 1 inomc
Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Would you like an HTML report, or a plain text report?
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
Enter value for report_type: --这里输入将输出的报告的格式,有text和html两种格式,根据个人习惯选择报告类型,默认是html类型,我这里选择html或者直接回车
Type Specified: html
Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host
------------ -------- ------------ ------------ ------------
* 1028932844 1 INOMC inomc i2ksvr
Enter value for num_days: --这里输入要显示几天以内的快照,默认最多显示七天
Listing the last day's Completed Snapshots
Snap
Instance DB Name Snap Id Snap Started Level
------------ ------------ --------- ------------------ -----
inomc INOMC 30 22 Jun 2010 00:00 1
31 22 Jun 2010 01:00 1
32 22 Jun 2010 02:00 1
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: --这里输入开始快照的ID,根据需要填写,一般填写性能出出现问题时的快照ID,可以根据ID所对应的时间决定
Begin Snapshot Id specified: 34
Enter value for end_snap: --这里输入结束快照的ID,根据需要填写,基本原则是与开始快照之间不能有太在的跨度,且开始快照和结束快照之间,数据库不能关闭。上述两种情况,都会导致收集到的数据失真,收集则无实际意义。
End Snapshot Id specified: 35
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrrpt_1_34_35.html. To use this name,
press to continue, otherwise enter an alternative.
Enter value for report_name: --这里输入产生报告的名称,如果不指定名称,则默认根据快照的开始ID和结束ID,生成如上述报告产生的awrrpt_1_34_35.html
Report written to awrrpt_1_34_35.html
SQL>exit
退出之后,会在当前的目录下找到报告文件。
oracle@i2ksvr:~> ls
awrrpt_1_34_35.html