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_ ...
随机推荐
- Oracle FGA审计记录的清理步骤
注意:本文为原创文章,转载请注明出处: http://blog.csdn.net/msdnchina/article/details/38435999 一.确认有哪些fga审计策略, 从select ...
- Hibernate一个简短的引论
我们从几个方面进行阐述Hibernate When? What ? How? When? Hibernate由来是因为当时EJBBean1.1在处理entittBean架构时,花费的时间要比业务逻辑很 ...
- bitnami redmine 安装插件
https://wiki.bitnami.com/Applications/BitNami_Redmine_Stack#How_to_install_a_plugin_on_Redmine.3f 版权 ...
- JVM Input Arguments Lookup (JMX)(转)
JVM Input Arguments Lookup (JMX) Maps JVM input arguments -- but not main arguments -- using JMX to ...
- RandomAccessFile实时读取大文件(转)
最近有一个银行数据漂白系统,要求操作人员在页面调用远端Linux服务器的shell,并将shell输出的信息保存到一个日志文件,前台页面要实时显示日志文件的内容.这个问题难点在于如何判断哪些数据是新增 ...
- java注解(转)
java中元注解有四个: @Retention @Target @Document @Inherited: @Retention:注解的保留位置 @Retention(RetentionPolicy ...
- 【Machine Learning】Mahout基于协同过滤(CF)的用户推荐
一.Mahout推荐算法简介 Mahout算法框架自带的推荐器有下面这些: l GenericUserBasedRecommender:基于用户的推荐器,用户数量少时速度快: l GenericI ...
- C# 获得Excel工作簿Sheet页面(工作表)集合的名称
#region 获取Excel工作薄中Sheet页(工作表)名集合 /// <summary> /// 获取Excel工作薄中Sheet页(工作表)名集合 /// </summary ...
- ABP展现层——动态生成WebApi
ABP展现层——动态生成WebApi 点这里进入ABP系列文章总目录 ABP(现代ASP.NET样板开发框架)系列之20.ABP展现层——动态生成WebApi ABP是“ASP.NET Boilerp ...
- VS2015, .NET 4.6, C# 6.0, F# 4.0等重量级产品正式上线
VS2015, .NET 4.6, C# 6.0, F# 4.0等重量级产品正式上线 Visual Studio Visual Studio 2015 下载 VS2015新功能列表 ‘ Visual ...