前言:
oracle sql如何生成合理的执行计划,CBO选取sql最佳执行计划的关键,即确保sql所引用的表及索引相关的统计信息正确。那么oracle如何收集统计信息,它是采用dbms_stats包来实现收集统计信息。
dbms_stats包功能十分强大,我们依次展开测试与学习,希望对大家有所补益。
测试步骤:
1,数据库版本
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE 10.2.0.5.0 Production
TNS for Linux: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 - Production
SQL>
2,创建测试表并插入数据
SQL> conn tbs_11204/system
Connected.
SQL> create table t_stat(a int,b int);
Table created.
SQL> insert into t_stat select mod(level,5),mod(level,3)+2 from dual connect by level<=200000;
200000 rows created.
SQL> commit;
Commit complete.
SQL> exec dbms_stats.gather_table_stats(user,'t_stat',cascade=>true);
PL/SQL procedure successfully completed.
3,创建存储表统计信息的表
SQL> conn tbs_11204/system
Connected.
SQL> exec dbms_stats.create_stat_table('tbs_11204','stat_t_stat');
PL/SQL procedure successfully completed.
SQL> desc stat_t_stat;
Name Null? Type
----------------------------------------- -------- ----------------------------
STATID VARCHAR2(30)
TYPE CHAR(1)
VERSION NUMBER
FLAGS NUMBER
C1 VARCHAR2(30)
C2 VARCHAR2(30)
C3 VARCHAR2(30)
C4 VARCHAR2(30)
C5 VARCHAR2(30)
N1 NUMBER
N2 NUMBER
N3 NUMBER
N4 NUMBER
N5 NUMBER
N6 NUMBER
N7 NUMBER
N8 NUMBER
N9 NUMBER
N10 NUMBER
N11 NUMBER
N12 NUMBER
D1 DATE
R1 RAW(32)
R2 RAW(32)
CH1 VARCHAR2(1000)
SQL> select count(*) from stat_t_stat;
COUNT(*)
----------
0
4,export_table_stats导出表的统计信息到存储统计信息的表
(注:可以级联导出表的列及索引统计也导出)
SQL> exec dbms_stats.export_table_stats('tbs_11204','t_stat',null,'stat_t_stat',null,true,'tbs_11204');
PL/SQL procedure successfully completed.
SQL> select count(*) from stat_t_stat;
COUNT(*)
----------
3
5,从存储统计信息的表导入统计回表
SQL> exec dbms_stats.import_table_stats('tbs_11204','t_stat',null,'stat_t_stat',null,true,'tbs_11204',true,true);
PL/SQL procedure successfully completed.
小结:
1,本文主要测试了dbms_stats包的过程create_stat_table,export_table_stats,import_table_stats
2, create_stat_table用于创建存储表统计信息的表
3, export_table_stats用于导出表的统计信息到由create_stat_table创建的存储表统计信息的表
4, import_table_stats用于导入create_stat_table创建的存储表统计信息的表到对应的表
5, export_table_stats有一些选项如:partable适用于分区表,cascade适用于同步级联导出表和表列及索引的统计信息
no_invalidate如果配置为true,不会马上令依赖于表的附属对象无效,而是让ORACLE自行判断何时令表附属对象失效
force选项用于如果表的统计正被锁定,也可以强行导出或导入表的统计信息
扩展阅读:
1,oracle dbms_stats语法
学习方法与思路:
1,获取oracle的官方文档
2,定位与你学习相关的官方文档(注:马上定位到所需的具体文档也是一种能力)
3,快速浏览搜集到的官方文档,掌握概要信息,准备进行针对性测试
4,整理测试文档,丰富自己的知识体系
5,到MOS更多搜索与dbms_stats相关的文档或相关bug,便于在生产实施中更好评估与规避风险
|
|