oracle统计信息

Posted andymdcc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle统计信息相关的知识,希望对你有一定的参考价值。

oracle统计信息

基础

统计信息相关

1.哪种优化器模式需要统计信息收集,ALL_ROWS

目前O3建议无论模式都进行统计信息收集,部分查询采取的是all_rows模式

--查看当前数据库CBO优化方式,默认all_rows方式CBO
show parameter optimizer_mode;  
--修改优化器模式
alter system set optimizer_mode=all_rows scope=both;

2.查询用户统计信息收集情况

# sql
select last_analyzed,table_name,owner,num_rows,sample_size from dba_tables where owner=‘SCOTT‘;

查询结果

字段名 对应
LAST_ANALYZED 上次时间
TABLE_NAME 表名
OWNER 用户
NUM_ROWS 当前条数
SAMPLE_SIZE 统计信息条数

3.什么是手工收集

使用DBMS_STATS包手工收集统计数据,其实自动收集的gather_stats_job作业本质上也是使用包来实现收集的,区别看是否是oralce自动执行的内部行为。

dbms_stats包提供几种过程来统计不同粒度的数据,分为统计数据库,模式,表以及索引

解释
gather_database_statistics 为全库表的表统计数据
gather_schema_statistics 为某个模式统计数据
gather_table_statistics 为某个特定的表收集统计数据
gather_index_statistics 为某个索引表统计数据

统计数据会存储在***dba_tab_statistics*** 和 ***dba_tab_col_statistics***数据字典中

手工收集举例

  1. 为模式trade的所有表统计数据
  1. exec dbms_stats.gather_schema_stats(ownname => ‘TRADE‘); 
  1. 为TRADE下面的表tstockinfo统计数据
  1. exec dbms_stats.gather_table_stats( ‘TRADE‘,‘tstockinfo‘); 
  1. dept的索引统计数据
  1. select index_name,table_name from dba_indexes where owner =‘SCOTT‘
  2. exec dbms_stats.gather_index_stats(‘SCOTT‘,‘PK_DEPT‘); 

注:

  1. show parameter job_queue_processes; 
  2. --如果该参数为0,则统计信息包不会工作, 
  3. --需要设置参数 
  4. alter system set job_queue_processes=20 scope=both

手工收集整个数据库统计信息

  1. begin 
  2. dbms_stats.gather_database_stats(estimate_percent=>null); 
  3. edn; 





















以上是关于oracle统计信息的主要内容,如果未能解决你的问题,请参考以下文章

oracle表的统计信息完全正确,执行计划无故改变。原厂人员如是回复

oracle11g怎么不自动收集统计信息

[统计信息]1.Oracle统计信息概述

[统计信息]1.Oracle统计信息概述

Oracle里收集与查看统计信息的方法

五 Oracle里的统计信息