一、系统统计信息:
select pname, pval1 from sys.aux_stats$ where sname='SYSSTATS_MAIN';
PNAME PVAL1
------------------------------ ----------
CPUSPEED
CPUSPEEDNW 1751.75879
IOSEEKTIM 10
IOTFRSPEED 4096
MAXTHR
MBRC
MREADTIM
SLAVETHR
SREADTIM
1、非工作负载统计:这些信息可以在没有明显数据库负载的情况下收集
cpuspeednw:系统上每个cpu每秒钟可以执行的标准操作的次数。后缀nw表明这是个非工作负载下的估计
ioseektim:在磁盘上定位数据的平均时间。虽然被称为寻道(seek)时间,但实际上是从磁盘检索一个数据块的总时间,
包含磁盘的旋转时延、传偷时延与寻道时间
iotfrspeed:磁盘的IO传偷速率(单位为字节/毫秒)
2、工作负载统计:这些度量是基于真实的Oracle数据库活动,需要在典型的数据库活动期间收集
sredtim:执行单块读取的平均时间
mreadtim:执行多块读取的平均时间
cpuspeed:系统上每个cpu每秒钟可以执行的标准操作的次数。与cpuspeednw不同,它是基于真实的Oracle数据库活动计算出来的
二、收集统计信息
Automatic Optimizer Statistics Collection:搜集所有对象的统计数据
SQL> select client_name,status from dba_autotask_client;
CLIENT_NAME STATUS
---------------------------------------- ----------------
auto optimizer stats collection ENABLED
auto space advisor ENABLED
sql tuning advisor ENABLED
SQL> select client_name,max(job_start_time) from dba_autotask_job_history group by client_name;
CLIENT_NAME MAX(JOB_START_TIME)
------------------ -------------------------
auto optimizer stats collection 27-1月 -13 10.08.44.549000 下午 +08:00
SQL> select to_char(last_analyzed,'YYYY-MM-DD HH24:MI:SS') FROM DBA_TABLES WHERE TABLE_NAME='CLAIMS';
TO_CHAR(LAST_ANALYZED,'YYYY-MM-DDHH24:
--------------------------------------
2013-01-24 22:02:53
LAST_ANALYZED都是昨天晚上重新记录的时间
1、自动统计信息收集
dbms_auto_task_admin.disable(client_name=>'auto optimizer stats collection',operation=>null,window_name=>null);
dbms_auto_task_admin.enable(client_name=>'auto optimizer stats collection',operation=>null,window_name=>null);
2、过时的统计信息
ALL_TAB_MODIFICATIONS
dbms_stats.gather_schema_stats(ownname=>USER,options=>'GATHER STALE');
3、手工收集统计信息
(1)使用默认设置,收集一张表的统计信息
DBMS_STATS.gather_table_stats(ownname =>USER,tabname=>'T1');
(2)收集整个模式的统计信息
DBMS_STATS.gather_schema_stats(ownname=>'GYJ');
(3) 收集一个模式中任何"过时"的表的统计信息
DBMS_STATS.gather_schema_stats(ownname=>'GYJ',options=>'GATHER STALE');
(4) 创建所有索引列的直方图
DBMS_STATS.gather_schema_stats(ownname=>'GYJ',method_opt=>'FOR ALL INDEXED COLUMNS SIZE AUTO');
(5) 将默认收集方式设置为只为数据倾斜分布的索引创建直方图
DBMS_STATS.gather_schema_stats(ownname=>'GYJ',method_opt=>'FOR ALL INDEXED COLUMNS SIZE SKEWONLY');
(6)创建并导出统计信息到一张统计表中
DBMS_STATS.create_stat_table(ownname=>USER,stattab=>'GyjStatTab');
DBMS_STATS.export_table_stats(ownname=USER,tabname=>'T1',stattab=>'GyjStatTab',statid=>'Demo1');
(7)从一张统计信息表中导入统坟信息到当前模式
DBMS_STATS.import_table_stats(ownname=>USER,tabname=>'T1',stattab=>'GyjStatTab',statid=>'Demo1');
4、动态抽样
optimizer_dynamic_sampling:可以将它设置为0-10的一个值。选择0时不会产生抽样,而设置为10,当sql所涉及的表的统计信息
丢失或不完整,抑或sql在两个或更多列上有过滤条件,系统就将读取这些表的所有块。默认值是2,它指示优化器仅对未分析的
表进行少量数据块抽样
gyj@OCM> select client_name,status from dba_autotask_task;
CLIENT_NAME STATUS
---------------------------------------------------------------- --------
sql tuning advisor ENABLED
auto optimizer stats collection ENABLED
auto space advisor ENABLED
gyj@OCM> select window_name,autotask_status from dba_autotask_window_clients;
WINDOW_NAME AUTOTASK
------------------------------ --------
MONDAY_WINDOW ENABLED
TUESDAY_WINDOW ENABLED
WEDNESDAY_WINDOW ENABLED
THURSDAY_WINDOW ENABLED
FRIDAY_WINDOW ENABLED
SATURDAY_WINDOW ENABLED
SUNDAY_WINDOW ENABLED
7 rows selected.
gyj@OCM> select window_name, job_name, job_start_time from (select * from dba_autotask_job_history where client_name='auto optimizer stats collection' order by window_start_time desc) where rownum<4;
WINDOW_NAME JOB_NAME JOB_START_TIME
----------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------
THURSDAY_WINDOW ORA$AT_OS_OPT_SY_144 25-JUL-13 10.00.01.190522 PM PRC
WEDNESDAY_WINDOW ORA$AT_OS_OPT_SY_124 24-JUL-13 10.00.02.352260 PM PRC
SUNDAY_WINDOW ORA$AT_OS_OPT_SY_104 21-JUL-13 11.03.04.069348 PM PRC
转载于:https://blog.51cto.com/guoyjoe/1431405