用Oracle中的Statspack诊断数据库性能实例

 
   | |

导读:本文主要介绍用Oracle中的Statspack诊断数据库性能实例。

关键词:Oracle Statspack 诊断数据库性能 数据库性能实例

正在加载数据...

通过Statspack我们可以很容易的确定Oracle数据库的瓶颈所在,记录数据库性能状态,也可以使远程技术支持人员迅速了解你的数据库运行状况。因此了解和使用Statspack对于DBA来说至关重要。

整理分析结果

可以通过各种工具建立图表,使我们收集的数据更直观,更有说服力。
以下是我给一个客户做的分析报告的实例。

1.物理读写IO操作:

观察物理IO访问,可以看出数据库日常访问的峰值及繁忙程度。

脚本:此脚本按时间生成统计数据(注:以下示例以8i为基础,SQL脚本中引用的statistic#在不同版本代表的意义可能不同,对于9i等版本,你应该修改相应参数值)

SQL代码:

selectsubstr(to_char(snap_time,'yyyy-mm-ddHH24:MI:SS'),12),(newreads.value-oldreads.value)reads,(newwrites.value-oldwrites.value)writesfromperfstat.stats$sysstatoldreads,perfstat.stats$sysstatnewreads,perfstat.stats$sysstatoldwrites,perfstat.stats$sysstatnewwrites,perfstat.stats$snapshotsnwherenewreads.snap_id=sn.snap_idandnewwrites.snap_id=sn.snap_idandoldreads.snap_id=sn.snap_id-1andoldwrites.snap_id=sn.snap_id-1andoldreads.statistic#=40andnewreads.statistic#=40andoldwrites.statistic#=41andnewwrites.statistic#=41and(newreads.value-oldreads.value)>0and(newwrites.value-oldwrites.value)>0
selectsubstr(to_char(snap_time,'yyyy-mm-ddHH24:MI:SS'),12),(newreads.value-oldreads.value)reads,(newwrites.value-oldwrites.value)writesfromperfstat.stats$sysstatoldreads,perfstat.stats$sysstatnewreads,perfstat.stats$sysstatoldwrites,perfstat.stats$sysstatnewwrites,perfstat.stats$snapshotsnwherenewreads.snap_id=sn.snap_idandnewwrites.snap_id=sn.snap_idandoldreads.snap_id=sn.snap_id-1andoldwrites.snap_id=sn.snap_id-1andoldreads.statistic#=40andnewreads.statistic#=40andoldwrites.statistic#=41andnewwrites.statistic#=41and(newreads.value-oldreads.value)>0and(newwrites.value-oldwrites.value)>0/

  图表:

数据库读写趋势曲线图

分析

从趋势图中我们可以看出,数据库每日读操作较为平稳,数据量大约在4000左右。在下午2点到5点期间比较繁忙。峰值达到150000左右。

数据库写操作变化也比较平稳,数据改变量在80000左右,凌晨一点半到早晨8点半左右数据库访问极少。这是一个以写为主的数据库,我们需要更多注意的是写竞争。

2.Buffer命中率

Sql代码


select
substr(to_char(snap_time,'yyyy-mm-ddHH24:MI'),12),
round(100*(((a.value-e.value)+(b.value-f.value))-(c.value-g.value))/
((a.value-e.value)+(b.value-f.value)))
"BUFFERHITRATIO"
from
perfstat.stats$sysstata,
perfstat.stats$sysstatb,
perfstat.stats$sysstatc,
perfstat.stats$sysstatd,
perfstat.stats$sysstate,
perfstat.stats$sysstatf,
perfstat.stats$sysstatg,
perfstat.stats$snapshotsn
where
a.snap_id=sn.snap_id
and
b.snap_id=sn.snap_id
and
c.snap_id=sn.snap_id
and
d.snap_id=sn.snap_id
and
e.snap_id=sn.snap_id-1
and
f.snap_id=sn.snap_id-1
and
g.snap_id=sn.snap_id-1
and
a.statistic#=39
and
e.statistic#=39
and
b.statistic#=38
and
f.statistic#=38
and
c.statistic#=40
and
g.statistic#=40
and
d.statistic#=41


select
substr(to_char(snap_time,'yyyy-mm-ddHH24:MI'),12),
round(100*(((a.value-e.value)+(b.value-f.value))-(c.value-g.value))/
((a.value-e.value)+(b.value-f.value)))
"BUFFERHITRATIO"
from
perfstat.stats$sysstata,
perfstat.stats$sysstatb,
perfstat.stats$sysstatc,
perfstat.stats$sysstatd,
perfstat.stats$sysstate,
perfstat.stats$sysstatf,
perfstat.stats$sysstatg,
perfstat.stats$snapshotsn
where
a.snap_id=sn.snap_id
and
b.snap_id=sn.snap_id
and
c.snap_id=sn.snap_id
and
d.snap_id=sn.snap_id
and
e.snap_id=sn.snap_id-1
and
f.snap_id=sn.snap_id-1
and
g.snap_id=sn.snap_id-1
and
a.statistic#=39
and
e.statistic#=39
and
b.statistic#=38
and
f.statistic#=38
and
c.statistic#=40
and
g.statistic#=40
and
d.statistic#=41

图表:

数据库buffer命中率曲线

分析:

Buffer(bufferhitratio)命中率是考察Oracle数据库性能的重要指标,它代表在内存中找到需要数据的比率,一般来说,如果该值小于90%,则可能说明数据库存在大量代价昂贵的IO操作,数据库需要调整。我们数据库的buffer命中率几乎接近100%,最低值在95%左右,这个比率是比较优化的。

安装statspack


SQL>connect/assysdba
SQL>@?/rdbms/admin/spcreate 

  卸载

SQL>connect/assysdbaSQL>@?/rdbms/admin/spdrop/*收集信息前把timed_statistics=true;altersystemsettimed_statistics=true;*/ 

  收集信息


SQL>connectperfstat/perfstatSQL>executestatspack.snap; 

自动收集


SQL>connectperfstat/perfstatSQL>@?/rdbms/admin/spauto 

删掉自动收集的job.


SQL>select*fromuser_jobs;SQL>execdbms_job.remove(JOB_ID)
/*executestatspack.snap(i_snap_level=>10,i_modify_parameter=>'true');Levels=5Additionaldata:SQLStatementsLevels=6Thislevelincludesallstatisticsgatheredinthelowerlevel(s).
Levels=7segmentslevelstatisticsLevels=10Additionalstatistics:Childlatchesi_modify_parameter=>'true'/'false'决定是否保存level的值,下一次执行继续使用*/ 

  产生报告


SQL>conectperfstat/perfstatSQL>@?/rdbms/admin/spreport 

原文出处:http://database.51cto.com/art/200904/118372.htm
 
来源:51cto    
 
 
 
 
 

Oracle性能与调优

 
在关系型数据库理论中,在任何表中对行列的顺序并没有严格的概念。一个表就是一个数据集,而数据集是没有顺序而言的。
 
在进行Oracle升级过程中,创建测试用例来验证升级并没有对数据或者读取这个数据库的应用造成不良的影响是至关重要的。
 
去年年底当Oracle公司宣布他们的虚拟管理软件Oracle VM时,该公司承诺Oracle应用程序能顺利地被虚拟化,而同时Oracle公司对公众声称它不支持虚拟化系统,不能在……

热门技术手册排行

 

在本次的技术手册中,我们为您提供了PL/SQL的基础知识以及专家指导,包括了PL/SQL中的数据类型简介、PL/SQL函数与触发器以及PL/SQL中的存储过程等,相信您无论是高手还是菜鸟都可以获得有帮助的信息。

 

本系列文章由三部分组成,为Oracle数据库管理员(DBA)面试成功的必备手册。本专题内容囊括从DBA最初的面试开始,从写“杀手简历”到求职信、到面试过程到Oracle认证再到上升到公司高层最后到你成为公司里的明星DBA。专家为你一一指点迷津,最终让你登上成功的宝座。

 

要成为一名DBA,你需要具备哪些素质?DBA的薪酬待遇如何?DBA的职业道路究竟可以走向何方?我们将在本次的技术手册中为您一一解答。

 

在本次技术手册中,我们将对SQL Server存储过程的调试进行详细的介绍,包括了基础的调试方法和在调试过程中出现的T-SQL性能问题和解决方法。

 

本技术专题主要围绕sql server设计这个话题展开,侧重介绍了sql server集簇索引的设计、如何创建sql server索引、如何优化索引、索引的能与不能、处理sql server 2000索引碎片技巧以及维护sql server索引以实现查询优化等等。

查看更多
 
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录