作用: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分析表的时候,我们经常要保存之前的统计信息,以防分析后导致系统性能低下然后进行快速恢复。
首先创建一个备份表,该表是用来保存之前的统计信息
- BEGIN
- --创建统计信息备份表
- DBMS_STATS.CREATE_STAT_TABLE(OWNNAME => USER,
- STATTAB => 'stat_carmot_develop');
- --导出统计信息到备份表
- DBMS_STATS.EXPORT_SCHEMA_STATS(OWNNAME => USER,
- STATTAB => 'stat_carmot_develop',
- STATOWN => USER);
- --删除统计信息
- DBMS_STATS.DELETE_SCHEMA_STATS(USER);
- --导入统计信息
- DBMS_STATS.IMPORT_SCHEMA_STATS(USER, 'stat_carmot_develop');
- --收集统计信息
- DBMS_STATS.GATHER_SCHEMA_STATS(USER);
- --恢复统计信息
- DBMS_STATS.RESTORE_SCHEMA_STATS(OWNNAME => USER,
- AS_OF_TIMESTAMP => SYSTIMESTAMP - 0.5,
- FORCE => TRUE);
- END;
相关推荐
dbms_stats.gather_schema_stats 过程时,如果你想要知道自从上一次分析统计数据以来,发生了多少次插入、更新和删除操作,可以使用 alter table xxx monitoring 命令,Oracle 会用 dba_tab_modifications 视图来...
2. **对于非分区表**:同样推荐使用 `DBMS_STATS`,因为它支持并行处理、自动分析等功能,相比 `ANALYZE` 更加准确且高效。 ##### 示例 ```sql EXECUTE DBMS_STATS.GATHER_TABLE_STATS( ownname => 'OWNER', ...
dbms_stats 是 Oracle 提供的一个统计分析工具,能够良好地估计统计数据,特别是针对较大的分区表,并且能获得更好的统计结果,最终制定出速度更快的 SQL 执行计划。 dbms_stats 的使用可以分为两个阶段:收集统计...
在Oracle数据库中,`DBMS_STATS` 是一个重要的包,它用于收集和管理表、索引和其他数据库对象的统计信息,这些信息用于优化器选择执行查询的最佳执行计划。然而,当出现错误“ORA-04063: package body 'SYS.DBMS_...
DBMS_STATS是Oracle提供的一款功能强大的工具包,主要用于收集表和索引的统计信息,进而帮助Oracle的Cost-Based Optimizer (CBO)生成更为高效的执行计划。通过准确的统计信息,可以有效地减少查询响应时间和提高系统...
标题“DBMS_XPLAN: 显示Oracle执行计划”是一个关于Oracle数据库系统中用于分析SQL查询执行性能的重要工具的讨论。这个工具允许用户查看SQL语句的执行计划,从而理解数据库如何处理这些语句,以及哪些操作可能影响...
DBMS_STATS的主要功能是分析表、索引和其他数据库对象,以获取关于数据分布和对象大小的信息。这些统计信息包括行数、块数、空闲空间、最大值、最小值、唯一值数量以及索引的分布情况等。这些统计信息被存储在数据...
13. **DBMS_STATS**: 用于收集和管理表和索引的统计信息,优化查询计划。 14. **DBMS_ERROR_LOG**: 将错误信息记录到表或文件,便于问题排查。 15. **DBMS_APPLICATION_INFO**: 用于设置和查询应用程序上下文信息...
本文将深入探讨Oracle更新分析的关键概念和技术细节,包括如何利用`dbms_stats`包进行统计信息收集、不同选项的意义以及它们对SQL执行效率的影响。 #### 一、Oracle统计信息的重要性 Oracle数据库中的统计信息对于...
1. **高级统计功能**:`dbms_stats`可以更好地处理大型表和分区表,提供更精确的估计。 2. **自动化程度高**:可以通过设置不同的选项来自动决定哪些表需要更新统计数据,减少维护工作量。 3. **直方图统计**:支持...
- 使用`DBMS_STATS.GET_TABLES_STATS`来获取表的统计信息。 - 使用`DBMS_STATS.MODIFY_COLUMN_STATISTICS`修改特定列的直方图设置。 - **2.1.16 IO优化--db_writer_processes & dbwr_io_slaves对比** - 本书对比...
DBMS_STATS包用于收集和管理表、索引的统计信息,这些信息被Oracle的查询优化器用来选择最佳的执行计划。 以上只是Oracle内置包的一部分,实际上,Oracle还提供了许多其他的包,如DBMS_OUTPUT、DBMS_METADATA等,...
- 运行`dbms_stats.gather_table_stats`存储过程来收集表的统计信息。例如,针对特定表,你可以使用以下语法: ```sql execute dbms_stats.gather_table_stats('数据库用户名', '表名', estimate_percent => DBMS...
Oracle SQL执行计划分析器功能的创建3步曲: 1 首先,编译XYG_ALD_SESS_PKG的Package头。 (XYG_ALD_SESS_PKG.sql) 2 接着要建立好下面的4个视图对象。因为XYG_ALD_SESS_PKG包体会用到。(View Create Script v...
3. **分析数据**:在收集了足够多的快照后,使用`DBMS_STATS.REPORT_SESSION_STATS`或`DBMS_STATS.REPORT_ANALYSIS`来生成报告。这些报告会显示性能指标的变化,帮助我们识别性能问题。 4. **优化与调整**:根据...
1. **DBMS_SPACE**:用于管理和分析表空间使用情况。 2. **DBMS_STATS**:提供统计信息收集工具,有助于性能优化。 3. **DBMS_MONITOR**:用于监控会话活动和资源使用情况。 4. **DBMS_AUDIT_MGMT**:管理审计策略和...
`DBMS_STATS.gather_table_stats()`和`DBMS_STATS.gather_schema_stats()`过程可用于分析单个表或整个模式,参数如`degree`(并行度)、`estimate_percent`(采样比例)和`cascade`(级联收集)可根据实际情况调整。...