文档章节

为准确生成执行计划更新统计信息-analyze与dbms_stats

小强斋太
 小强斋太
发布于 2016/11/09 20:06
字数 747
阅读 9
收藏 0

如果我们想让CBO利用合理利用数据的统计信息,正确判断执行任何SQL查询时的最快途径,需要及时的使用analyze命令或者dbms_stats重新统计数据的统计信息.

例如索引跳跃式扫描(INDEX SKIP SCAN)例子中,如果不对表EMPLOYEE 及索引收集一下统计信息,就不是INDEX SKIP SCAN策略了。

在oracle 8i以前,主要是用ANALYZE命令。在ORACLE 8I以后,又引入了DBMS_STATS存储包来进行分析。幸运的是从ORACLE 10G以后,分析工作变成自动的了,这减轻的DBA的负担

分析统计信息

analyze table 一般可以指定分析: 表,所有字段,所有索引字段,所有索引。 若不指定则全部都分析。

---table统计信息
analyze table EMP compute statistics for table;

---column统计信息
analyze table EMP compute statistics for all columns;

---索引统计信息
analyze table EMP compute statistics for all indexes;

---索引列统计信息
analyze table EMP compute statistics for all indexed columns; 

---效果等于 analyze table tablename compute statistics for table for all indexes for all columns
analyze table tablename compute statistics

查看统计信息

for table的统计信息存在于视图:user_tables 、all_tables、dba_tables

for all indexes的统计信息存在于视图: user_indexes 、all_indexes、dba_indexes

for all columns的统计信息存在于试图:user_tab_columns、all_tab_columns、dba_tab_columns

SCOTT@PDBORCL> analyze table EMP compute statistics for table;
表已分析。

SCOTT@PDBORCL> analyze table EMP compute statistics for  all columns;
表已分析。

SCOTT@PDBORCL> analyze table EMP compute statistics for  all indexes;
表已分析。

SCOTT@PDBORCL> select table_name,num_rows from user_tables where table_name = 'EMP';
TABLE_NAME    NUM_ROWS
----------- -----------
  EMP            14

SCOTT@PDBORCL> select index_name,uniqueness  from user_indexes where table_name = 'EMP';
INDEX_NAME   UNIQUENES
--------    ---------
PK_EMP       UNIQUE

SCOTT@PDBORCL> select column_name,data_type  from user_tab_columns where table_name = 'EMP' ;

COLUMN_NAME   DATA_TYPE 
-------------------------
EMPNO        NUMBER
ENAME        VARCHAR2
JOB          VARCHAR2
MGR          NUMBER
HIREDATE     DATE
SAL          NUMBER
COMM         NUMBER
DEPTNO       NUMBER


已选择 8 行。

SCOTT@PDBORCL> ^A

删除统计信息

会删除emp所有的statistics。

analyze table emp delete statistics

删除只是某些列变为空,如emp表的行数为空了

SCOTT@PDBORCL> analyze table emp compute statistics;

表已分析。

SCOTT@PDBORCL> select table_name,num_rows from user_tables where table_name = 'EMP';

TABLE_NAME    NUM_ROWS
--------    ----------
EMP         14

SCOTT@PDBORCL> analyze table emp delete statistics;

表已分析。

SCOTT@PDBORCL> select table_name,num_rows from user_tables where table_name = 'EMP';

TABLE_NAME   NUM_ROWS
-------- ----------
EMP

SCOTT@PDBORCL>

dbms_stats

dbms_stats能良好地估计统计数据(尤其是针对较大的分区表),并能获得更好的统计结果,最终制定出速度更快的SQL执行计划。

语法:

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 );

dbms_stats.delete_table_stats 用于删除统计信息。

例子:

------删除统计信息SCOTT@PDBORCL> exec dbms_stats.delete_table_stats (ownname => 'scott',tabname => 'emp');

PL/SQL 过程已成功完成。
----查询统计信息
SCOTT@PDBORCL> select table_name,num_rows from user_tables where table_name = 'EMP';

TABLE_NAME NUM_ROWS
-------- ----------
EMP

---获取统计信息SCOTT@PDBORCL> exec dbms_stats.gather_table_stats (ownname => 'scott',tabname => 'emp');

PL/SQL 过程已成功完成。
---重新查新统计信息
SCOTT@PDBORCL> select table_name,num_rows from user_tables where table_name = 'EMP';

TABLE_NAME  NUM_ROWS
-------- ----------
EMP          14

SCOTT@PDBORCL>

参考:

为准确生成执行计划更新统计信息-analyze

http://docs.oracle.com/database/121/TGSQL/tgsql_stats.htm#TGSQL389

本文转载自:http://www.cnblogs.com/xqzt/p/4467702.html

共有 人打赏支持
小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
私信 提问
oracle数据库优化之统计信息

1.统计信息简介 统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息。比如,表的行数,块数,平均每行的大小,索引的leaf blocks,索引字段的行数,不同值的大小等,...

18620626259
2017/09/06
0
0
DBMS_STATS.GATHER_TABLE_STATS详解

由于Oracle的优化器是CBO,所以对象的统计数据对执行计划的生成至关重要! 作用:DBMSSTATS.GATHERTABLE_STATS统计表,列,索引的统计信息(默认参数下是对表进行直方图信息收集,包含该表的自身...

Zero零_度
2014/12/17
0
0
[Oracle] 统计信息和dbms_stats包

1、统计信息的作用 Oracle基于CBO的优化器在生成执行计划时,很大程度上依赖于统计信息,你可以把CBO理解为一个复杂的数学模型,而统计信息是它最主要的输入,执行计划是输出,如果输入都不准...

长平狐
2013/06/03
179
0
[Oracle] 统计信息和dbms_stats包

1、统计信息的作用 Oracle基于CBO的优化器在生成执行计划时,很大程度上依赖于统计信息,你可以把CBO理解为一个复杂的数学模型,而统计信息是它最主要的输入,执行计划是输出,如果输入都不准...

长平狐
2013/06/03
243
0
innodb的统计信息对optimizer成本预估影响实例

实为吾之愚见,望诸君酌之!闻过则喜,与君共勉 第一节 innodb引擎统计信息 mysql会依据innodb表的数据变化阈值来自动收集和计算表的统计信息(innodbstatsautorecalc)以供优化器使用,统计信息...

手辨
2017/08/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

深入理解Java PriorityQueue

ava中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度,将让读者建立对...

java菜分享
3分钟前
0
0
玩手机与做实验

看过这样一个故事:说的是在二十世纪二十年代初的一个深夜,担任英国剑桥大学卡文迪许实验室主任的卢瑟福来实验室检查,发现一位学生还在做实验。卢瑟福就问他:“你上午做什么了?”学生回答...

Bob2100
13分钟前
0
0
Kafka流式处理

Kafka Streams 初识流式处理 什么是数据流 数据流(也叫事件流)是无边界数据集的抽象表示。无边界意味着无限和持续增长。无边界数据集之所以是无限的,是因为随着时间的推移,新记录会不断加...

东都大狼狗
22分钟前
2
0
Mysql主从复制(拓展博客文章扩充知识面)

#不停库不锁表在线主从配置 使用 Xtrabackup 在线对MySQL做主从复制 1.数据量大的话还是建议使用工具例如xtrabackup,mysqldump比较适合操作10G以下的数据备份复制。 2.做业务之前考虑清楚具...

robertt15
27分钟前
1
0
docker快速搭建几个常用的第三方服务

本次和大家分享的内容是使用docker快速搭建工作中常用的第三方的服务,对于有一些互联网背景的公司来说,以下几个服务都是很需要的:redis,rabbit,elasticsearch; 如果想学习Java工程化、...

编程SHA
59分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部