Oracle 系列 统计信息详解(Statistic)

1、概述

         统计信息对基于CBO优化器的Oracle版本尤为重要,一个统计信息的好坏,很大程度将直接影响原本有可能几秒执行成功的一段SQL脚本,因为错误的统计信息而选择一条错误的执行计划,导致几分钟才能出来结果。

 

2、优化器

          Oracle中的优化器是SQL分析和执行的优化工具,它负责生成、制定SQL的执行计划。

          Oracle 中主要的优化器有两种:

      2.1、RBO(Rule-Based Optimization) 基于规则的优化器

          RBO有严格的使用规则,只要按照这套规则(Oracle制定)去写SQL语句,无论数据表中的内容怎样,也不会影响到你的执行计划;

           换句话说,RBO对数据“不敏感”,它要求SQL编写人员必须要了解各项细则

           RBO一直沿用至ORACLE 9i,从ORACLE 10g开始,RBO已经彻底被抛弃。

      2.2、CBO(Cost-Based Optimization) 基于代价的优化器

          CBO是一种比RBO更加合理、可靠的优化器,在ORACLE 10g中完全取代RBO;

          CBO通过计算各种可能的执行计划的“代价”,即COST,从中选用COST最低的执行方案作为实际运行方案;

          它依赖数据库对象的统计信息,统计信息的准确与否会影响CBO做出最优的选择,也就是对数据“敏感”。

          执行计划中的 Cost的计算方式默认为CPU+I/O两者之和。 所以一般我们看执行计划是,cost 越低,SQL 的性能就越好。

3、统计信息收集那些内容

      3.1 Table statistics(表的统计信息)

                        Number of rows(行数)

                        Number of blocks(块数)

                        Average row length(行平均长度)

      3.2 Column statistics

                        Number of distinct values (NDV) in column(列中不同值的数量)

                        Number of nulls in column(列中null的数量)

                        Data distribution (histogram)(数据分布(柱状图/直方图))

      3.3 Index statistics

                        Number of leaf blocks(叶子块的数量)

                        Levels(索引的高度)

                        Clustering factor(聚簇因子)

      3.4 System statistics

                        I/O performance and utilization(I/O性能和利用)

                        CPU performance and utilization(CPU性能和利用)

      3.5 统计信息结果界面名词解释

序号

列名

解释

1

recursive calls

递归调用,表示执行SQL的时候的产生的递归调用的次数。Oracle在执行SQL的时候,有时候会生成很多额外的SQL语句,这个就称为递归调用。这个参数和访问数据字典的次数有很大的关系,一般来说,这个参数值不会很大。

2

db block gets

DB块取,表示当前读。在发生INSERT、DELETE、UPDATE和SELECT FOR UPDATE的时候,数据库缓冲区中的数据库块的个数。在SELECT语句中一般为0。

3

consistent gets

一致性读,表示除了SELECT FOR UPDATE的时候,从数据库缓冲区中读取的数据块的个数(注意,实际上并不是块的个数),可能会读取回滚段的信息,一般来说,逻辑读(Logical Reads) = 当前读(db block gets) + 一致性读(consistent gets)。

4

physical reads

物理读,在执行SQL的过程中,从硬盘上读取的数据块个数。

5

redo size

SQL语句在执行过程中产生的Redo的字节数。

6

bytes sent via SQL*Net to client

服务器利用SQL*Net发送到客户端的字节数。

7

bytes received via SQL*Net from client

服务器利用SQL*Net从客户端接收的字节数。

8

SQL*Net roundtrips to/from client

从客户端发送和接收的SQL*Net消息的总数,包括从多行的结果集中提取的往返消息。

9

sorts (memory)

在内存执行的排序次数。

10

sorts (disk)

在磁盘上执行的排序次数,如果内存空间不足,那么会使用磁盘空间。

11

rows processed

更改或选择返回的行数。

      3.6 统计信息详细步骤 

           找到篇文章,统计信息的步骤,包含表名https://www.cnblogs.com/bicewow/p/11263378.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值