首页 > 开发 > 综合 > 正文

使用Statspack的几个误区

2024-07-21 02:08:17
字体:
来源:转载
供稿:网友


使用statspack的几个误区

作者: fenng


statspack 是 oracle 提供的一个实例级的tuning工具。很多dba都喜欢用这个工具来进行数据库的优化调
整。不过在交流中发现很多朋友对这个工具的的运用还有一些 问题。下面就其中比较容易出问题的几个方面进
行一下简单的分析。


关于快照的采样时间间隔问题

我们知道,statspack的report实际上也就是对比两个快照 (snapshot,也就是数据库当前状态 ) 得出的结
果。

一般情况下,专家建议生成statspack报告的快照时间间隔为15-30分钟。

试想,一个人去医院看病,医生对其测量体温,一般也就是5-10分钟左右就可以了, 为什么是这麽长的时间?
因为5-10分钟这段时间基本可以近似的得到你的体温。如 果时间过短,可能达不到既定的目的,测到的体温会
偏低,时间过长,甚至长达几 个小时的话(假设有这种情况),病人可能都昏迷几次了 ;) 。

对生成statspack报告的快照时间间隔也是这样,如果两个snap time时间过短,数据 库的一些主要周期性
事务可能还没有运行,信息收集不完全。如果间隔过长,数据一样会有偏差。

假设如下的情况:系统一直正常,但是最近几天有用户反映,在a时间段应用程序执行 很慢。b时间段正常,而
a时间段有一个主要的事务x运行(也是用户使用到的事务)。 b时间段有另外一个比较消耗资源的事务y在运
行。a和b时间段的跨度比较大。本来你的 快照如果覆盖a时间段内就已经能够的收集到比较准确的数据了,但
不巧的是,你的report 所用的两个snap id的时间跨度太长,从而把b时间段内的统计数据也收集了进来。
statspack 经过比较,“认为”事务y是对系统有主要影响(这也会在report上体现出来),而你,经过分析,认
为y才是罪魁祸首,接下来,你不遗余力的对y进行了tuning......

问题出现了!调整了b之后,用户继续报告,a时间段内系统不但没有变快,反而变得更慢,甚至不可忍受。这
种情况是很危险 的,可能会对系统造成不同程序的损害。在比较严格的环境中,这已经构成了一次比较严重的
事故。

或许你也要承认,statspack的快照的采样时间间隔还真需要重视呢......

这是一个oracle 8.1.7.0.1 版本下的statspack报告:





                snap id snap time sessions
                ------- ------------------ --------
begin snap: 637 04-aug-03 11:59:33 25
   end snap: 646 04-aug-03 16:29:06 25
    elapsed: 269.55 (mins)




从中可以看到快照637和快照646之间为269.55 (mins)。这么长的时间跨度,即使数据库在一定时间间隔内
有问题,在这里的体现也会有偏差。 

下面的这个statspack 报告的时间有点不靠谱了:





snap length
start id end id start time end time (minutes)
-------- -------- -------------------- -------------------- -----------
314 1053 11-dec-03 18:07:13 19-dec-03 10:53:02 11,085.82


11,085.82分钟? 这么长时间内的数据采集分析,怕是绝大部分内容都是不能相信的了。

还要注意的是,我们说的时间间隔,是begin snap和end snap之间的间隔,而不是相邻两个snap 之间的
间隔。对于snap收集的间隔,建议以不要影响性能为准,收集的太过于频繁,会对性能和 存储都造成压力。
对于所谓的15-30分钟,不能墨守成规。具体的环境下应该加以调整。

以偏概全

statspack从本质上说,是对系统的性能统计数据进行采样,然后进行分析,采样,就会有偏差。如何消除偏
差?统计学指出"差值随样品个数的增加而降低"。所以,只凭借一个report文档就 断定数据库的性能问题出
在某处,是比较武断的做法(个别情况除外)。还要dba多创建report,对比进行分析,会起到很好的效果。
在寻求技术支持的时候也最好能够多提交几份report,便于 支持人员迅速帮助解决问题。


有关timed_statistics参数

虽然这算是一个低级的错误,还是很遗憾,常常看到一些朋友对这个参数的忽略.如果在 timed_statistics的
值设置为false的时候进行收集,可以说,收集到的东西用处不是很大 (我想你不会只想看一些实例名字、初始
化参数之类的信息吧)。甚至可以说,如果该参数不设置为true,性能分析无从说起。


相关信息

《expert one-on-one oracle》 by thomas kyte
《advanced tuning with statspack》 from otn
《statspack使用指南》 by eygle
《performance tuning with statspack》partii from otn
《performance tuning with statspack》parti from otn



原文出处:
<a href="http://www.dbanotes.net/oracle/aboutstatspack.htm">http://www.dbanotes.net/oracle/aboutstatspack.htm</a>

 
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表