暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
Oracle_直方图解析
797
20页
2次
2020-06-09
5墨值下载
Oracle 直方图解析
一、何谓直方图
直方图是一种统计学上的工具,并非 Oracle 专有。通常用于对被管理对象的某个方
的质量情况进行管理 通常情况下它会表现为一种几何图形表 这个图形表是根据从实际
境中所收集来的被管理对象某个方面的质量分布情况的数据所绘制成的 通常会画成以数量
为底边 以频度为高度的一系列连接起来的矩形 因此直方图在统计学上也称为质量分布
图。
二、 Oracle 中直方图的作用
既然直方图是一种对被管理对象某一方面质量进行管理的描述工具,那么在 Oracle
自然它也是 Oracle 中某个对象质量的描述工具 这个对象就是 Oracle 中最重要的东西
—“ 数据
Oracle 中直方图是一种对数据分布质量情况进行描述的工具。它会按照某一列不同
值出现数量多少 以及出现的频率高低来绘制数据的分布情况 以便能够指导优化器根据
据的分布做出正确的选择 在某些情况 表的列中的数值分布将会影响优化器使用索引还
是执行全表扫描的决策 where 子句的值具有不成比例数量的数值时 将出现这种情况
使得全表扫描比索引访问的成本更低。这种情况下如果 where 子句的过滤谓词列之上上
一个合理的正确的直方图 将会对优化器做出正确的选择发挥巨大的作用 使得 SQL 语句执
行成本最低从而提升性能
三、 Oracle 中使用直方图的场合
在分析表或索引时 直方图用于记录数据的分 通过获得该信息 基于成本的优化器
就可以决定使用将返回少量行的索引 而避免使用基于限制条件返回许多行的索引 直方图
的使用不受索引的限制,可以在表的任何列上构建直方图。
构造方图主要原因是帮优化在表数据重偏时做更好规划
如果一到两个值构成了表中的大部分数 ( 数据偏斜 ) 相关的索引就可能无法帮助减少
满足询所 I/O 数量。建直图可让基成本优化知道时使索引最合
适,或何时应该根据 WHERE 子句中的值返回表中 80 %的记录。
通常情况下在以下场合中建议使用直方图:
1 、当 Where 子句引用了列值分布存在明显偏差的列时:当这种偏差相当明显时,以
至于 WHERE 子句中的值将会使优化器选择不同的执行计划。这时应该使用直方图来帮助优
化器来修正执行路径 (注意:如果查询不引用该列,则创建直方图没有意义。这种错误很
常见,许多 DBA 会在偏差列上创建柱状图,即使没有任何查询引用该
2 、当列值导致不正确的判断时:这种情况通常会发生在多表连接时,例如,假设
们有一个五项的表联接,其结果集只有 10 行。 Oracle 将会以一种使第一个联接的结果集
(集合基数 尽可能小的方式将表联接起来 通过在中间结果集中携带更少的负 查询将
会运行得更快。为了使中间结果最小化,优化器尝试 SQL 执行的分析阶段评估每个结果
集的集合基 在偏差的列上拥有直方图将会极大地帮助优化器作出正确的决策 如优化器
对中间结果集的大小作出不正确的判断,它可能会选择一种未达到最优化的表联接方法
此向该列添加直方图经常会向优化器提供使用最佳联接方法所需的信息。
四、如何使用直方图
1 、创建直方图
通过使用早先的 analyze 命令和最新 dbms_stats 工具包都可以创建直方图 Oracl e
推荐使用后者来创建直方 而且直方图的创建不受任何条件限制 可以在一张表上的任何
你想创建直方图的列上创建直方图。我们这里主要介绍如何通过 dbms_stats 包来创建直方
图。
Oracle 通过指 dbms_stats method_opt 参数 创建直方图 method_opt
句中有三个相关选项,即 skewonly repeat auto
skewonly
dbms_stats 发现一个索引中具有不均匀分布的列,它将为该索引创建直方图,以帮助基于
成本的 SQL 优化器决定是使用索引还是全表扫描访问。示例如下:
begin
dbms_stats. gather_table_stats (
ownname => user,
tabname=>''
estimate_percent =>dbms_stats.auto_sample_size,
method_opt => 'for all columns size skewonly',
cascade=>true,
degree=> 2);
end;
degre e 指定了并行度视主机 CP U 个数而定 estimate_percen t 指定了采样比率
此处使用了 auto 目的是让 oracle 来决定采样收集的比率 绘制直方图时会根据采样的数据
分析结果来绘制,当然也可以人为指定采样比率。如: estimate_percent=>20 指定采样比
率为 20% cascade=>true 指定收集相关表的索引的统计信息,该参数默认 false ,因此
使用 dbms_stats 收集统计信息时默认是不收集表的索引信息的。
在对表实施监视 (alter table xxx monitoring;) 时使用 auto 选项,它基于数据的
分布以及应用程序访问列的方式 例如由监视所确定的列上的负 来创建直方图 示例如
下:
of 20
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜