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计算代价。

分享标题:aux_stats$基表(系统统计信息)
转载来源:http://scyanting.com/article/jhoohh.html