Oracle统计信息收集

Oracle 统计信息收集

创新互联主要从事成都网站建设、网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务平房,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220

一: 收集统计信息
二:锁定统计信息
三: 删除统计信息
四:导出/导入统计信息
五:查询统计信息

六:统计信息官方文档

一:收集统计信息
(1)用户级别
例1:
begin
  dbms_stats.gather_schema_stats(ownname          => UPPER(OWNER_NAME),
                                 estimate_percent => 100,
                                 method_opt       => 'FOR ALL INDEXED COLUMNS',
                                 cascade          => TRUE);
end;
例2:
exec dbms_stats.gather_schema_stats('HR');

(2) 表级别
EXEC DBMS_STATS.GATHER_TABLE_STATS('HR', 'T1'); 
EXEC DBMS_STATS.GATHER_TABLE_STATS('OWNER','TABLE',estimate_percent=>30,CASCADE=> TRUE);
EXEC DBMS_STATS.GATHER_TABLE_STATS('SH', 'SALES', method_opt => 'FOR COLUMNS (empno, deptno)'); 
EXEC DBMS_STATS.GATHER_TABLE_STATS('SH', 'SALES', method_opt => 'FOR COLUMNS (sal+comm)');
analyze table abc compute statistics;
analyze table abc estimate statistics sample 20 percent;
analyze table tablename compute statistics for all indexes;
---analyze table  compute statistics  = analyze table compute statistics for table for all indexes for all columns; 

---直方图
exec dbms_stats.gather_table_stats('chen','test1',method_opt=>'for columns col1 size AUTO');
exec dbms_stats.gather_table_stats('chen','test1',method_opt=>'for columns (ACCYEAR,ACCMONTH) size AUTO');
analyze table gl_detail compute statistics for columns prepareddatev size 254;

二:锁定统计信息
exec dbms_stats.lock_table_stats(ownname => user,tabname => table_name);

三: 删除统计信息
begin
  dbms_stats.delete_table_stats(ownname => 'CHEN', tabname => 'TEST1');
end;

ANALYZE TABLE TEST1 DELETE STATISTICS;
---删除加锁定
BEGIN  
    DBMS_STATS.DELETE_TABLE_STATS('HR','ORDERS');  
    DBMS_STATS.LOCK_TABLE_STATS('HR','ORDERS');  
END; 

四:导出/导入统计信息
(1) 首先创建一个分析表,该表是用来保存之前的分析值:
begin
  dbms_stats.create_stat_table(ownname => 'CHEN', stattab => 'STAT_TABLE',cascade => true);
end;
(2) 导出表分析信息到stat_table中
begin
  dbms_stats.export_table_stats(ownname => 'CHEN',
                                tabname => 'T1',
                                stattab => 'STAT_TABLE');
end;
(3)开始更新T1表统计信息
begin
  dbms_stats.gather_table_stats(ownname => 'CHEN',
                                tabname => 'T1',
                                cascade => true);
end;
(4)删除分析信息
begin
  dbms_stats.delete_table_stats(ownname => 'CHEN', tabname => 'T1');
end;
(5)导入分析信息
begin
  dbms_stats.import_table_stats(ownname => 'CHEN',
                                tabname => 'T1',
                                stattab => 'STAT_TABLE');
end;

五:查询统计信息
(1)查看表统计信息
DBA_TABLES
DBA_TAB_STATISTICS
(2) 查看列统计信息
DBA_TAB_COL_STATISTICS
DBA_TAB_COLUMNS
(3)查看索引统计信息
DBA_IND_STATISTICS

六:统计信息官方文档

http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/toc.htm
http://docs.oracle.com/cd/E11882_01/server.112/e41573/stats.htm#PFGRF003

Optimizer statistics include the following:

1:Table statistics
(1)Number of rows
(2)Number of blocks
(3)Average row length

2:Column statistics
(1)Number of distinct values (NDV) in column
(2)Number of nulls in column
(3)Data distribution (histogram)
(4)Extended statistics

3:Index statistics
(1)Number of leaf blocks
(2)Levels
(3)Clustering factor

4:System statistics
(1)I/O performance and utilization
(2)CPU performance and utilization

二:Managing Automatic Optimizer Statistics Collection

This section contains the following topics:

1:Enabling and Disabling Automatic Optimizer Statistics Collection
2:Considerations When Gathering Statistics

1:Enabling and Disabling Automatic Optimizer Statistics Collection
If for some reason automatic optimizer statistics collection is disabled, then you can enable it using the ENABLE procedure in the DBMS_AUTO_TASK_ADMIN package:
BEGIN
  DBMS_AUTO_TASK_ADMIN.ENABLE(
     client_name => 'auto optimizer stats collection' 
,    operation   => NULL
,    window_name => NULL
);
END;
/

When you want to disable automatic optimizer statistics collection, you can disable it using the DISABLE procedure in the DBMS_AUTO_TASK_ADMIN package:
BEGIN
  DBMS_AUTO_TASK_ADMIN.DISABLE(
     client_name => 'auto optimizer stats collection'
,    operation   => NULL 
,    window_name => NULL
);
END;
/

GATHER_SCHEMA_STATS Procedures
This procedure gathers statistics for all objects in a schema.

Syntax

DBMS_STATS.GATHER_SCHEMA_STATS ( 
   ownname          VARCHAR2, 
   estimate_percent NUMBER   DEFAULT to_estimate_percent_type 
                                                (get_param('ESTIMATE_PERCENT')), 
   block_sample     BOOLEAN  DEFAULT FALSE, 
   method_opt       VARCHAR2 DEFAULT get_param('METHOD_OPT'),
   degree           NUMBER   DEFAULT to_degree_type(get_param('DEGREE')), 
   granularity      VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), 
   cascade          BOOLEAN  DEFAULT to_cascade_type(get_param('CASCADE')), 
   stattab          VARCHAR2 DEFAULT NULL, 
   statid           VARCHAR2 DEFAULT NULL, 
   options          VARCHAR2 DEFAULT 'GATHER', 
   objlist          OUT      ObjectTab,
   statown          VARCHAR2 DEFAULT NULL, 
   no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type (
                                     get_param('NO_INVALIDATE')),
  force             BOOLEAN DEFAULT FALSE,
  obj_filter_list  ObjectTab DEFAULT NULL);

Parameters

Table 142-43 GATHER_SCHEMA_STATS Procedure Parameters
(1)ownname
Schema to analyze (NULL means current schema);
(2)estimate_percent
Percentage of rows to estimate (NULL means compute): 
The valid range is [0.000001,100]. 
Use the constant DBMS_STATS.AUTO_SAMPLE_SIZE to have Oracle determine the appropriate sample size for good statistics. 
This is the default.
The default value can be changed using the SET_DATABASE_PREFS Procedure, 
SET_GLOBAL_PREFS Procedure, SET_SCHEMA_PREFS Procedure and SET_TABLE_PREFS Procedure.
(3)block_sample
Whether or not to use random block sampling instead of random row sampling.
Random block sampling is more efficient, but if the data is not randomly distributed on disk, 
then the sample values may be somewhat correlated. 
Only pertinent when doing an estimate statistics.
(4)method_opt
Accepts:
FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]
FOR COLUMNS [size clause] column [size_clause] [,column [size_clause]...]
size_clause is defined as size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}
column is defined as column := column_name | extension name | extension
- 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 on which to collect histograms based on data distribution and the workload of the columns.
- SKEWONLY : Oracle determines the columns on which to collect histograms based on the data distribution of the columns.
The default is FOR ALL COLUMNS SIZE AUTO.
The default value can be changed using the SET_DATABASE_PREFS Procedure, SET_GLOBAL_PREFS Procedure, SET_SCHEMA_PREFS Procedure and SET_TABLE_PREFS Procedure.
(5)degree
Degree of parallelism. 
The default for degree is NULL. 
The default value can be changed using the SET_DATABASE_PREFS Procedure, SET_GLOBAL_PREFS Procedure, SET_SCHEMA_PREFS Procedure and SET_TABLE_PREFS Procedure. 
NULL means use the table default value specified by the DEGREE clause in the CREATE TABLE or ALTER TABLE statement. 
Use the constant DBMS_STATS.DEFAULT_DEGREE to specify the default value based on the initialization parameters. 
The AUTO_DEGREE value determines the degree of parallelism automatically. 
This is between 1 (serial execution) and DEFAULT_DEGREE (the system default value based on number of CPUs and initialization parameters) according to the size of the object. 
When using DEGREE=>NULL, DEGREE=>n, or DEGREE=>DBMS_STATS.DEFAULT_DEGREE, the current implementation of DBMS_STATS may use serial execution if the size of the object does not warrant parallel execution.
(6)granularity
Granularity of statistics to collect (only pertinent if the table is partitioned).
'ALL' - Gathers all (subpartition, partition, and global) statistics
'AUTO'- Determines the granularity based on the partitioning type. This is the default value.
'DEFAULT' - Gathers global and partition-level statistics. This option is obsolete, and while currently supported, it is included in the documentation for legacy reasons only. You should use the 'GLOBAL AND PARTITION' for this functionality. Note that the default value is now 'AUTO'.
'GLOBAL' - Gathers global statistics
'GLOBAL AND PARTITION' - Gathers the global and partition level statistics. No subpartition level statistics are gathered even if it is a composite partitioned object.
'PARTITION '- Gathers partition-level statistics
'SUBPARTITION' - Gathers subpartition-level statistics.
(7)cascade
Gather statistics on the indexes as well. 
Using this option is equivalent to running the GATHER_INDEX_STATS Procedure on each of the indexes in the schema in addition to gathering table and column statistics. 
Use the constant DBMS_STATS.AUTO_CASCADE to have Oracle determine whether index statistics to be collected or not. 
This is the default. 
The default value can be changed using the SET_DATABASE_PREFS Procedure, SET_GLOBAL_PREFS Procedure, SET_SCHEMA_PREFS Procedure and SET_TABLE_PREFS Procedure.
(8)stattab
User statistics table identifier describing where to save the current statistics.
(9)statid
User statistics table identifier describing where to save the current statistics.
(10)statid
Identifier (optional) to associate with these statistics within stattab.
(11)options
Further specification of which objects to gather statistics for:
GATHER: Gathers statistics on all objects in the schema.
GATHER AUTO: Gathers all necessary statistics automatically. Oracle implicitly determines which objects need new statistics, and determines how to gather those statistics. When GATHER AUTO is specified, the only additional valid parameters are ownname, stattab, statid, objlist and statown; all other parameter settings are ignored. Returns a list of processed objects.
GATHER STALE: Gathers statistics on stale objects as determined by looking at the *_tab_modifications views. Also, return a list of objects found to be stale.
GATHER EMPTY: Gathers statistics on objects which currently have no statistics. also, return a list of objects found to have no statistics.
LIST AUTO: Returns a list of objects to be processed with GATHER AUTO.
LIST STALE: Returns list of stale objects as determined by looking at the *_tab_modifications views.
LIST EMPTY: Returns list of objects which currently have no statistics.
(12)objlist
List of objects found to be stale or empty
(13)statown
Schema containing stattab (if different than ownname)
(14)no_invalidate
Does not invalidate the dependent cursors if set to TRUE. 
The procedure invalidates the dependent cursors immediately if set to FALSE. 
Use DBMS_STATS.AUTO_INVALIDATE. to have Oracle decide when to invalidate dependent cursors. 
This is the default. 
The default can be changed using the SET_DATABASE_PREFS Procedure, SET_GLOBAL_PREFS Procedure, SET_SCHEMA_PREFS Procedure and SET_TABLE_PREFS Procedure.
(15)force
Gather statistics on objects even if they are locked
(16)obj_filter_list
A list of object filters. 
When provided, GATHER_SCHEMA_STATS will gather statistics only on objects which satisfy at least one object filter in the list as needed. 
In a single object filter, we can specify the constraints on the object attributes. 
The attribute values specified in the object filter are case- insensitive unless double-quoted. 
Wildcard is allowed in the attribute values. 
Suppose non-NULL values s1, s2, ... are specified for attributes a1, a2, ... in one object filter. 
An object o is said to satisfy this object filter if (o.a1 like s1) and (o.a2 like s2) and ... is true.
See Applying an Object Filter List.
欢迎关注我的微信公众号"IT小Chen",共同学习,共同成长!!!

Oracle 统计信息收集

Oracle 统计信息收集



本文名称:Oracle统计信息收集
标题路径:http://pwwzsj.com/article/gegsdd.html