Oracle 统计信息

标签: oracle 统计 信息 | 发表时间:2013-12-01 11:34 | 作者:yangeoo
出处:http://www.iteye.com
--Oracle 优化器统计信息

Oracle优化器统计信息描述了关于数据库和相关对象的统计信息,当执行SQL查询时,优化器会使用这些统计信息估算出各种不同的执行计划的资源消耗,
,从而选择最高效的执行计划。当统计信息缺失或者陈旧时,Oracle可能会选择错误的执行计划,导致SQL执行效率低下。

优化器统计信息包括以下部分:

表级别统计信息
1. 数据行数
2. 数据块数。
3. 每行的长度

--相关性能视图
[email protected]> SELECT NUM_ROWS, BLOCKS, AVG_ROW_LEN  FROM USER_TABLES  WHERE TABLE_NAME = 'T';

  NUM_ROWS     BLOCKS AVG_ROW_LEN
---------- ---------- -----------
     14301        200         102


字段的统计信息
1. 唯一值的个数。
2. 空值的个数
3. 数据分布情况(直方图)
4. 相关列统计信息(Extended statistics)

[email protected]> SELECT NUM_DISTINCT,NUM_NULLS,HISTOGRAM FROM USER_TAB_COL_STATISTICS WHERE TABLE_NAME = 'T' AND COLUMN_NAME = 'OWNER';

NUM_DISTINCT  NUM_NULLS HISTOGRAM
------------ ---------- ---------------
          10          0 FREQUENCY


[email protected]> SELECT * FROM USER_TAB_HISTOGRAMS WHERE TABLE_NAME = 'T' AND COLUMN_NAME = 'OWNER';

TABLE COLUMN_NAME          ENDPOINT_NUMBER ENDPOINT_VALUE ENDPOINT_ACTUAL_VALU
----- -------------------- --------------- -------------- --------------------
T     OWNER                             13     3.3888E+35
T     OWNER                             15     3.3913E+35
T     OWNER                             39     3.5442E+35
T     OWNER                             41     4.1186E+35
T     OWNER                             43     4.1192E+35
T     OWNER                           1379     4.1711E+35
T     OWNER                           4885     4.3277E+35
T     OWNER                           5102     4.3277E+35
T     OWNER                           5208     4.5330E+35
T     OWNER                           5508     4.5831E+35


索引统计信息

1. 索引叶子块的个数
2. 索引的高度(Levels)
3. 集群因子(Clustering Factor)

[email protected]> SELECT BLEVEL,LEAF_BLOCKS,CLUSTERING_FACTOR FROM DBA_INDEXES WHERE INDEX_NAME = 'IDX_T';

    BLEVEL LEAF_BLOCKS CLUSTERING_FACTOR
---------- ----------- -----------------
         1          61             28600

系统级别的统计信息
1. I/O 执行性能和消耗
2. CPU 执行性能和消耗



Oracle会根据以上的统计信息来计算每种执行计划的Cost,然后选择Cost最小的执行计划(即CBO)。Cost是Oracle对执行计划消耗的计算指标。
CBO的计算模型是Oracle内部的,目前是没有公布的,而且Oracle的计算模型是十分复杂的,我们只能依据一些实验来答题猜测CBO的计算模型。


[email protected]> CREATE TABLE T1 AS
   SELECT
     TRUNC(DBMS_RANDOM.VALUE(0,25)) N1,
     RPAD('X',40) IND_PAD,
     TRUNC(DBMS_RANDOM.VALUE(0,20)) N2,
     LPAD(ROWNUM,10,'0') SMALL_VC,
     RPAD('X',200) PADDING
     FROM ALL_OBJECTS
   WHERE ROWNUM<= 10000;

Table created.

--创建索引
[email protected]> create index t1_i1 on t1(n1,ind_pad,n2) nologging pctfree 91;

Index created.


[email protected]> SELECT
  2  NUM_ROWS,  --记录数
  3  DISTINCT_KEYS, --不重复的键值数
  4  BLEVEL, --索引数的级别
  5  LEAF_BLOCKS, --叶子块数
  6  CLUSTERING_FACTOR, --聚促因子
  7  AVG_LEAF_BLOCKS_PER_KEY,
  8  AVG_DATA_BLOCKS_PER_KEY
  9  FROM USER_INDEXES WHERE TABLE_NAME = 'T1' AND INDEX_NAME = 'T1_I1';

  NUM_ROWS DISTINCT_KEYS     BLEVEL LEAF_BLOCKS CLUSTERING_FACTOR AVG_LEAF_BLOCKS_PER_KEY AVG_DATA_BLOCKS_PER_KEY
---------- ------------- ---------- ----------- ----------------- ----------------------- -----------------------
     10000           500          2        1111              9754                       2                   19

--收集表统计信息
[email protected]> exec dbms_stats.gather_table_stats(user,'T1',cascade=>true,method_opt=>'for all columns size 1')

PL/SQL procedure successfully completed.

[email protected]> select small_vc from T1 where n1 = 2 and n2 = 3;

13 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 2886394002

-------------------------------------------------------------------------------------
| Id  | Operation                   | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |       |    20 |   340 |    25   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| T1    |    20 |   340 |    25   (0)| 00:00:01 |
|*  2 |   INDEX SKIP SCAN           | T1_I1 |    20 |       |     5   (0)| 00:00:01 |
-------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("N1"=2 AND "N2"=3)
       filter("N2"=3)

--字段的selectivity
[email protected]> select COLUMN_NAME,NUM_DISTINCT from user_tab_col_statistics where table_name = 'T1' and column_name in ('N1','N2');

COLUMN_NAME                    NUM_DISTINCT
------------------------------ ------------
N1                                       25
N2                                       20

第一步的成本:
= blevel+ceil((n1.selectivity*n2.selectivity)*leaf_blocks) = 2+ceil((1/20*1/25)*1111) = 5

第二步的成本

=ceil(n1.selectivity*n2.selectivity*clustering_fact) = 20


通过以上的数据模型可以看出,涉及到Oracle的COST成本包括字段的可选择性(不收集直方图),索引的叶子块数,及索引的集群因子。

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [oracle 统计 信息] 推荐:

Oracle 统计信息

- - 数据库 - ITeye博客
--Oracle 优化器统计信息 Oracle优化器统计信息描述了关于数据库和相关对象的统计信息,当执行SQL查询时,优化器会使用这些统计信息估算出各种不同的执行计划的资源消耗, ,从而选择最高效的执行计划. 当统计信息缺失或者陈旧时,Oracle可能会选择错误的执行计划,导致SQL执行效率低下.

[Oracle] 统计信息和dbms_stats包

- - CSDN博客数据库推荐文章
Oracle基于CBO的优化器在生成执行计划时,很大程度上依赖于统计信息,你可以把CBO理解为一个复杂的数学模型,而统计信息是它最主要的输入,执行计划是输出,如果输入都不准确,输出还可能准确吗. 所有,统计信息是否及时有效对执行计划的好坏有着关键的影响. 2、dbms_stats包. Oracle里采用dbms_stats包分析统计信息(Analyze命令已过时,不建议使用),该包的使用方法,官方文档有详细说明( http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_stats.htm#i1036461),这里挑几个最常用的说说.

Oracle 统计信息收集 - Leohahah - 博客园

- -
查询表上一次收集统计信息的时间:. 收集统计信息主要有2种方法:. analyze可以用来收集表,索引,列以及系统的统计信息和直方图,以下为一些典型用法:. --收集所有的统计信息和直方图信息,包括表、列、索引. --收集emp表的统计信息,不含列、索引统计信息和直方图. --收集所有列的统计信息和直方图(超大表较耗资源,因为只要列中有非空值,那么就会收集这个列的统计信息和直方图).

Oracle 11g系统自动收集统计信息的一些知识

- - CSDN博客数据库推荐文章
---11g的是 周一到周五 22:00-2:00 周六周日 6:00-4:00. WINDOW_NAME          REPEAT_INTERVAL                                              DURATION. CLIENT_NAME                                                      STATUS.

Oracle里收集与查看统计信息的方法_DBA Fighting!的技术博客_51CTO博客

- -
Oracle数据库里的统计信息是这样的一组数据:它存储在数据字典里,且从多个维度描述了Oracle数据库里对象的详细信息. CBO会利用这些统计信息来计算目标SQL各种可能的、不同的执行路径的成本,并从中选择一条成本值最小的执行路径来作为目标SQL的执行计划. Oracle数据库里的统计信息可以分为如下6种类型:.

Oracle 收购 Ksplice

- feng823 - LinuxTOY
实现无需重启即可为 Linux 内核打安全补丁的 Ksplice 被 Oracle 收购. 在被收购前, Ksplice 为 Fedora, Ubuntu 免费提供该功能,对于 RHEL 和 CentOS 则需要订阅其产品. Oracle 表示将把 Ksplice 带来的零宕机安全更新功能添加到 Oracle 产品订阅服务中,同时停止对其他企业级 Linux 发行版的支持,将 Oracle Unbreakable Linux 打造成唯一具备零宕机安全更新功能的企业级 Linux 发行版.

Linux Ksplice,MySQL and Oracle

- Syn - DBA Notes
Oracle 在 7 月份收购了 Ksplice. 使用了 Ksplice 的 Linux 系统,为 Kernel 打补丁无需重启动,做系统维护的朋友应该明白这是一个杀手级特性. 现在该产品已经合并到 Oracle Linux 中. 目前已经有超过 700 家客户,超过 10 万套系统使用了 Ksplice (不知道国内是否已经有用户了.

oracle license计算

- Fenng - eagle&#39;s home
Oracle license的计算是基于CPU core的. 用core的数目乘以一个系数core factor就可以得到所需的oracle license的数目. 对于不同的CPU,core factor是不一样的,可以从oracle提供的这张列表中查到 Oracle Processor Core Factor Table.

Oracle Exadata初探

- - 技术改变世界 创新驱动中国 - 《程序员》官网
在我们看来,它是一个把硬件和软件根据合理的配置整合在一起的 Oracle数据库(在本文编写时是11gR2版本)平台. Exadata数据库机器包含了存储子系统,在存储层上运行着研发的新软件,这使得研发人员可以做一些在其他平台上无法完成的事情. 实际上,Exadata一开始是以一个存储系统形式诞生的,如果你跟参与研发此产品的人交谈,你经常会听到他们称存储组件为Exadata或者是SAGE (Storage Appliance for Grid Environments,网格环境存储设备),这是该产品研发项目的代码名称.

Oracle MySQL Or NoSQL续

- - Sky.Jian 朝阳的天空
接前面一篇,这里再将之前在“中国系统架构师大会”5周年的时候发布的纪念册“IT架构实录”上的一篇文章发出来,也算是前面博文中PPT的一个文字版解读吧. Oracle,MySQL 还是 NoSQL. 随着阿里系的“去IOE”运动在社区的宣传声越来越大,国内正在掀起一股“去xxx”的技术潮. 不仅仅是互联网企业,包括运营商以及金融机构都已经开始加入到这个潮流之中.