用Oracle中的Statspack诊断数据库性能实例
创始人
2024-03-25 03:11:11
0

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

整理分析结果

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

1.物理读写IO操作:

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

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

SQL代码

select
substr(to_char(snap_time,'yyyy-mm-ddHH24:MI:SS'),12),
(newreads.value-oldreads.value)reads,
(newwrites.value-oldwrites.value)writes
from
perfstat.stats$sysstatoldreads,
perfstat.stats$sysstatnewreads,
perfstat.stats$sysstatoldwrites,
perfstat.stats$sysstatnewwrites,
perfstat.stats$snapshotsn
where
newreads.snap_id=sn.snap_id
and
newwrites.snap_id=sn.snap_id
and
oldreads.snap_id=sn.snap_id-1
and
oldwrites.snap_id=sn.snap_id-1
and
oldreads.statistic#=40
and
newreads.statistic#=40
and
oldwrites.statistic#=41
and
newwrites.statistic#=41
and
(newreads.value-oldreads.value)>0
and
(newwrites.value-oldwrites.value)>0

select
substr(to_char(snap_time,'yyyy-mm-ddHH24:MI:SS'),12),
(newreads.value-oldreads.value)reads,
(newwrites.value-oldwrites.value)writes
from
perfstat.stats$sysstatoldreads,
perfstat.stats$sysstatnewreads,
perfstat.stats$sysstatoldwrites,
perfstat.stats$sysstatnewwrites,
perfstat.stats$snapshotsn
where
newreads.snap_id=sn.snap_id
and
newwrites.snap_id=sn.snap_id
and
oldreads.snap_id=sn.snap_id-1
and
oldwrites.snap_id=sn.snap_id-1
and
oldreads.statistic#=40
and
newreads.statistic#=40
and
oldwrites.statistic#=41
and
newwrites.statistic#=41
and
(newreads.value-oldreads.value)>0
and
(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(bufferhitratio)命中率是考察Oracle数据库性能的重要指标,它代表在内存中找到需要数据的比
率,一般来说,如果该值小于90%,则可能说明数据库存在大量代价昂贵的IO操作,数据库需要调整。
我们数据库的buffer命中率几乎接近100%,最低值在95%左右,这个比率是比较优化的。

安装statspack

SQL>connect/assysdba

SQL>@?/rdbms/admin/spcreate

卸载

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

收集信息

SQL>connectperfstat/perfstat
SQL>executestatspack.snap;

自动收集

SQL>connectperfstat/perfstat
SQL>@?/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:SQLStatements
Levels=6Thislevelincludesallstatisticsgatheredinthelowerlevel(s).

Levels=7segmentslevelstatistics
Levels=10Additionalstatistics:Childlatches
i_modify_parameter=>'true'/'false'决定是否保存level的值,下一次执行继续使用
*/

产生报告

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

【编辑推荐】

  1. 详解Oracle几种性能调优方法
  2. Oracle应用开发中的几个经典问题
  3. Oracle数据空间的使用、监控和维护

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
P2P的自白|我不生产内容,我... 现在一提起P2P,人们就会联想到正在被有关部门“围剿”的互联网理财服务。×租宝事件使得劳...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...