Oracle中暗藏的珍宝:STATSPACK
【IT168 技术文章】
作为甲骨文公司的智能基础设施的一部分,Oracle 10g的自动负载资料库,与自动数据库诊断监控器联合能帮助数据库管理员诊断和修复性能问题。在智能基础设施的描述下,我们看到了以下内容:
自动负载资料库
自动维护任务
服务器告警
顾问工具框架
自动负载资料库(AWR)像STATSPACK,简言之就是一个收集统计资料仓库。根据自动维护任务,我们可已知道下班后数据库的工作状况:收集统计资料。使用服务器告警,你有能力为众多有趣的选项建立预警和阈值。顾问工具框架就是我们找到所有顾问的地方,如SQL优化顾问, SQL访问顾问。
那么,当有AWR时,并且加上自动数据库诊断监视(ADDM) ,就能做到提数据库易管理性的所有工作,为什么要再次使用STATSPACK呢?从时间和金钱两个方面,我觉得值得尝试再次使用STATSPACK。我将从金钱方面的原因开始。
原因一:金钱
正如过去的文章,使用仓库和包(微调和诊断,如调整包装和诊断包)必须领有许可证。这些包充当AWR的主要接口 ,尽管AWR信息可通过其提供的SQL脚本访问。如果你的许可基准是300名用户,那么你的许可功能要有匹配的成本基准。在这个例子中,你基本上要支付300 “席”的调优包,即使在现实中,只有少数用户(例如,数据库管理员)将是实际用户。
毫无疑问,这笔费用是昂贵的,但是某些痛苦能通过你拥有权限数量减少。你许可证权限越多,你获得的贴现率也越多。最初的支付价格是一小部分,因为你必须为两个要素付费:基本授权费和22 %维护费。展望未来,你以后只要支付年度维护费用,这样可以获得你的顾客编号,以便你可以访问My Oracle Support(Metalink的新名称) 。如果你对此授权模型有疑问,我向你保证,这是一个真实情况的准确描述。然而,你实际的花费,将是你和你的销售代表的报价之间的数目。如果你想使用像AWR的功能,但又不肯支付数万元的使用费,那么什么是你的选项(这大概不包括使用第三方工具,如Oracle的Toad,现在包括一个关于使用许可功能的预警信息,该功能被Toad用来展示其接口) ?那么未来最接近AWR是STATSPACK 。
原因二:时间
我要拓展这种情况的时间意义。这时间与你对这项工作的时间有关。如果你始于几年前并且使用的是10g,但现在寻找新的就业机会,并且在新的工作地方使用的版本不仅包括10g的,还包括更早的版本如9i ?不太可能会陷入9i ,你认为呢?在11i家族中不少运行在9.2.0.5或6 . STATSPACK上,像AWR这样的电子商务套件数据库是你唯一的选择。此外, Oracle8i ( 8.1.7在时代)仍然在使用中,尽管不及前几年那么流行。
时间还涉及可管理性的演变。我不是说你必须是一个UTLBSTAT / UTLESTAT奇才,才能理解AWR提供的功能,但是从STATSPACK开始当然不是没有道理的。如果你能懂得如何阅读和解释ADDM报告(AWR的基础资料) ,然后学习如何使用AWR为基础的报告,做同样的事情并且使其变得简单得多。
安装 STATSPACK
互联网上大量的相关文章,加上甲骨文的文件,包括如何安装STATSPACK并采取快照,我不想在这里重复(除非常简单的叙述) 。STATSPACK安装完成后,有许多疑问, “现在要做什么? ” PERFSTAT架构会是什么样子?使用什么表格?怎么样定制STATSPACK收集?你如何管理资料库?这些都是向前发展的相关问题。
PERFSTAT架构是STATSPACK的所有者。一个共同的做法是将STATS$表中封装在单独的表空间,并且表空间在10g前的版本巧妙地命名为PERFSTAT(在SYSAUX中可以找到 ) 。在古老的版本,以系统用户的运行身份两个脚本,该架构就被创建和配置, 这两个脚本是catdbsyn.sql和dbmspool.sql ,两个都可以在$ORACLE_HOME/rdbms/admin目录( catdbsyn是被管理员废弃的, dbmspool在下一个步骤运行)中找到 。建立适当的spcreate.sql脚本,此脚本将有助你获得的本地信息,同时也将产生日志文件。你还可以安装在批处理模式,但互动模式才是最容易使用。
STATSPACK的演变跨了越数据库管理系统各个版本。在Oracle 8.1.7版本 , 28张表格被创建。在10.2.0.1版本中,PERFSTAT架构始于68表格。
在10g(以及后来的版本)版本中PERFSTAT架构放在SYSAUX表空间,而且该架构可以选择退出SYSAUX,如果你选择这样做。你可以通过查看基于STATSPACK OCCUPANT_NAME的V$SYSAUX_OCCUPANTS视图确认此次操作。任何版本的STATSPACK在安装中都有共同点,将TIMED_STATISTICS参数设置为true,将导致更好的数据性能分析。
配置STATSPACK
下一步是设定(或变更)收集选项,他由两部分组成:级别和阈值。在10g和后来的文档关于这个的是很少的-是很难找到,但一个“See Also”标记能指引你到Oracle9i documentation。在这里,甚至一些更老的资料都可以找到。
一旦准备启用快照,下一步要做的就是要创造一些任务。三个任务将涉及我们在AWR 看到(如何采取快照和管理共享)自动操作。这些任务是:启用快照,清除快照,并进行定制报告,如报告局部增长信息。
创建一个每小时运行一次的任务:
SYS.DBMS_JOB.REMOVE(3);
COMMIT;
END;
/
--
-- JOB3 (Job)
--
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'statspack.snap;'
,next_date => to_date('17/10/2008 17:00:00','dd/mm/yyyy hh24:mi:ss')
,interval => 'trunc(SYSDATE+1/24,''HH'')'
,no_parse => FALSE
,instance => 1
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
COMMIT;
END;
/
创建一个清洗仓库的任务:
SYS.DBMS_JOB.REMOVE(4);
COMMIT;
END;
/
--
-- JOB4 (Job)
--
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'sppurpkg.purge(45);'
,next_date => to_date('18/10/2008 13:29:23','dd/mm/yyyy hh24:mi:ss')
,interval => 'SYSDATE+1'
,no_parse => FALSE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
COMMIT;
END;
/
最后,监督/收集局部增长信息:
SYS.DBMS_JOB.REMOVE(21);
COMMIT;
END;
/
--
-- JOB21 (Job)
--
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'sp_growth;'
,next_date => to_date('17/10/2008 18:31:49','dd/mm/yyyy hh24:mi:ss')
,interval => 'sysdate+1'
,no_parse => FALSE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
COMMIT;
END;
/
注意三个工作是有秩序的。首先是任务编号和你的系统是相关的;在这所显示的是些例子,这些例子的任务ID是3 ,4和21 。第二是用于清除工作的参数;这个例子中使用该参数为45。第三是设置两个任务之间的时间间隔。间隔设置为sysdate +1 ,所以你看到的奇数next_date时间是由于一种潜移默化开始时间的结果。你可以设定时间间隔更精确,例如在一个小时的具体时间。
最后的任务是使用定制表,视图和程序,以监测数据文件和局部增长,但你并不限于这方面的工作。无论你从PERFSTAT架构内部查询出的数据字典,都不涉及任何跟AWR有关事是公平的。如果你想直接查看TATS$ 
当然,使用该数据主要的方式是与单一的时间点相对的跨时间。然而,如果你想看看是否有快照之间的度量改变了,直接看看它而不是运行报告。
总结
STATSPACK在很大程度上仍然是一种可行的选择,监测和诊断性能。随着今天的最新和最强大的甲骨版本文和其易管理性的增强,好像AWR和ADDM 将STATSPACK投送流放岛。但宝物和奖励仍然可以在这个流亡地方发现,并最终取决于你们来找到他们,使大部分是可用的。我们知道,甲骨文通过系统相关的PERFSTAT表数量的增加和会议活动证明将继续支持STATSPACK。表的数量在11.1.0.6版本中已发展到73表格,几乎两倍于它安装在8.1.7.4版本时的数量 。