Oracle性能分析11:系统统计信息
早期Oracle查询优化器的开销计算是基于运行SQL语句所须要的物理读,这种方法被叫做I/O开销模式(I/O cost model),这种方法的主要缺点是觉得单块读和多块读开销相当。在Oracle 8i中,初始化參数optimizer_index_caching和optimizer_index_cost_adj攻克了这个问题,但參数的默认值仅适用于报告系统和数据仓库。直到Oracle 9i,ORacle引入了一种新的CPU开销模式(CPU cost model),消除了这个缺陷,但必须提供数据库引擎所在的系统的性能信息,即系统统计信息。这篇文章将介绍系统统计信息和收集系统统计信息的方法。
系统统计信息
系统统计信息放在表aux_stats$中,能够通过以下的方法查看该视图中的数据(须要DBA用户或者有该表的查看权限):
select * from aux_stats$; SNAME PNAME PVAL1 PVAL2
---------------------------------------------------------------------
SYSSTATS_INFO STATUS COMPLETED
SYSSTATS_INFO DSTART 08-30-2005 15:04
SYSSTATS_INFO DSTOP 08-30-2005 15:04
SYSSTATS_INFO FLAGS 1
SYSSTATS_MAIN CPUSPEEDNW 484.974958263773
SYSSTATS_MAIN IOSEEKTIM 10
SYSSTATS_MAIN IOTFRSPEED 4096
SYSSTATS_MAIN SREADTIM
SYSSTATS_MAIN MREADTIM
SYSSTATS_MAIN CPUSPEED
SYSSTATS_MAIN MBRC
SYSSTATS_MAIN MAXTHR
SYSSTATS_MAIN SLAVETHR
表中的数据包含3个部分,使用SNAME区分:
1)SYSSTATS_INFO表示系统统计信息状态和时间
STATUS在正确收集时为COMPLETED;假设出现故障,显示为BADSTATS,在这样的情况下查询优化器将不使用统计信息;该字段还能够为:MANUALGATHERING和AUTOGATHERING。
2)SYSSTATS_MAIN表示系统统计信息结果集
该部分的信息分为非工作量统计信息(noworkload statistics)和工作量统计信息(workload statistics),两者的主要区别是度量I/O子系统性能的方法有所不同,后面详细讨论。
非工作量统计在Oracle 10g之后总是提供,包含:
CPUSPEEDNW 一个CPU一秒钟能处理的操作数,单位百万次/秒
IOSEEKTIM 平均磁盘寻道时间,单位毫秒,默认10
IOTFRSPEED 平均每毫秒从磁盘传输的字节数,默觉得4096
工作量统计信息必须显示地收集后才可用,包含:
SREADTIM 单块数据平均读取时间,单位毫秒
MREADTIM 多块数据平均读取时间,单位毫秒
CPUSPEED 一个CPU一秒钟能处理的操作数,单位百万次/秒
MBRC 一次多块读操作的平均读取数据块数
MAXTHR 整个系统的最大I/O吞吐量(字节/秒)
SLAVETHR 并行处理中从属线程的平均I/O吞吐量(字节/秒)
3)SYSSTATS_TEMP用来计算系统统计信息,仅仅有收集工作量统计信息时才可用
收集系统统计信息
使用工具包dbms_stats中的存储过程gather_system_stats收集系统统计信息,能够收集非工作量统计信息或者工作量统计信息。
非工作量统计信息
从Oracle 10g開始,总是提供默认的非工作量统计信息,假设显式地删除,下次数据库启动时会自己主动收集。收集非工作量统计信息要在空暇的系统上进行,使用那个以下的语句:
begin
dbms_stats.gather_system_stats(gathering_mode => 'noworkload');
end;
收集非工作量统计信息仅仅须要非常短的时间,但有时须要反复收集多次才干生效。
工作量统计信息
收集工作量统计信息,不能使用空暇的系统,以为数据库引擎要利用正常的数据库负载来评估I/O子系统的性能。
工作量统计信息的收集包括以下的步骤:
1)运行快照并存储各种性能指标的初始值到数据字典表aux_stats$(列SNAME设定为SYSSTATS_TEMP)。使用以下的方式来启动:
begin
dbms_stats.gather_system_stats(gathering_mode => 'start');
end;
2)等待足够的时间产生一个有代表性的负载时候再进行还有一次快照,等待时间通常不少于30分钟;
3)进行第二次快照,使用以下的语句:
begin
dbms_stats.gather_system_stats(gathering_mode => 'stop');
end;
4)Oracle依据两次快照之间的差值,计算出系统统计信息,假设无法计算的话,将被设置为空。
你也能够指定gathering_mode为interval,并指定间隔时间来收集工作量统计时间,这样就不用手工停止快照,以下的命令指定30分钟后进行第二次快照:
begin
dbms_stats.gather_system_stats(gathering_mode => 'interval',
interval => 30);
end;
须要注意上面的语句并不会延续30分钟,它仅仅是启动一个作业调度后返回。
使用工作量统计信息须要尽量避免收集到没有代表性的工作量信息,能够收集多天的工作量统计信息,然后将mbrc、mreadtim、sreadtim和cpuspeed指标取平均值,maxthr和slavethr取最大值,再使用delete_system_stats过程删除旧的系统统计信息,然后使用set_system_stats设定新的系统统计信息,存储步骤例如以下:
begin
dbms_stats.delete_system_stats();
dbms_stats.set_system_stats(pname => 'CPUSPEED', pvalue => 772);
dbms_stats.set_system_stats(pname => 'SREADTIM', pvalue => 5.5);
dbms_stats.set_system_stats(pname => 'MREADTIM', pvalue => 19.4);
dbms_stats.set_system_stats(pname => 'MBRC', pvalue => 53);
dbms_stats.set_system_stats(pname => 'MAXTHR', pvalue => 1136136192);
dbms_stats.set_system_stats(pname => 'SLAVETHR', pvalue => 16870400);
end;
Oracle性能分析11:系统统计信息的更多相关文章
- Oracle性能分析12:对象统计信息
对象统计信息描写叙述数据是如何在数据库中存储的,查询优化器使用这些统计信息来做出正确的决定.Oracle中有三种类型的对象统计信息:表统计.列统计和索引统计.而在每种类型中,有细分为:表或索引级别的统 ...
- Oracle 判断 并 手动收集 统计信息 脚本
CREATE OR REPLACE PROCEDURE SchameB.PRC_GATHER_STATS AUTHID CURRENT_USER IS BEGIN SYS.DBMS_STATS.GAT ...
- [Oracle] 11G自己主动收集统计信息
在11g中,默认自己主动收集统计信息的时间为晚上10点(周一到周五,4个小时),早上6点(周六,周日,20个小时),例如以下所看到的: select a.window_name, a.repeat_i ...
- Oracle性能分析7:创建索引
在创建索引时,我们往往希望可以预估索引大小,以评估对现有project环境的影响,我们也希望创建索引的过程可以最小化的影响我们正在执行的project环境,并能查看索引的状况. 预估索引大小 预估索引 ...
- Oracle 和 SQLSERVER 重新获取统计信息的方法
1. Oracle 重新获取统计信息的命令 exec dbms_stats.gather_schema_stats(ownname =>) # 需要修改 ownername options 指定 ...
- 启用oracle 11g自己主动收集统计信息
今天接到朋友数据库一个case,在DBCA建库时,把自己主动收集统计信息的选项去掉了,数据库执行半年没有收集过统计信息.如今要启用方法例如以下: exec DBMS_AUTO_TASK_ADMIN.E ...
- Oracle性能分析1:开启SQL跟踪和获取trace文件
当Oracle查询出现效率问题时,我们往往须要了解问题所在,这样才干针对问题给出解决方式.Oracle提供了SQL运行的trace信息,当中包括了SQL语句的文本信息.一些运行统计,处理过程中的等待, ...
- Oracle性能分析3:TKPROF简介
tkprof它是Oracle它配备了一个命令直插式工具,其主要作用是将原始跟踪文件格文本文件的类型,例如,最简单的方法,使用下面的: tkprof ly_ora_128636.trc ly_ora_1 ...
- Oracle 性能分析
1.--查出耗时长的 10条SQL select * from (select v.sql_id, v.child_number, v.sql_text, v.elapsed_time, v.cpu_ ...
随机推荐
- Python 基金会 —— 模块和包简介
一.模块(Module) 1.模块的作用 在交互模式下输出的变量和函数定义,一旦终端重新启动后,这些定义就都不存在了,为了持久保存这些变量.函数等的定义,Python中引入了模块(Modul ...
- 算法 - 乞讨n中位数(C++)
//************************************************************************************************** ...
- Tomcat通过配置一个虚拟路径管理web工程
关于虚拟路径.学问javaweb训练课程,如今,鉴于这种情况下老师. 当我们的项目,当在不同的文件夹项目.我们如何使用tomcat去管理web工程. 教师提出的解决方案是 使用虚拟路径方式,并按照实施 ...
- JS达到Web指定保存的和打印功能的内容
背景 首先,说说文章的背景.近期手中的一个项目,因为需求中要求提供Web界面的打印功能.当然假设没有打印机,还能够提供保存到本地.项目组长把这个"小任务"分给了我.本着努力为组长分 ...
- MSMQ学习笔记
这几天学习了一下MSMQ,虽然不能说非常深入的了解其机制与实际用法(具体项目的实现),但也要给自己的学习做个总结.学习心得如下: 一.MSMQ即微软消息队列.用于程序之间的异步消息通信,主要的机制就是 ...
- struts详细解释拦截器
1.拦截器:Struts2拦截器将一个Action要么Action的方法.之前或截取后场,和Struts2拦截器是可插拔,拦截器AOP一种实现. WebWork:拦截器是动态拦截Action调用的对象 ...
- 第四章——SQLServer2008-2012资源及性能监控(1)
原文:第四章--SQLServer2008-2012资源及性能监控(1) 性能优化的第一步是发现问题,而发现问题通常又有两类:突发问题的侦测和常规问题的侦测,对于常规问题的侦测,通常需要有一个长效的性 ...
- 使用shell/python获取hostname/fqdn释疑(转)
一直以来被Linux的hostname和fqdn(Fully Qualified Domain Name)困惑了好久,今天专门抽时间把它们的使用细节弄清了. 一.设置hostname/fqdn 在Li ...
- winmd文件和dll文件的区别
今天在研究一个二维码项目,用到一个第三方组件 ZXing,因为做的是Windows应用商店程序,应用商店程序是可以引用winmd文件也可以引用dll文件,但是这两种文件ZXing都提供了,最后和同事讨 ...
- ZOJ 3623 Battle Ships 简单DP
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3623 题意:给出N种可以建造的船和对方的塔生命值L,每种船给出建造时 ...