oracle 性能优化 02_OWI及性能视图

一、oracle等待接口
    OWI (ORACLE WAIT INTERFACE),从Oracle 7开始支持OWI,目的是让开发人员和维护人员能够了
解在Oracle的每个模块和OS中消耗了多少时间,通过Oracle提供的视图获取这些信息,是AWR,STATSPACK
等时间模型性能报告的基础,方便找到性能问题的根源,诊断系统故障。
1、核心视图
v$system_event     
    记录自实例启动以来各个等待事件的概括信息。常用于获取系统等待信息的历史影象。而通过两个
snapshot获取等待项增量,确定这段时间内系统的等待项。
v$session_event
    记录session自启动以来所有的等待事件。
v$session_wait  
    会话等待事件明细信息,每三秒钟刷新一次等待时间
V$SESSION_WAIT_HISTORY  
    是对V$SESSION_WAIT的简单增强,记录活动SESSION的最近10次等待。
主要字段解释:
    event:事件名称
    total_waits: 自从实例启动以来的等待次数
    total_timeouts: 事件被唤醒的总次数
    time_waited: 按照cs统计的总的等待时间
    average_wait: 平均每次等待的等待时间,单位是cs
    SID: SESSION ID
    seq#: 等待次数统计
    p[1-3]: 等待的详细参数
    p[1-3]raw: 参数的raw模式
    p[1-3]text: 参数的名字
查询当前会话的SID
    select * from v$mystat where rownum<2; #需要访问权限
    select userenv('sid') from dual; #没有权限要求
v$system_wait_class
    系统等待事件分类统计信息
v$session_wait_class;
    会话等待事件分类统计信息
v$sys_time_model
    系统时间统计模型
V$SESS_TIME_MODEL
    会话对应的时间统计模型
v$osstat
    操作系统统计信息
v$waitstat
    保存自实例启动所有的等待事件统计信息。
v$filestat
    记录文件的IO信息
v$latch
    记录闩锁信息
2、等待事件分类
    IDLE #空闲
    APPLICATION #行锁、表锁、DDL锁等
    Configuration #由于配置导致的
    Administrative #特权用户的某些维护操作导致的
    Concurrency #由于并发量大引起的
    commit #log file sync
    Network
    User I/O waits #前台进程,SMON,MMON
    System I/O Waits #除了SMON,MMON外的后台进程
    Scheduler #资源管理引起的
    CLUSTER #RAC
    Other
3、OWI诊断方法及过程
    通过查询等待接口核心视图或者生产statpack/AWR报告,找到较大等待时间和次数的等待事件,针对具体
的等待时间,细致跟踪分析。
    诊断过程:OS性能状态及开销->alert log->查询OWI视图或生成报告->命中率->参数调优->TOP SQL->查找
具体SQL进行SQL调优->事件跟踪...

4、OWI相关的SQL语句
4.1. 监控事例的等待 
    select  event,sum(decode(wait_Time,0,0,1)) "Last wait",sum(decode(wait_Time,0,1,0)) "Current waiting", 
    count(*) "Tot"   from  v$session_Wait   group by event   order by 4; 
4.2. 回滚段的争用情况 
    select name, waits, gets, waits/gets "Ratio"  
    from  v$rollstat a, v$rollname b  where  a.usn = b.usn;  
4.3. 监控表空间的 I/O 读写情况 
    select df.tablespace_name name,df.file_name "file",f.phyrds,f.phyblkrd,f.phywrts, f.phyblkwrt 
    from   v$filestat f, dba_data_files df  where  f.file# = df.file_id 
    order  by df.tablespace_name; 
4.4. 监控数据文件的 I/O 情况
    select  substr(a.file#,1,2) "#", substr(a.name,1,30) "Name",  a.status, a.bytes, b.phyrds, 
    b.phywrts,b.phyblkrd,b.phyblkwrt,b.readtim,b.writetim
    from  v$datafile a, v$filestat b  where  a.file# = b.file#;  
4.5. 查找找所有的索引 
    select b.table_name, b.index_name,  uniqueness, column_name 
    from   user_ind_columns a, user_indexes  b
    where  a.index_name = b.index_name and a.table_name = b.table_name  
    order by b.table_type, b.table_name, b.index_name, column_position; 
4.6. 监控 SGA 中字典缓冲区的命中率 
    select   parameter, gets,Getmisses , getmisses/(gets+getmisses)*100 "miss ratio", 
    (1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100 "Hit ratio" 
    from  v$rowcache where  gets+getmisses <>0  group by parameter, gets, getmisses;  
4.7. 监控 SGA 中共享缓存区的命中率,应该小于1% 
    select  sum(pins) "Total Pins", sum(reloads) "Total Reloads", 
    sum(pinhits-reloads)/sum(pins) "hit radio",  sum(reloads)/sum(pins) *100 "reload percent" 
    from  v$librarycache; 
4.8. 显示所有数据库对象的类别和大小 
    select   type, count(name) object_nums, sum(source_size) source_size, 
    sum(parsed_size) parsed_size, sum(code_size) code_size, sum(error_size) error_size, 
    sum(source_size) +sum(parsed_size) +sum(code_size) +sum(error_size) size_required  
    from  dba_object_size  group by type  order by 1;  
4.9.  监控内存和硬盘的排序比率,
    SELECT  name, value   FROM  v$sysstat  
    WHERE  name IN ('sorts (memory)', 'sorts (disk)');  
4.10. 监控当前数据库谁在运行什么SQL语句 
    SELECT   osuser, username, sql_text from  v$session a, v$sqltext b 
    where  a.sql_address =b.address order by address, piece; 
4.11. 碎片程度 
    select   tablespace_name,count(tablespace_name)  
    from  dba_free_space  group by tablespace_name  having count(tablespace_name)>10; 
    alter tablespace name coalesce; #当pctincrease=0 时候合并相邻的空闲extent
    alter table name deallocate unused; #释放高HWM以上的空块 
4.12、查看碎片程度高的表 
    SELECT   segment_name table_name , COUNT(*) extents  FROM  dba_segments  
    WHERE  owner NOT IN ('SYS', 'SYSTEM') GROUP BY segment_name 
    HAVING COUNT(*) = (SELECT MAX(COUNT(*)) FROM dba_segments 
    GROUP BY segment_name);                                                    

转载于:https://my.oschina.net/peakfang/blog/2245755

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值