由动态性能表学到的ios
第一篇--v$sysstat 2007.5.23sql
按照OracleDocument中的描述,v$sysstat存储自数据库实例运行那刻起就开始累计全实例(instance-wide)的资源使用状况。数据库
相似于v$sesstat,该视图存储下列的统计信息:c#
1>.事件发生次数的统计(如:user commits)缓存
2>.数据产生,存取或者操做的total列(如:redo size)session
3>.若是TIMED_STATISTICS值为true,则统计花费在执行操做上的总时间(如:CPU used by this session)oracle
v$sysstat视图经常使用列介绍:ide
该视图还有一列class-统计类别但极少会被使用,各种信息以下:工具
1 表明事例活动性能
2 表明Redo buffer活动
4 表明锁
8 表明数据缓冲活动
16 表明OS活动
32 表明并行活动
64 表明表访问
128 表明调试信息
注意:Statistic#的值在不一样版本中各不相同,使用时要用Name作为查询条件而不要以statistic#的值作为条件。
使用v$sysstat中的数据
该视图中数据常被用于监控系统性能。如buffer cache命中率、软解析率等均可从该视图数据计算得出。
该视图中的数据也被用于监控系统资源使用状况,以及系统资源利用率的变化。正因如此多的性能数据,检查某区间内系统资源使用状况能够这样作,在一个时间段开始时建立一个视图数据快照,结束时再建立一个,两者之间各统计项值的不一样(end value - begin value)便是这一时间段内的资源消耗状况。这是oracle工具的经常使用方法,诸如Statspack以及BSTAT/ESTAT都是如此。
为了对比某个区间段的数据,源数据能够被格式化(每次事务,每次执行,每秒钟或每次登录),格式化后数据更容易从二者中鉴别出差别。这类的对比在升级前,升级后或仅仅想看看一段时间内用户数量增加或数据增长如何影响资源使用方面更加实用。
你也可使用v$sysstat数据经过查询v$system_event视图来检查资源消耗和资源回收。
V$SYSSTAT中的可用统计
V$SYSSTAT中包含多个统计项,这部分介绍了一些关键的v$sysstat统计项,在调优方面至关有用。下列按字母前后排序:
数据库使用状态的一些关键指标:
注:SQL语句的解析有软解析soft parse与硬解析hard parse之说,如下是5个步骤:
1:语法是否合法(sql写法)
2:语义是否合法(权限,对象是否存在)
3:检查该sql是否在公享池中存在
-- 若是存在,直接跳过4和5,运行sql. 此时算soft parse
4:选择执行计划
5:产生执行计划
-- 若是5个步骤全作,这就叫hard parse.
注意物理I/O
oracle报告物理读也许并未致使实际物理磁盘I/O操做。这彻底有可能由于多数操做系统都有缓存文件,多是那些块在被读取。块也可能存于磁盘或控制级缓存以再次避免实际I/O。Oracle报告有物理读也许仅仅表示被请求的块并不在缓存中。
由V$SYSSTAT得出实例效率比(Instance Efficiency Ratios)
下列是些典型的instance efficiency ratios 由v$sysstat数据计算得来,每项比率值应该尽量接近1:
公式:1-((physical reads-physical reads direct-physical reads direct (lob)) / session logical reads)
执行:
select 1-((a.value-b.value-c.value)/d.value)
from v$sysstat a,v$sysstat b,v$sysstat c,v$sysstat d
where a.name='physical reads' and
b.name='physical reads direct' and
c.name='physical reads direct (lob)' and
d.name='session logical reads';
公式:1-(physical reads/ (db block gets+consistent gets))
执行:
select 1 - (sum(decode(name, 'physical reads', value, 0)) /
(sum(decode(name, 'db block gets', value, 0)) +
sum(decode(name, 'consistent gets', value, 0))))
"Buffer Hit Ratio"
from v$sysstat;
公式:1 - ( parse count (hard) / parse count (total) )
执行:
select 1-(a.value/b.value)
from v$sysstat a,v$sysstat b
Where a.name='parse count (hard)' and b.name='parse count (total)';
公式:sorts (memory) / ( sorts (memory) + sorts (disk) )
执行:
select a.value/(b.value+c.value)
from v$sysstat a,v$sysstat b,v$sysstat c
where a.name='sorts (memory)' and
b.name='sorts (memory)' and c.name='sorts (disk)';
公式:1 - (parse count/execute count)
执行:
select 1-(a.value/b.value)
from v$sysstat a,v$sysstat b
where a.name='parse count (total)' and b.name='execute count';
公式:1 - (parse time cpu / CPU used by this session)
执行:
select 1-(a.value/b.value)
from v$sysstat a,v$sysstat b
where a.name='parse time cpu' and
b.name='CPU used by this session';
是否时间花费在解析分配给CPU进行周期运算(即生产工做)。解析时间花费不在CPU周期运算一般表示因为锁竞争致使了时间花费
公式:parse time cpu / parse time elapsed
执行:
select a.value/b.value
from v$sysstat a,v$sysstat b
where a.name='parse time cpu' and b.name='parse time elapsed';
从V$SYSSTAT获取负载间档(Load Profile)数据
负载间档是监控系统吞吐量和负载变化的重要部分,该部分提供以下每秒和每一个事务的统计信息:logons cumulative, parse count (total), parse count (hard), executes, physical reads, physical writes, block changes, and redo size.
被格式化的数据可检查'rates'是否太高,或用于对比其它基线数据设置为识别system profile在期间如何变化。例如,计算每一个事务中block changes可用以下公式:
db block changes / ( user commits + user rollbacks )
执行:
select a.value/(b.value+c.value)
from v$sysstat a,v$sysstat b,v$sysstat c
where a.name='db block changes' and
b.name='user commits' and c.name='user rollbacks';
其它计算统计以衡量负载方式,以下:
公式:db block changes / session logical reads
执行:
select a.value/b.value
from v$sysstat a,v$sysstat b
where a.name='db block changes' and
b.name='session logical reads' ;
公式:sorts (rows) / ( sorts (memory) + sorts (disk) )
执行:
select a.value/(b.value+c.value)
from v$sysstat a,v$sysstat b,v$sysstat c
where a.name='sorts (rows)' and
b.name='sorts (memory)' and c.name='sorts (disk)';