Chinaunix首页 | 论坛 | 博客
  • 博客访问: 719019
  • 博文数量: 191
  • 博客积分: 10987
  • 博客等级: 上将
  • 技术积分: 1925
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-22 09:52
文章分类

全部博文(191)

文章存档

2014年(10)

2011年(11)

2010年(38)

2009年(132)

分类: Oracle

2010-02-11 22:23:01

1。当前数据库的会话数量
select count(*) from v$session where username is not null;
2. 当前数据库的活动的会话数量
select count(*) from v$session where status='active' and username is not null;
3.当前数据库逻辑读总量
select a.value+b.value logical_reads_number from v$sysstat a,v$sysstat b
where a.name='db block gets' and b.name='consistent gets';
4.当前数据库物理读总量
select value physical_reads_number where name='physical reads';
5.buffer_cache_size 命中率
select round(100*(1-c.value/(a.value+b.value)),2) 命中率
from v$sysstat a,v$sysstat b ,v$sysstat c
where a.name='db block gets' and b.name='consistent gets' and c.name='physical gets';
注:db block gets(当前请求的块数)
    consistent gets(获得一致性读取的块数)
    physical gets(物理读,即IO读取的块数)
6.library cache命中率
select round(sum(pins-reloads)/sum(pins)*100,2) 命中率 from v$librarycache;
注:pins(执行成功的语句)
    reloads(执行失败的语句)
7.实例是否在线
select active_state from v$instance;
8.实例的激活的数量
select count(*) from v$active_instances;
9.在线数据文件的的数量
select count(*) from v$datafile where status='ONLINE';
10.表空间的状态
select count(*) from dba_tablespaces where status='OFFLINE';
11.数据库表空间的利用率
select a.tablespace_name,a.bytes/1024/1024 "Sum MB",(a.bytes-b.bytes)/1024/1024   "used MB",b.bytes/1024/1024 "free MB",round(((a.bytes-b.bytes)/a.bytes)*100,2) "percent_used" 
from 
(select tablespace_name,sum(bytes) bytes from dba_data_files group by tablespace_name) a,  
(select tablespace_name,sum(bytes) bytes,max(bytes) largest from dba_free_space group by tablespace_name) b  
where a.tablespace_name=b.tablespace_name  
order by ((a.bytes-b.bytes)/a.bytes);

TABLESPACE_NAME                    Sum MB    used MB    free MB percent_used
------------------------------ ---------- ---------- ---------- ------------
USERS                                  10        3.5        6.5           35
UNDOTBS1                               30    12.0625    17.9375        40.21
EXAMPLE                               100    77.6875    22.3125        77.69
SYSAUX                                290      275.5       14.5           95
SYSTEM                                490        485          5        98.98

注:视图dba_data_files(显示表空间的总大小)
    视图dba_free_space(显示表空间空闲的大小)
    使用函数计算出总大小,已经使用的大小,空闲大小,使用的百分比
    以相同tablespace_name字段合并俩个视图,得出数据库表空间的利用率。
12.数据库空闲的等待事件
slect name,wait_class from v$event_name where wait_class='IDLE';
13.当前数据库连接的活动session正在等待的事件
select sid,event,wait_class,wait_time from  v$session_wait;
14.数据文件当前的状态
select file_name,status from dba_data_files;
15.数据库空闲块大小
select tablespace_name, count(*) 空闲块 from dba_free_space
group by tablespace_name;

=========================================
等待事件分析:
1.视图
  v$envent_name,三个字段很重要:parameter1,parameter2,parameter3.
  v$system_wait_class
  v$session
  v$session_wait
  v$system_event
  v$session_wait_history
  v$active_session_history
  V$sgastat
  v$segstat_name
  v$session_longops
  v$sql_plan
  v$sql_text
  v$lock
  v$latch
  v$latch_chidren
2.利用视图来追踪和诊断数据库运行状态:
   下面视图的组合访问,可以全面真实的记录,监控和反映数据库的运行状态
   v$session--->v$session_wait--->v$session_wait_history--->v$active_session_history
   ---->wrh$_active_session_history---->dba_hist_active_sess_history
   活动数据库的开始
   当前活动session的等待情况
   记录活动session的最经10次等待
   是ASH的核心,记录活动session的历史信息。
   是v$active_session_history的存储地
   通过这个视图进行历史数据的访问
3.重要等待事件
  1) db file sequential read(数据文件读取顺序)
     读取一个索引块或通过索引读取一个数据块时候会记录这个等待
     是UserI/O一类的等待事件
     通常是单块读。
     读数据块到buffer
  2) db file scattered read(全表扫描)
     离散读取,将存储在磁盘或磁带上连续的数据块离散的读入到多个不连续的buffer里。
     通常是多块读(收到db_file_mulitiblock_read_count参数的限制)。
     通常是应用问题或索引缺失造成的。
     是UserI/O一类的等待事件
     读数据块到buffer
  3) direct path read/write(直接路径读/写)
     是UserI/O一类的等待事件
     单块读/多块读
     读数据块到PGA
     磁盘排序IO读取最易触发这类等待事件
     造成磁盘排序频繁,是临时表空间的问题。
     加大内存的pga_aggregate_target空间,以便缓解硬盘的IO。
  4) log(日志文件相关等待)
     ---日志切换(需要归档)
        因为日志组循环组写满之后,在覆盖先前的日志时,发现日志归档还没有完成,
        由于redo不能写出,出现等待事件。
        可能是I/O存在问题,或日志组设置不合理造成。
         解决办法:
             增大日志文件或增加日志组
             移动归档文件到i/o性能好的磁盘或库带,比喻裸设备或ASM设备
             调整log_archive_max_processes参数
             尽量使用RAIND10,而不是RAIND5来存放日志文件。
     ----日志切换(检查点未完成)
         
  5) enqueue(队列等待)
      Oracle在数据库内部用enqueue等待来记录锁定
      TM锁:表级别锁定
      TX锁:事务锁定
      MR锁:介质锁定
     
      
  6) latch free(闩锁释放)
      oracle在数据库内部用latch free等待事件来记录闩
   
    
  
 

  查看索引情况
  v$user_indexes
  v$user_ind_columns
===========================
top 5等待事件
1. latch free
   主要表现为cache buffers chains的竞争
   原因是多个并发进程对同一个block进行访问从而产生latch的竞争
   会严重影响数据库性能,对应用程序进行修正或对SQL进行优化可以减小该竞争
2. db file scattered read
   进行全表扫描,读取数据块时候是多块读入内存
   发生这类等待事件很可能是没有索引引起的
3.  direct path read/write
    绕过buffer cache,将数据块直接读/写到PGA,来进行排序操作,磁盘I/O消耗很多,
    可以增加pga_aggregate_target空间,以便缓解硬盘的IO.
  
4. log(日志文件相关等待)
    当在归档的时候发生的日志切换:
        因为日志组循环组写满之后,在覆盖先前的日志时,发现日志归档还没有完成,
        由于redo不能写出,出现等待事件。可能是I/O存在问题,或日志组设置不合理造成。
        可以增大日志文件或增加日志组,移动归档文件到i/o性能好的磁盘或库带,比喻裸设备         或ASM设备,调整log_archive_max_processes参数,增加写日志的进程.
5. free buffer waits          
    增加db_cache_size
    手动触发DBWR写入,以缓解cache buffer的压力.
 
=============================
热块竞争与解决方案
 1.具体表现为latch free等待事件
 2.而latch free等待主要表现为cache buffers chains的竞争
 3.通过select sid,seq#,event from v$session_wait也能查到
 4.通过视图v$latch_children找到热块的操作对象
 5.x$bh的字段hladdr(hash chain latch address)和v$latch_children.addr进行关联,这样就把
   具体的latch竞争和数据块关联了.结合视图dba_extents,就找到了热块竞争的对象了.
 6.找到热块竞争对象之后,结合v$sqltext或sqlarea,找到频繁操作这些热块对象的SQL.
 7.最后对这些SQL进行优化.
====================================
阅读(1128) | 评论(0) | 转发(0) |
0

上一篇:oracle版本号解释

下一篇:Oracle:buffer cache

给主人留下些什么吧!~~