`

Oracle dbms_stats

 
阅读更多

 

第一部分:Gathering Optimizer Statistics

 

1. GATHER_DATABASE_STATS

收集数据库中所有对象的统计信息

 

Parameters:

--estimate_percent: 需分析的百分比(NULL means compute),默认值可以通过SET_PARAM来改变。The valid range is [0.000001,100]

--block_sample:无论是否是随机块采样替代随机行采样,随机块采样的效率都会比较高。除非数据不是随机分布在磁盘上的。DEFAULT FALSE

--method_opt:

FOR ALL [INDEXED | HIDDEN] COLUMNS[size_clause]

FOR COLUMNS[size clause] column|attribute [size_clause] [,column|attribute [size_clause]...]

size_clause is defined as size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}

- integer: Number of histogram buckets. Must be in the range [1,254].- REPEAT: Collects histograms only on the columns that already have histograms.- AUTO: Oracle determines the columns to collect histograms based ondata distribution and the workload of the columns.- SKEWONLY: Oracle determines the columns to collect histograms based on thedata distribution of the columns.

The default is FOR ALL COLUMNS SIZE AUTO.默认值可以通过SET_PARAM来改变

--degree:并行度,The default for degree is NULL.

--granularity:只有分区表才会用到此参数

--cascade:是否要统计此表上的index,默认为false,默认值可以通过SET_PARAM来改变

--StattabUser statistics table identifier describing where to save the current statistics.

--Statid:Identifier (optional) to associate with these statistics withinstattab.

--options:默认值GATHER(Gathers statistics on all objects in the schema),

其它选项:

GATHERAUTO: Gathers all necessary statistics automatically

GATHERSTALE: Gathers statistics on stale objects as determined by looking at the *_tab_modificationsviews.

GATHEREMPTY: Gathers statistics on objects which currently have no statistics.

LIST AUTO: Returns a list of objects to be processed with GATHER AUTO, When GATHER AUTO is specified, the only additional valid parameters are stattab, statid, objlist and statown;

LISTSTALE: Returns a list of stale objects as determined by looking at the *_tab_modifications views.

LISTEMPTY: Returns a list of objects which currently have no statistics.

--objlist: List of objects found to be stale or empty

--statown: Schema containingstattab(if different from current schema)

--gather_sys: Gathers statistics on the objects owned by the'SYS'user,默认值TRUE

--no_invalidate: 设置为TRUE时,相关的游标不会失效; 反之,游标失效。

 

2. GATHER_DICTIONARY_STATS

此过程收集统计数据字典用户’SYS’,’SYSTEM’以及RDBMS组件用户.

必须有SYSDBAANALYZEANYDICTIONARYANALYZEANYSYSTEM权限才能执行此过程。

参数:

--comp_id:指定需统计用户的COMP_ID,通过DBA_REGISTRY视图来查看COMP_ID。如此值为NULL,则统计所有RDBMS组件的用户。此管是否有此参数,’SYS’,’SYSTEM’用户都会被统计。

其它参数estimate_percent--block_sample --method_opt –degree –granularity –cascade –stattab –statid –options –objlist –statown --no_invalidate都同上

 

3. GATHER_FIXED_OBJECTS_STATS

此过程收集统计所有的动态性能表

必须有SYSDBA或具有ANALYZEANYDICTIONARY权限才能执行此过程。

参数:stattab –statid –statown --no_invalidate

 

4. GATHER_INDEX_STATS

此过程收集索引的统计。一些参数被限制的,不会并行处理cluster indexes, domain indexes,bitmap join indexesgranularityno_invalidate参数在这些index中不起作用。

参数:

--ownname:被统计的schema

-- indname:index

--PartnameName of partition

--force:即使表被锁定,也强行统计

--estimate_percent–stattab –statid–statown–degree–granularity --no_invalidate都同上

 

5. GATHER_SCHEMA_STATS

此过程收集统计某用户下所有的对象

参数:

--ownname:需分析的schema, null时则为当前schema

--estimate_percent --block_sample--method_opt–degree–granularity–cascade –stattab –statid–options –objlist –statown --no_invalidate都同上

 

6. GATHER_SYSTEM_STATS

此过程收集系统统计,用来系统的cpuIO指标

参数:

--gathering_mode:

-NOWORKLOAD,收集I/O的性能指标,数据库的大小决定收集时间。收集期间ORACLE将评估IO平均的读取寻道时间和传输速度。

-INTERVAL,指定统计的时间(分钟数),统计完成后,统计信息将建立或更新在数据字典或指定的stattab中。在统计期间可以用GATHER_SYSTEM_STATS (gathering_mode=>'STOP')来中断统计。

SQL> exec dbms_stats.gather_system_stats('interval',15);

SQL> exec dbms_stats.gather_system_stats('stop');

SQL>select pname,pval1 from sys.aux_stats$; --查看统计结果

-START|STOP:开始和结束统计

--interval:指定统计的分钟数,当上面的参数是INTERVAL时才用此参数

--no_invalidate:设置为TRUE时,相关的游标不会失效;反之,游标失效。

–statid–statown同上

 

7. GATHER_TABLE_STATS

此过程统计table and column (and index)信息。

参数:

Ownname:用户名

TabnameTABLE

Partname:分区名Name of partition

--estimate_percent --block_sample--Method_opt–degree–granularity–cascade –stattab –statid –statown --no_invalidate--force都同上

 

第二部分:Setting or Getting Statistics

 

1. SET_COLUMN_STATS

设置列相关信息

参数:

--ownname:用户名

--tabnameTABLE

--colname:列名

--partname:分区名

--stattab:指定存放用户分析的数据的表名

--statid:stattabID,只有当stattab没有指定时使用

--ext_stats:自定义的统计

--stattypown:统计类型的所属用户

--STATTYPNAME:统计类型的名称

--distinct:有多少个值(number of distinct values)

--density:列密度。如果此值是nulldistinct不为空,那么此值将参照distinct

--nullcntnumber of NULLS

--srec:StatRecstructure filled in by a call to PREPARE_COLUMN_VALUES or GET_COLUMN_STATS

--avgclen:列的平均长度(in bytes)

--flags:ORACLE内部使用,应该为NULL

--statown:Schema containing stattab (if different than ownname)

--no_invalidate:设置为TRUE时,相关的游标不会失效;反之,游标失效。

--force:被设置的column被锁时也强行设置

 

2. SET_INDEX_STATS

设置索引相关信息

 

3. SET_PARAM

此过程是用来设置DBMS_STATS的值的,可以用GET_PARAM函数来得到参数的当前值。

参数:

--pname:可以是CASCADE,DEGREE,EASTIMAT_PERCENT,METHOD_OPT,NO_INVALIDATE,GRANULARITY,AUTOSTATS_TARGET

--pval:参数的值。如果是NULL,则设成默认值。

To run this procedure, you must have theSYSDBAor both theANALYZEANYDICTIONARYandANALYZEANYsystem privileges

举例:

DBMS_STATS.SET_PARAM('CASCADE','DBMS_STATS.AUTO_CASCADE');

DBMS_STATS.SET_PARAM('ESTIMATE_PERCENT','5');

DBMS_STATS.SET_PARAM('DEGREE','NULL');

 

4. SET_SYSTEM_STATS

设置系统的统计

参数:

--pname:

--iotfrspeed:IO的传输速度/毫秒

--ioseektim:seek time + latency time + operating system overhead time, in milliseconds

--sreadtim:average time to read single block (random read), in milliseconds

--mreadtim:average time to read an mbrc block at once (sequential read), in milliseconds

--cpuspeed:average number of CPU cycles for each second, in millions, captured for the workload (statistics collected using 'INTERVAL' or 'START' and 'STOP' options)

--cpuspeednw:average number of CPU cycles for each second, in millions, captured for the noworkload (statistics collected using 'NOWORKLOAD' option.

--mbrc:average multiblock read count for sequential read, in blocks

--maxthr:I/O的最大吞吐量,bytes/second

--slavethr:average slave I/O throughput, in bytes/second

--pvalue:参数的值

--stattab:指定存放用户分析的数据的表名

--statid:用户ID

--statownstattab指定表的所属用户

--cachedblk:段在buffer cache中的平均块数

--cachehit:段的平均命中率

 

5.SET_TABLE_STATS

设置表的统计

参数:

--ownname,--tabname,--partname,--stattab,--statid同上

--numrows:表中有多少行

--numblks:表占用了多少块

--avgrlen:平均的行长度

--flags--statown--no_invalidate--cachedblk,--cachehit,--force同上

 

6. PREPARE_COLUMN_VALUES

7. PREPARE_COLUMN_VALUES_NVARCHAR2

8. PREPARE_COLUMN_VALUES_ROWID

9. GET_COLUMN_STATS Procedures

取栏位的统计信息

参数:

--ownname,--tabname,--colname, --partname,--stattab,--statid, --ext_stats, --stattypown, --STATTYPNAME, --distinct, --density, --nullcnt,--srec,--avgclen,--statown

 

10. GET_INDEX_STATS

取索引的统计信息

参数

--ownname,--indname,--partname,--stattab,--statid,--ext_stats,--stattypown,--STATTYPNAME, --numrows, --numblks

--numdist:Number of distinct keys in the index (partition)

--avglblk:Average integral number of leaf blocks in which each distinct key appears for this index (partition)

--avgdblk:Average integral number of data blocks in the table pointed to by a distinct key for this index (partition)

--clstfct:Clustering factor for the index (partition)

--indlevel:Height of the index (partition)

--statown:stattab的用户名

--guessq:估计INDEX的质量

--cachedblk:段在buffer cache中的平均块数

--cachehit:段的平均命中率

 

11GET_SYSTEM_STATS

此过程取系统的统计信息

语法:

DBMS_STATS.GET_SYSTEM_STATS (

statusOUTVARCHAR2,

dstartOUTDATE,

dstopOUTDATE,

pnameVARCHAR2,

pvalueOUTNUMBER,

stattabINVARCHAR2 DEFAULT NULL,

statidINVARCHAR2 DEFAULT NULL,

statownINVARCHAR2 DEFAULT NULL);

参数:

--Status:会输出以下值之一COMPLETED,AUTOGATHERING,MANUALGATHERING,BADSTATS

--dstart:收集分析开始的时间

--dstop:收集分析结束的时间

--pname:需要获取值的参数,可选的值有:iotfrspeedioseektimsreadtim,mreadtim,cpuspeed,cpuspeednw,mbrc,maxthr,slavethr

--pvalue:

--stattab:统计表所表名,如果此值为null,则会从数据字典中取。

--statid:stattabid

--statown:stattabown

 

12.GET_TABLE_STATUS

table相关的统计信息

语法:

DBMS_STATS.GET_TABLE_STATS (

ownnameVARCHAR2,

tabnameVARCHAR2,

partnameVARCHAR2 DEFAULT NULL,

stattabVARCHAR2 DEFAULT NULL,

statidVARCHAR2 DEFAULT NULL,

numrowsOUT NUMBER,

numblksOUT NUMBER,

avgrlenOUT NUMBER,

statownVARCHAR2 DEFAULT NULL,

cachedblkOUT NUMBER,

cachehitOUT NUMBER);

 

13CREATE_STAT_TABLE

此过程建立stattabTABLE,以保存统计信息。

语法:

DBMS_STATS.CREATE_STAT_TABLE (

ownnameVARCHAR2,

stattabVARCHAR2,

tblspace VARCHAR2 DEFAULT NULL);

参数:

--ownname:用户名

--stattab:需建立的stattab表名。

--tblspace:stattabtablespace.如果为null则会使用用户的默认表空间

 

14DROP_STAT_TABLE

此过程删除用户定义的统计表

语法:

DBMS_STATS.DROP_STAT_TABLE (

ownname VARCHAR2,

stattab VARCHAR2);

 

第三部分Deleting Statistics

 

1DELETE_COLUMN_STATS

语法:

DBMS_STATS.DELETE_COLUMN_STATS (

ownnameVARCHAR2,

tabnameVARCHAR2,

colnameVARCHAR2,

partnameVARCHAR2 DEFAULT NULL,

stattabVARCHAR2 DEFAULT NULL,

statidVARCHAR2 DEFAULT NULL,

cascade_parts BOOLEANDEFAULT TRUE,

statownVARCHAR2 DEFAULT NULL,

no_invalidate BOOLEANDEFAULT to_no_invalidate_type (

get_param('NO_INVALIDATE')),

forceBOOLEAN DEFAULT FALSE);

参数:

--ownname:table所属用户名

--tabname:表名

--colname:column

--partname:分区名

--stattab:统计表名,如果为null,则从数据字典中取

--statid:stattabid(stattabnull时才需指定)

--cascade_parts:如果指定的表是分区表且partnamenull,此值为TRUE时会删除所有指定字段分区的统计信息。

--statown:stattabowner

--no_invalidate:如设为TRUE,相关的游标不失效。

--force:When value of this argument is TRUE, deletes column statistics even if locked

 

2. DELETE_DATABASE_STATS

此过程删除数据库中所有TABLE的统计信息

语法:

DBMS_STATS.DELETE_DATABASE_STATS (

stattabVARCHAR2 DEFAULT NULL,

statidVARCHAR2 DEFAULT NULL,

statownVARCHAR2 DEFAULT NULL,

no_invalidateBOOLEANDEFAULT to_no_invalidate_type (

get_param('NO_INVALIDATE')),

forceBOOLEANDEFAULT FALSE);

 

3DELETE_DICTIONARY_STATS

此过程删除'SYS', 'SYSTEM' and RDBMS component schemas的统计信息

 

分析表中的index

execute dbms_stats.gather_table_stats(ownname => 'tab',tabname => 'HWM',method_opt =>'for all indexed columns size auto');

分析指定列 buket 5

 execute dbms_stats.gather_table_stats(ownname => 'LINYU',tabname => 'HWM',method_opt =>'for columns OWNER size 5');

收集指定column的统计信息时,会自动把对应的index的信息收集起来.

删除指定表的统计信息

execute dbms_stats.delete_table_stats(ownname => 'LINYU',tabname => 'HWM');

删除指定列

execute dbms_stats.delete_column_stats(ownname => 'LINYU',tabname => 'HWM',colname => 'OWNER');

 

例子:

 

分析表中的index

execute dbms_stats.gather_table_stats(ownname => 'tab',tabname => 'HWM',method_opt =>'for all indexed columns size auto');

 

分析指定列 buket 5

 execute dbms_stats.gather_table_stats(ownname => 'LINYU',tabname => 'HWM',method_opt =>'for columns OWNER size 5');

收集指定column的统计信息时,会自动把对应的index的信息收集起来.

 

删除指定表的统计信息

execute dbms_stats.delete_table_stats(ownname => 'LINYU',tabname => 'HWM');

 

删除指定列

execute dbms_stats.delete_column_stats(ownname => 'LINYU',tabname => 'HWM',colname => 'OWNER');

分享到:
评论

相关推荐

    使用dbms_stats包手工收集统计信息

    Oracle 数据库中使用 dbms_stats 包手动收集统计信息 在 Oracle 数据库中,dbms_stats 包提供了一种手动收集统计信息的方式,包括基于表、用户和索引的统计信息。通过使用 dbms_stats 包,我们可以手动收集统计信息...

    DBMS_STATS.GATHER_TABLE_STATS详解.pdf

    `DBMS_STATS.GATHER_TABLE_STATS` 是 Oracle 数据库中的一个重要过程,主要用于收集表、列和索引的统计信息,这些统计信息对于优化器选择合适的执行计划至关重要。该过程允许数据库管理员通过一系列参数来灵活控制...

    ORACLE DBMS STATS ERROR

    - `PLS-00302: component 'IS_STATS_FROM_UPGRADE' must be declared` - `ORA-04063: package body "SYS.DBMS_REGISTRY_SYS" has errors` - `ORA-04063: package body "SYS.DBMS_STATS" has errors` 这些错误表明`...

    Metalink_DBMS_STATS.doc

    然而,随着Oracle版本的发展,DBMS_STATS逐渐成为更推荐的选择,因为它提供了更准确的统计信息和并行收集统计的能力。 **从ANALYZE到DBMS_STATS的迁移** Oracle 8i以来,数据库提供了两种统计信息收集方式:...

    Oracle统计分析-dbms_stats.pdf

    Oracle 统计分析-dbms_stats.pdf Oracle 中的统计分析对于数据库的性能至关重要。dbms_stats 是 Oracle 提供的一个统计分析工具,能够良好地估计统计数据,特别是针对较大的分区表,并且能获得更好的统计结果,最终...

    dbms_stats.docx

    ### DBMS_STATS在Oracle数据库中的应用 #### 一、DBMS_STATS概述 DBMS_STATS是Oracle提供的一款功能强大的工具包,主要用于收集表和索引的统计信息,进而帮助Oracle的Cost-Based Optimizer (CBO)生成更为高效的执行...

    Re-post: DBMS_XPLAN : Display Oracle Execution Plans

    标题“DBMS_XPLAN: 显示Oracle执行计划”是一个关于Oracle数据库系统中用于分析SQL查询执行性能的重要工具的讨论。这个工具允许用户查看SQL语句的执行计划,从而理解数据库如何处理这些语句,以及哪些操作可能影响...

    Oracle 11g收集各种统计信息(DBMS_STAT)

    Oracle 11g中的DBMS_STATS包是用于收集数据库对象统计信息的重要工具,这些统计信息对于Oracle的优化器来说至关重要,因为它们影响到查询执行计划的选择。在Oracle 7版本中,analyze语句被用来收集统计信息,但在...

    Oracle PL/SQL常用47个工具包

    18. **DBMS_STATS.GATHER_SCHEMA_STATS**: 收集整个模式的统计信息,优化性能。 19. **DBMS_PROFILER**: 性能分析工具,追踪PL/SQL代码的执行时间。 20. **DBMS_METADATA_DIFF**: 比较并显示两个数据库对象之间的...

    oracle DBA_TAB_MODIFICATIONS 刷新

    执行此操作后,即使手动调用 `DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO` 来刷新信息,DBA_TAB_MODIFICATIONS 也不会显示任何记录。 其次,未提交的DML操作也会被记录在DBA_TAB_MODIFICATIONS中,但当事务回滚时...

    Oracle内置包_reference

    DBMS_STATS包用于收集和管理表、索引的统计信息,这些信息被Oracle的查询优化器用来选择最佳的执行计划。 以上只是Oracle内置包的一部分,实际上,Oracle还提供了许多其他的包,如DBMS_OUTPUT、DBMS_METADATA等,...

    oracle-认证之管理统计信息

    - 使用`BEGIN dbms_scheduler.disable('GATHER_STATS_JOB'); END;`来禁用自动收集任务。 ##### 2. 高度变化的表 - **处理方式**: - 将这些表上的统计信息设置为`NULL`,当Oracle遇到没有统计信息的对象时,会...

    Oracle内置包的使用方法.rar

    `DBMS_STATS.GATHER_TABLE_STATS`用于收集表的统计信息,`DBMS_STATS.PUSH_SCHEMA_STATS`将统计信息推送到数据字典。 13. **DBMS_APPLICATION_INFO**: 在PL/SQL程序中设置和查询应用信息,如客户端信息和工作负载...

    Oracle中比对2张表之间数据是否一致的几种方法

    EXEC dbms_stats.gather_table_stats('MACLEAN', 'TEST1', cascade => TRUE); ``` 3. **创建数据库链接**: 创建一个数据库链接连接到目标端: ```sql CREATE DATABASE LINK maclean_connect_to_maclean ...

    Oracle更新分析

    本文将深入探讨Oracle更新分析的关键概念和技术细节,包括如何利用`dbms_stats`包进行统计信息收集、不同选项的意义以及它们对SQL执行效率的影响。 #### 一、Oracle统计信息的重要性 Oracle数据库中的统计信息对于...

    ORACLE 数据库的统计数据及优化

    本文将重点探讨Oracle数据库中的统计数据及其优化策略,特别是通过使用`dbms_stats`包来提升SQL查询性能。 #### 二、Oracle数据库的统计数据 统计数据是指Oracle数据库中关于表、索引等对象的数据分布信息。这些...

    Oracle运维最佳实践-下.pdf 带书签

    - 使用`DBMS_STATS.GATHER_INDEX_STATS`重新收集索引统计信息。 - **2.1.22 研究B-Tree索引结构的脚本** - B-Tree索引是Oracle中最常用的索引类型之一。 - 本书提供了一个脚本来展示B-Tree索引的内部结构。 - ...

    Analyze_Oracle_Table.rar_Table_analyze orac_analyze orac_oracle

    "orac_analyze"和"oracle_analyze_tab"可能是指Oracle中的DBMS_STATS包,这是一个PL/SQL包,提供了用于收集和管理统计信息的接口。DBMS_STATS包允许我们自定义分析的粒度,比如可以分析整个表,也可以分析表的部分...

    性能调优分析之:Oracle SQL执行计划报告生成器

    Oracle SQL执行计划分析器功能的创建3步曲: 1 首先,编译XYG_ALD_SESS_PKG的Package头。 (XYG_ALD_SESS_PKG.sql) 2 接着要建立好下面的4个视图对象。因为XYG_ALD_SESS_PKG包体会用到。(View Create Script v...

Global site tag (gtag.js) - Google Analytics