aux_stats$ 基表(系统统计信息)
aux_stats$ 基表(系统统计信息)
查看操作系统统计信息
col sname for a20
col pname for a20
col pval2 for a40
select * from sys.aux_stats$;
SNAME PNAME PVAL1 PVAL2
-------------------- -------------------- ---------- ----------------------------------------
SYSSTATS_INFO STATUS COMPLETED
SYSSTATS_INFO DSTART 08-24-2013 12:04
SYSSTATS_INFO DSTOP 08-24-2013 12:04
SYSSTATS_INFO FLAGS 1
SYSSTATS_MAIN CPUSPEEDNW 3074.07407
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 SLAVETH
aux_stats$是sys管理员用户下的一个基表后缀为$,必须写schema才能查询到,所谓的基表就是给动态性能视图提供数据的原始表,
由于基表非常重要,oracle规定不允许直接访问和修改基表,如果你比较了解这些那么另说了。
这个表中记录了“操作系统统计信息”。Oracle会利用操作系统统计信息来修正执行计划的代价,也就是说这些信息是影响代价计算的因素之一。
注意:如果oracle收集了操作系统统计信息,那么CBO采用工作量统计模式计算代价
如果oracle没有收集操作系统统计信息,那么CBO采用非工作量统计模式计算代价,
看上面MBRC没有参数值就说明还没有收集操作系统统计信息。
这两个模式计算代价的公式是不同的。
列含义:
SQL> desc sys.aux_stats$
Name Null? Type
------------------------ -------- ----------------------------------------------------------------------------
SNAME NOT NULL VARCHAR2(30)
PNAME NOT NULL VARCHAR2(30)
PVAL1 NUMBER
PVAL2 VARCHAR2(255)
SNAME:是指操作系统统计信息
PNAME:parameter name 参数名
PVAL1:参数值
PVAL2:参数值
参数解释
FLAGS:标志
CPUSPEEDNW:非工作量统计模式下CPU主频,直接来自硬件
IOSEEKTIM:IO寻址时间(毫秒),直接来自硬件
IOTFRSPEED:IO传输速率(字节/毫秒)
SREADTIM:读取单个数据块的平均时间
MREADTIM:读取多个数据块的平均时间
CPUSPEED:工作量统计模式下CPU主频,根据当前工作量评估出一个合理值
MBRC:oracle收集完统计信息后评估出的一次多块读可以读几个数据块db_file_multiblock_read_count
MAXTHR:最大IO吞吐量(字节/秒)
SLAVETHR:平均IO吞吐量(字节/秒)
后面这6个参数是在oracle收集完统计信息后才能得出的参数值,有什么用呢?
CBO在计算SQL语句的代价时,需要使用数据库对象例如表 索引 等对象统计数据,
还要使用操作系统统计数据例如CPU周期 IO速度 数据块读时间等,选择花费时间最少的执行计划为最佳执行计划。
Oracle使用dbms_stats.gather_system_stats存储过程来收集操作系统统计信息,收集来的数据存放在sys.aux_stats$表中,
如果我们做了收集操作那么会有统计数据,如果没有做就没有统计数据,这两种计算代价的方法是不同的。
收集系统的统计信息:
dbms_stats.gather_system_stats语法
execute dbms_stats.gather_system_stats(
gathering_mode varchar2 default 'noworkload'
interval integer default null,
stattab varchar2 default null,
statid varchar2 default null,
statown varchar2 default null);
解释
gathering_mode 参数,默认值“noworkload”,还可以设置为“workload”含义
noworkload:非工作量统计模式,收集上来的数据都是来自硬件
workload:工作量统计模式,收集上来的数据需要在特定的数据库负载间隔内统计出来的,
这样的数据才能真实反映出数据库的操作系统参数(需要执行sql测评出来)
interval:可以指定收集统计信息的时间间隔,例如 5 收集5分钟的统计信息
命令:execute dbms_stats.gather_system_stats('noworkload',5);
START和STOP关键字自己决定何时开始何时结束收集统计信息
命令:execute dbms_stats.gather_system_stats('start');
上下两条指令间隔3分钟执行,然后把这3分钟的统计信息写入到sys.aux_stats$表里面
execute dbms_stats.gather_system_stats('stop');
MBRC参数,它是初始化参数db_file_multiblock_read_count的简写中文翻译“一次读多少个数据块or一次多块读可以读几个数据块”,
如果收集了统计信息那么CBO会用MBRC计算代价,如果没有收集统计信息CBO会用这个初始化参数db_file_multiblock_read_count计算代价。