`
jayyanzhang2010
  • 浏览: 377769 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

DBMS_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分析表的时候,我们经常要保存之前的统计信息,以防分析后导致系统性能低下然后进行快速恢复。
首先创建一个备份表,该表是用来保存之前的统计信息

 

Sql代码  收藏代码
  1. BEGIN  
  2.   --创建统计信息备份表  
  3.   DBMS_STATS.CREATE_STAT_TABLE(OWNNAME => USER,  
  4.                                STATTAB => 'stat_carmot_develop');  
  5.   --导出统计信息到备份表  
  6.   DBMS_STATS.EXPORT_SCHEMA_STATS(OWNNAME => USER,  
  7.                                  STATTAB => 'stat_carmot_develop',  
  8.                                  STATOWN => USER);  
  9.   --删除统计信息  
  10.   DBMS_STATS.DELETE_SCHEMA_STATS(USER);  
  11.   --导入统计信息  
  12.   DBMS_STATS.IMPORT_SCHEMA_STATS(USER'stat_carmot_develop');  
  13.   --收集统计信息  
  14.   DBMS_STATS.GATHER_SCHEMA_STATS(USER);  
  15.   --恢复统计信息  
  16.   DBMS_STATS.RESTORE_SCHEMA_STATS(OWNNAME         => USER,  
  17.                                   AS_OF_TIMESTAMP => SYSTIMESTAMP - 0.5,  
  18.                                   FORCE           => TRUE);  
  19. END;  
分享到:
评论

相关推荐

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

    dbms_stats.gather_schema_stats 过程时,如果你想要知道自从上一次分析统计数据以来,发生了多少次插入、更新和删除操作,可以使用 alter table xxx monitoring 命令,Oracle 会用 dba_tab_modifications 视图来...

    DBMS_STATS.GATHER_TABLE_STATS详解.pdf

    2. **对于非分区表**:同样推荐使用 `DBMS_STATS`,因为它支持并行处理、自动分析等功能,相比 `ANALYZE` 更加准确且高效。 ##### 示例 ```sql EXECUTE DBMS_STATS.GATHER_TABLE_STATS( ownname =&gt; 'OWNER', ...

    Oracle统计分析-dbms_stats.pdf

    dbms_stats 是 Oracle 提供的一个统计分析工具,能够良好地估计统计数据,特别是针对较大的分区表,并且能获得更好的统计结果,最终制定出速度更快的 SQL 执行计划。 dbms_stats 的使用可以分为两个阶段:收集统计...

    ORACLE DBMS STATS ERROR

    在Oracle数据库中,`DBMS_STATS` 是一个重要的包,它用于收集和管理表、索引和其他数据库对象的统计信息,这些信息用于优化器选择执行查询的最佳执行计划。然而,当出现错误“ORA-04063: package body 'SYS.DBMS_...

    dbms_stats.docx

    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)

    DBMS_STATS的主要功能是分析表、索引和其他数据库对象,以获取关于数据分布和对象大小的信息。这些统计信息包括行数、块数、空闲空间、最大值、最小值、唯一值数量以及索引的分布情况等。这些统计信息被存储在数据...

    Oracle PL/SQL常用47个工具包

    13. **DBMS_STATS**: 用于收集和管理表和索引的统计信息,优化查询计划。 14. **DBMS_ERROR_LOG**: 将错误信息记录到表或文件,便于问题排查。 15. **DBMS_APPLICATION_INFO**: 用于设置和查询应用程序上下文信息...

    Oracle更新分析

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

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

    1. **高级统计功能**:`dbms_stats`可以更好地处理大型表和分区表,提供更精确的估计。 2. **自动化程度高**:可以通过设置不同的选项来自动决定哪些表需要更新统计数据,减少维护工作量。 3. **直方图统计**:支持...

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

    - 使用`DBMS_STATS.GET_TABLES_STATS`来获取表的统计信息。 - 使用`DBMS_STATS.MODIFY_COLUMN_STATISTICS`修改特定列的直方图设置。 - **2.1.16 IO优化--db_writer_processes & dbwr_io_slaves对比** - 本书对比...

    Oracle内置包_reference

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

    十万个为什么_Oracle.docx

    - 运行`dbms_stats.gather_table_stats`存储过程来收集表的统计信息。例如,针对特定表,你可以使用以下语法: ```sql execute dbms_stats.gather_table_stats('数据库用户名', '表名', estimate_percent =&gt; DBMS...

    性能调优分析之: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...

    session级别的statspack

    3. **分析数据**:在收集了足够多的快照后,使用`DBMS_STATS.REPORT_SESSION_STATS`或`DBMS_STATS.REPORT_ANALYSIS`来生成报告。这些报告会显示性能指标的变化,帮助我们识别性能问题。 4. **优化与调整**:根据...

    Oralce11g数据库常见内置程序包

    1. **DBMS_SPACE**:用于管理和分析表空间使用情况。 2. **DBMS_STATS**:提供统计信息收集工具,有助于性能优化。 3. **DBMS_MONITOR**:用于监控会话活动和资源使用情况。 4. **DBMS_AUDIT_MGMT**:管理审计策略和...

    oracle10G数据库性能监控与优化详解

    `DBMS_STATS.gather_table_stats()`和`DBMS_STATS.gather_schema_stats()`过程可用于分析单个表或整个模式,参数如`degree`(并行度)、`estimate_percent`(采样比例)和`cascade`(级联收集)可根据实际情况调整。...

Global site tag (gtag.js) - Google Analytics