`

Oracle:DBMS_STATS.GATHER_TABLE_STATS的语法

 
阅读更多

作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息.

DBMS_STATS.GATHER_TABLE_STATS的语法如下:

DBMS_STATS.GATHER_TABLE_STATS (ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2, estimate_percent NUMBER,   block_sample BOOLEAN, method_opt VARCHAR2, degree NUMBER, granularity VARCHAR2, cascade BOOLEAN, stattab VARCHAR2, statid VARCHAR2,   statown VARCHAR2,   no_invalidate BOOLEAN, force BOOLEAN);

参数说明:

ownname:要分析表的拥有者

tabname:要分析的表名.

partname:分区的名字,只对分区表或分区索引有用.

estimate_percent:采样行的百分比,取值范围[0.000001,100],null为全部分析,不采样. 常量:DBMS_STATS.AUTO_SAMPLE_SIZE是默认值,由oracle决定最佳取采样值.

block_sapmple:是否用块采样代替行采样.

method_opt:决定histograms信息是怎样被统计的.method_opt的取值如下:

for all columns:统计所有列的histograms.

for all indexed columns:统计所有indexed列的histograms.

for all hidden columns:统计你看不到列的histograms

for columns <list> SIZE <N> | REPEAT | AUTO | SKEWONLY:统计指定列的histograms.N的取值范围[1,254]; REPEAT上次统计过的histograms;AUTO由oracle决定N的大小;SKEWONLY multiple end-points with the same value which is what we define by "there is skew in the data

degree:决定并行度.默认值为null.

granularity:Granularity of statistics to collect ,only pertinent if the table is partitioned.

cascace:是收集索引的信息.默认为falase.

stattab指定要存储统计信息的表,statid如果多个表的统计信息存储在同一个stattab中用于进行区分.statown存储统计信息表的拥有者.以上三个参数若不指定,统计信息会直接更新到数据字典.

no_invalidate: Does not invalidate the dependent cursors if set to TRUE. The procedure invalidates the dependent cursors immediately if set to FALSE.

force:即使表锁住了也收集统计信息.

例子:

execute dbms_stats.gather_table_stats(ownname => 'owner',tabname => 'table_name' ,estimate_percent => null ,method_opt => 'for all indexed columns' ,cascade => true);

例如:

在使用DBMS_STATS分析表的时候,我们经常要保存之前的分析,以防分析后导致系统性能低下然后进行快速恢复。

1、首先创建一个分析表,该表是用来保存之前的分析值:

SQL> begin
2 dbms_stats.create_stat_table(ownname=>'TEST',stattab=>'STAT_TABLE');
3 end;
4 /

PL/SQL 过程已成功完成。

SQL> begin
2 dbms_stats.gather_table_stats(ownname=>'TEST',tabname=>'T1');
3 end;
4 /

PL/SQL 过程已成功完成。


2、导出表分析信息到stat_table中

SQL> begin
2 dbms_stats.export_table_stats(ownname=>'TEST',tabname=>'T1',stattab=>'STAT_TABLE');
3 end;
4 /

PL/SQL 过程已成功完成。

SQL> select count(*) from TEST.STAT_TABLE;

COUNT(*)
----------
         4

EXPORT_COLUMN_STATS:导出列的分析信息
EXPORT_INDEX_STATS:导出索引分析信息
EXPORT_SYSTEM_STATS:导出系统分析信息
EXPORT_TABLE_STATS:导出表分析信息
EXPORT_SCHEMA_STATS:导出方案分析信息
EXPORT_DATABASE_STATS:导出数据库分析信息
IMPORT_COLUMN_STATS:导入列分析信息
IMPORT_INDEX_STATS:导入索引分析信息
IMPORT_SYSTEM_STATS:导入系统分析信息
IMPORT_TABLE_STATS:导入表分析信息
IMPORT_SCHEMA_STATS:导入方案分析信息
IMPORT_DATABASE_STATS:导入数据库分析信息
GATHER_INDEX_STATS:分析索引信息
GATHER_TABLE_STATS:分析表信息,当cascade为true时,分析表、列(索引)信息
GATHER_SCHEMA_STATS:分析方案信息
GATHER_DATABASE_STATS:分析数据库信息
GATHER_SYSTEM_STATS:分析系统信息

4、删除分析信息

SQL> begin
2 dbms_stats.delete_table_stats(ownname=>'TEST',tabname=>'T1');
3 end;
4 /

PL/SQL 过程已成功完成。

SQL> SELECT num_rows,blocks,empty_blocks as empty, avg_space, chain_cnt, avg_row_len FROM dba_tables WHERE owner = 'TEST'
AND table_name = 'T1';

NUM_ROWS     BLOCKS      EMPTY AVG_SPACE CHAIN_CNT AVG_ROW_LEN
---------- ---------- ---------- ---------- ---------- -----------

没有查到分析数据


5、导入分析信息

SQL> begin
2 dbms_stats.import_table_stats(ownname=>'TEST',tabname=>'T1',stattab=>'STAT_TABLE');
3 end;
4 /

PL/SQL 过程已成功完成。

SQL> SELECT num_rows,blocks,empty_blocks as empty, avg_space, chain_cnt, avg_row_len FROM dba_tables WHERE owner = 'TEST'
AND table_name = 'T1';

NUM_ROWS     BLOCKS      EMPTY AVG_SPACE CHAIN_CNT AVG_ROW_LEN
---------- ---------- ---------- ---------- ---------- -----------
      1000          5          0          0          0          16
可以查到分析数据

分享到:
评论

相关推荐

    DBMS_STATS.GATHER_TABLE_STATS详解.pdf

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

    十万个为什么_Oracle.docx

    select 'execute dbms_stats.gather_table_stats(ownname =&gt; ''HAHA'', tabname =&gt; '''||table_name||''', estimate_percent =&gt; DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt =&gt; ''FOR ALL COLUMNS SIZE AUTO'', ...

    oracle-认证之管理统计信息

    - `dbms_stats.gather_table_stats`: 收集表、列和索引的统计信息。 - `dbms_stats.gather_schema_stats`: 收集模式下所有对象的统计信息。 - `dbms_stats.gather_index_stats`: 收集索引的统计信息。 - `dbms_...

    Oracle学习要点记录(包括DML\DDL等数据库管理语句)

    - 使用`DBMS_STATS.GATHER_INDEX_STATS`和`DBMS_STATS.GATHER_TABLE_STATS`包可以收集统计信息,帮助优化查询性能。 - 示例:`DBMS_STATS.GATHER_INDEX_STATS(USER, 'IDX');` - 这条语句收集了用户拥有的名为`IDX...

    ORACLE分页查询效率

    - **使用DBMS_STATS包**:Oracle提供了一个名为DBMS_STATS的包,其中包含了创建统计信息表的CREATE_STAT_TABLE过程。 - **创建统计信息表**:`EXEC DBMS_STATS.CREATE_STAT_TABLE(USER, 'MY_STATISTICS');` - **...

    oracle dba

    执行`DBMS_STATS.GATHER_TABLE_STATS`同样不能直接应用更改。 - D. 正确。通过执行`DBMS_REPAIR.SEGMENT_FIX_STATUS`过程,可以使更改立即生效。 因此,正确答案是**D**。 ### 5. 关于临时表空间组的信息 题目...

    oracle性能优化

    文件可能详细介绍了如何收集和管理这些数据,如GATHER_TABLE_STATS和GATHER_SCHEMA_STATS过程,以及何时应该自动或手动收集统计信息,以确保优化器能做出最佳决策。 4. **Oracle 数据库碎片整理**: 数据库碎片可能...

    Oracle高性能SQL调整+TOEFL核心词汇21天突破

    定期执行DBMS_STATS.GATHER_TABLE_STATS等命令,更新表和索引的统计信息。 7. **监控和诊断**:使用AWR(Automatic Workload Repository)、ASH(Active Session History)等工具收集性能数据,通过分析报告找出...

    orcle数据库的常用命令

    - **优化器统计信息收集**:`dbms_stats.gather_table_stats(, &lt;table_name&gt;);` #### 7. 其他实用命令 - **连接到SQL*Plus**:`sqlplus &lt;username&gt;/;` - **查看当前用户**:`show user;` - **查看当前日期时间**:...

    oracle chm帮助文件下载

    30. **记录数查询**:`COUNT(*)`或`DBMS_STATS.GATHER_TABLE_STATS`可以获取表或分区的记录数。 31. **发送邮件**:Oracle的`UTL_SMTP`包可以用来发送邮件。 32. **写操作系统文件**:`UTL_FILE`包同样可以用来...

    Oracle SQL Tuning.pdf

    这可以通过DBMS_STATS包中的相关过程实现,如GATHER_TABLE_STATS和GATHER_SCHEMA_STATS,以确保统计信息的最新性和准确性。 四、审查执行计划 执行计划是优化器为SQL语句生成的执行策略,其合理性直接影响SQL语句...

    Oracle9i优化器介绍

    DBA应定期执行GATHER_TABLE_STATS和GATHER_INDEX_STATS等命令,以确保统计信息的更新。 10. 优化器限制: 虽然Oracle9i优化器具有强大的功能,但也有其局限性,例如无法处理过于复杂的查询结构或在大量并发操作下...

    oracle机试

    `DBMS_STATS`包用于收集统计信息,`GATHER_TABLE_STATS`过程可以用来收集。关于"核准图信息",可能是指在收集统计时启用或禁用某些特性,例如方法选项(Method_opt)。 3. **创建同义词(Synonym)**: 同义词提供了...

Global site tag (gtag.js) - Google Analytics