[20141006]analyze与dbms_stats.txt

[20141006]analyze与dbms_stats.txt

--别人问一个奇怪的问题,如何知道表使用analyze分析的还是使用dbms_stats分析的.
--一般oracle不建议再使用analyze来分析表,这个命令保留分析表和索引的完整性,以及分析表是否存在行链接还是行迁移.
--不过,问题提出来,还是看看有什么方法确定?

1.建立测试环境:
@ver
SCOTT@test01p> @ver

BANNER                                                                               CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0

create table t1 as select rownum id ,cast('name' as varchar2(10)) name from dual connect by levelcreate table t2 as select rownum id ,cast('name' as varchar2(10)) name from dual connect by levelanalyze table t1 compute statistics;
exec dbms_stats.gather_table_stats(ownname=>user, tabname=>'T2', estimate_percent=>null, method_opt=>'FOR ALL COLUMNS SIZE 1');

2.如何确定使用analyze分析的还是使用dbms_stats分析的:
--只能看看几个视图,看看是否可以找到线索:
SCOTT@test01p> select table_name,last_analyzed,avg_space,avg_row_len,global_stats,user_stats from dba_tables where owner=user and table_name in ('T1','T2');
TABLE_NAME LAST_ANALYZED        AVG_SPACE AVG_ROW_LEN GLO USE
---------- ------------------- ---------- ----------- --- ---
T1         2014-10-06 22:17:19       1056          12 NO  NO
T2         2014-10-06 22:17:28          0           9 YES NO

--对比可以发现,其它字段的信息都一样,仅仅可以发现global_stats不同,也许可以看出global_stats='NO'表示使用analyze分析的.
--当然可以发现avg_space不同.但是通过global_stats确定还是比较准确的.

3.补充一些内容:
--如果lock表统计信息,从那里看出来呢?
SCOTT@test01p> exec DBMS_STATS.LOCK_TABLE_STATS (ownname=>user, tabname=>'T1');
PL/SQL procedure successfully completed.

--通过这个dba_tables视图看不出来,自己经常忘记,还有DBA_TAB_STATISTICS视图.

SELECT table_name,
       last_analyzed,
       avg_space,
       avg_row_len,
       global_stats,
       user_stats,
       stattype_locked
  FROM DBA_TAB_STATISTICS
WHERE owner = USER AND table_name IN ( 'T1', 'T2');

TABLE_NAME LAST_ANALYZED        AVG_SPACE AVG_ROW_LEN GLO USE STATT
---------- ------------------- ---------- ----------- --- --- -----
T1         2014-10-06 22:17:19       1056          12 NO  NO  ALL
T2         2014-10-06 22:17:28          0           9 YES NO

-- stattype_locked='ALL' ,表示这个表的统计信息被lock锁定.

SCOTT@test01p> exec dbms_stats.gather_table_stats(ownname=>user, tabname=>'T1', estimate_percent=>null, method_opt=>'FOR ALL COLUMNS SIZE 1');
BEGIN dbms_stats.gather_table_stats(ownname=>user, tabname=>'T1', estimate_percent=>null, method_opt=>'FOR ALL COLUMNS SIZE 1'); END;

*
ERROR at line 1:
ORA-20005: object statistics are locked (stattype = ALL)
ORA-06512: at "SYS.DBMS_STATS", line 33859
ORA-06512: at line 1

--从这里也推断出来与stattype=ALL有关.必须加入force=>true.

SCOTT@test01p> exec dbms_stats.gather_table_stats(ownname=>user, tabname=>'T1', estimate_percent=>null, method_opt=>'FOR ALL COLUMNS SIZE 1',force=>true);
PL/SQL procedure successfully completed.

时间: 2024-11-15 00:42:22

[20141006]analyze与dbms_stats.txt的相关文章

【性能优化】ANALYZE 与DBMS_STATS的区别

From asktom ------------- you can import/export/set statistics directly with dbms_stats it is easier to automate with dbms_stats (it is procedural, analyze is just a command) dbms_stats is the stated, preferred method of collecting statisttics. dbms_

[20130607]行迁移与ALTER TABLE MINIMIZE RECORDS_PER_BLOCK.txt

[20130607]行迁移与ALTER TABLE MINIMIZE RECORDS_PER_BLOCK.txt 前一阵子,在ITPUB上讨论避免行迁移的方法.想到ALTER TABLE MINIMIZE RECORDS_PER_BLOCK. 当数据行发生大量的行迁移(migrate)时,对其访问将会造成 I/O 性能降低,因为Oracle为获取这些数据行的数据时,必须访问更多的数据块(data block).而一般常规的解决方法就是增加PCTFREE的设置,预留更多的空间给行记录增长,但是又带

DBMS_STATS.GATHER_TABLE_STATS

  由于Oracle的优化器是CBO,所以对象的统计数据对执行计划的生成至关重要! 作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息(默认参数下是对表进行直方图信息收集,包含该表的自身-表的行数.数据块数.行长等信息:列的分析--列值的重复数.列上的空值.数据在列上的分布情况:索引的分析-索引页块的数量.索引的深度.索引聚合因子). DBMS_STATS.GATHER_TABLE_STATS的语法如下:DBMS_STATS.GATHER_TABLE_ST

Oracle Tuning的一些总结

oracle     关于Oracle的性能调整,一般包括两个方面,一是指Oracle数据库本身的调整,比如SGA.PGA的优化设置,二是连接Oracle的应用程序以及SQL语句的优化.做好这两个方面的优化,就可以使一套完整的Oracle应用系统处于良好的运行状态.         本文主要是把一些Oracle Tuning的文章作了一个简单的总结,力求以实际可操作为目的,配合讲解部分理论知识,使大部分具有一般Oracle知识的使用者能够对Oracle Tuning有所了解,并且能够根据实际情况

V$SESSION_LONGOPS

V$SESSION_LONGOPS视图记录了执行时间长于6秒的某个操作(这些操作可能是备份,恢复,Hash Join,Sort ,Nested loop,Table Scan, Index Scan 等等). 要想V$SESSION_LONGOPS视图中有记录 1.必须将初始化参数 timed_statistics设置为true或者开启sql_trace 2.必须用ANALYZE或者DBMS_STATS对对象收集过统计信息 要理解的就是:比如某个SQL语句执行时间比较长,但是每个操作都没有超过6

无处不在的等待

  11月03日,由Oracle 资深DBA彭小波老师在"DBA+东北群"进行了一次关于"无处不在的等待"的线上主题分享.小编特别整理出其中精华内容,供大家学习交流.   嘉宾简介    "DBA+社群"东北联合发起人.从事Oracle 数据库技术十余年,ACOUG核心成员,Oracle用户组年轻专家.现就职于某金融保险公司,曾服务于航天.航空.机车.大型制造行业数据库的维护以及系统开发,擅长Oracle数据库架构规划.SQL优化.OWI方面性能

[转载】——故障排除:Shared Pool优化和Library Cache Latch冲突优化 (文档 ID 1523934.1)

原文链接:https://support.oracle.com/epmos/faces/DocumentDisplay?_adf.ctrlstate=23w4l35u5_4&id=1523934.1用途   提出问题,得到帮助并分享您的心得   排错步骤   什么是shared pool?   专用术语   Literal SQL   Hard Parse(硬解析)   Soft Parse(软解析)   完全相同的语句?   Sharable SQL   语句的版本   Library Cac

并发请求:统计数据收集模式

并发请求: 统计数据收集模式(FNDGSCST) / Gather Schema Statistics Oracle ERP中有几个与Gather有关的标准Request: Gather All Column Statistics –FND_STATS.GATHER_ALL_COLUMN_STATS() Gather Column Statistics –FND_STATS.GATHER_COLUMN_STATS() Gather Schema Statistics –FND_STATS.GAT

ORACLE-SQL微妙之处

本文总结一下平时经常使用的SQL语句以及一些ORACLE函数的微妙之处.欢迎大家多多补充平时最常用的SQL语句,供大家学习参考. SQL> select * from temp2; NAME            SORCE ---------- ---------- 1                  43 2                  23 3                  42 4                  87 5                  12 <spa