欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Oracle 统计信息

程序员文章站 2023-12-21 18:00:11
Oracle数据库中的统计信息是这样一组数据:它存储在数据字典中,且从多个维度描述了Oracle数据库里对象的详细信息。 CBO会利用这些统计信息来计算目标SQL各种可能的,不同的执行路径的成本,从中选择一条成本最小的执行路径来作为目标SQL的执行计划。 统计信息分为以下六种: 表的统计信息 索引的 ......

oracle数据库中的统计信息是这样一组数据:它存储在数据字典中,且从多个维度描述了oracle数据库里对象的详细信息。 cbo会利用这些统计信息来计算目标sql各种可能的,不同的执行路径的成本,从中选择一条成本最小的执行路径来作为目标sql的执行计划。
统计信息分为以下六种:
表的统计信息
索引的统计信息
列的统计信息
系统统计信息
数据字典统计信息
内部对象统计信息:用于描述oracle数据库里的一些内部表(如x$系列表)的详细信息。

收集统计信息

通常有两种方法
  • 使用analyze命令
  • 使用dbms_stats包
    表、索引、列、数据字典 的统计信息 这两种方法都可收集。 系统统计信息和系统内部对象统计信息只能使用dbms_stats包

analyze命令用法

  1. 以计算模式: analyze table abc compute statistics for table; 会扫描目标对象的所有数据,所以统计结果和实际结果相匹配。
  2. 以估算模式: analyze table abc estimate statistics sample 15 percent for table; 估算模式,估算结果和实际结果不一定完全匹配

dbms_stats包用法

  • gather_table_stats 用于收集目标表、目标表列和目标表上的索引统计信息
  • gather_index_stats 用于收集指定索引的统计信息
  • gather_schema_stats 用于收集指定schema下所有对象的统计信息
  • gather_database_stats 用于收集全库所有对象的统计信息

  1. 估算模式 exec dbms_stats.gather_table_stats(ownname=>'scott' , tabname=>'t2' , estimate_percent=>15 , method_opt=>'for table' , cascade=>false);

  2. 计算模式 exec dbms_stats.gather_table_stats(ownname=>'scott' , tabname=>'t2' , estimate_percent=>100, method_opt=>'for table' , cascade=>false); 或者 exec dbms_stats.gather_table_stats(ownname=>'scott' , tabname=>'t2' , estimate_percent=>null, method_opt=>'for table' , cascade=>false);

analyze和dbms_stats区别

  • analyze命令不能正确地收集分区表的统计信息,而dbms_stats包却可以。
  • analyze命令不能并行收集统计信息,而dbms_stats包却可以。
    dbms_stats包的并行收集是通过手工指定输入参数 degree 来实现的,如对表 t1 并行收集统计信息,同时指定并行度为4:exec dbms_stats.gather_table_stats(ownname=>'scott' , tabname=>'t1' , estimate_percent=>null, method_opt=>'for table' , cascade=>true , degree=>4);
  • dbms_stats包的缺陷是只能收集cbo相关统计信息,不能收集cbo无关的一些额外信息,analyze却可以。

 

 

来自为知笔记(wiz)



上一篇:

下一篇: