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***数据字典中
手工收集举例
- 为模式trade的所有表统计数据
- exec dbms_stats.gather_schema_stats(ownname => ‘TRADE‘);
- 为TRADE下面的表tstockinfo统计数据
- exec dbms_stats.gather_table_stats( ‘TRADE‘,‘tstockinfo‘);
- dept的索引统计数据
- select index_name,table_name from dba_indexes where owner =‘SCOTT‘;
- exec dbms_stats.gather_index_stats(‘SCOTT‘,‘PK_DEPT‘);
注:
- show parameter job_queue_processes;
- --如果该参数为0,则统计信息包不会工作,
- --需要设置参数
- alter system set job_queue_processes=20 scope=both;
手工收集整个数据库统计信息
- begin
- dbms_stats.gather_database_stats(estimate_percent=>null);
- edn;
- /
以上是关于oracle统计信息的主要内容,如果未能解决你的问题,请参考以下文章