首页 > 数据库 >Oracle-统计信息收集-TABLE

Oracle-统计信息收集-TABLE

时间:2022-12-17 22:33:39浏览次数:38  
标签:name 收集 信息 直方图 num Oracle TABLE 统计

在Oracle数据库,执行sql语句的时候,会根据统计信息选择最优执行计划,当执行性能比自己想象的慢时,就有可能是统计信息不是最新导致。

表的统计信息主要包含表的总行数(num_rows)、表的块数(blocks)以及行平均长度(avg_row_len)。

通过查询数据字典DBA_TABLES 查看表的统计信息

select owner, table_name, num_rows, blocks, avg_row_len
from dba_tables
where owner = 'SCOTT'
and table_name = 'T_TEST';

通过查询数据字典DBA_TAB_COL_STATISTICS查看表的常用列的统计信息。第一个列表示列名字,第二个列表示列的基数,第三个列表示列中NULL值的数量,第四个列表示直方图的桶数,最后一个列表示直方图类型。

select column_name, num_distinct, num_nulls, num_buckets, histogram
from dba_tab_col_statistics
where owner = 'SCOTT'
and table_name = 'T_TEST';

查看表和列的统计信息

select a.column_name,
b.num_rows,
a.num_nulls,
a.num_distinct Cardinality,
round(a.num_distinct / b.num_rows * 100, 2) selectivity,
a.histogram,
a.num_buckets
from dba_tab_col_statistics a, dba_tables b
where a.owner = b.owner
and a.table_name = b.table_name
and a.owner = 'SCOTT'
and a.table_name = 'T_TEST';

当统计信息中的NUM_ROWS与表中实际的行数不一致的时候,说明统计信息不是最新的。

select count(1) from SCOTT.T_TEST;

这时候我们应当适时收集表的统计信息

BEGIN
DBMS_STATS.GATHER_TABLE_STATS(ownname => 'SCOTT',
tabname => 'T_TEST',
estimate_percent => 100,
method_opt => 'for all columns size auto',
no_invalidate => FALSE,
degree => 1,
cascade => TRUE);
END;
/

以下是统计信息的参数说明:

ownname 表示表的拥有者,不区分大小写。

estimate_percent 表示采样率,范围是0.000 001~100。

优化器在计算执行计划的成本时依赖于统计信息,如果没有收集统计信息,或者是统计信息过期了,那么优化器就会出现严重偏差,从而导致性能问题。因此要确保统计信息准确性。虽然数据库自带有JOB 每天晚上会定时收集数据库中所有表的统计信息,但是如果数据库特别大,自带的JOB 无法完成全库统计信息收集。一些资深的DBA 会关闭数据库自带的统计信息收集JOB,根据实际情况自己定制收集统计信息策略。

采样率,建议根据表的段大小,小于1g是100;大于等于1g,小于等于5g是50;大于5g是30。

method_opt 用于控制收集直方图策略。

method_opt => 'for all columns size 1' 表示所有列都不收集直方图

method_opt => 'for all columns size skewonly' 表示对表中所有列收集自动判断是否收集直方图

method_opt => 'for columns object_type size skewonly' 表示单独对OBJECT_TYPE 列收集直方图,对于其余列,如果之前收集过直方图,现在也收集直方图。

method_opt => 'for all columns size auto' 表示对出现在where 条件中的列自动判断是否收集直方图。

method_opt => 'for all columns size repeat' 表示当前有哪些列收集了直方图,现在就对哪些列收集直方图。对一个运行稳定的系统,我们应该采用REPEAT 方式收集直方图。

no_invalidate 表示共享池中涉及到该表的游标是否立即失效,默认值为DBMS_STATS.

auto_invalidate,表示让Oracle 自己决定是否立即失效。我们建议将no_invalidate 参数设置为FALSE,立即失效。因为我们发现有时候SQL 执行缓慢是因为统计信息过期导致,重新收集了统计信息之后执行计划还是没有更改,原因就在于没有将这个参数设置为false。

degree 表示收集统计信息的并行度,默认为NULL。如果表没有设置degree,收集统计信息的时候后就不开并行; 如果表设置了degree,收集统计信息的时候就按照表的degree 来开并行。 可以查询DBA_TABLES.degree 来查看表的degree,一般情况下,表的degree 都为1。 我们建议可以根据当时系统的负载、系统中CPU 的个数以及表大小来综合判断设置并行度。

cascade 表示在收集表的统计信息的时候,是否级联收集索引的统计信息,默认值为DBMS_STATS.AUTO_CASCADE,表示让Oracle 自己判断是否级联收集索引的统计信息。

我们一般将其设置为TRUE,在收集表的统计信息的时候,级联收集索引的统计信息。


标签:name,收集,信息,直方图,num,Oracle,TABLE,统计
From: https://blog.51cto.com/baoyw/5950171

相关文章

  • Oracle-统计信息收集-INDEX
    索引的统计信息主要包含索引blevel(索引高度-1)、叶子块的个数(leaf_blocks)以及集群因子(clustering_factor)。我们可以通过数据字典DBA_INDEXES查看索引的统计信息。创建索引......
  • Oracle-查询表大小
    --查找特定表大小setlinesize200;colownerfora18;colsegment_namefora28;selectowner,segment_name,sum(bytes/1024/1024)segment_sizefromdba_segments......
  • 收集1
    wgethttps://gosspublic.alicdn.com/ossutil/1.7.14/ossutil64  环境变量:ln-s/home/ITwork/software/bin/ossutil64/usr/bin/ossutil ossutil--config-file$......
  • WPF ControlTable 初始化问题
    VS2019 问题描述:ControlTable未进行初始化导致 ControlTable.Items.Count不存在,程序生成无问题,运行时一旦进行ControlTable初始化便出错。问题解决:程序使用了TextBox......
  • 运用ogg实现oracle 10g到19c schema级别的同步
    文档课题:运用ogg实现oracle10g到19cschema级别的同步.源端:192.168.133.108数据库oracle10.2.0.464位,实例名:orcl目标端:192.168.133.109数据库oracle19.16.0.0......
  • oracle数据库startup启动报错ORA-27125 unable to create shared memory segment
    问题描述:oracle数据库startup启动报错ORA-27125unabletocreatesharedmemorysegment,如下所示:系统:suse11.2环境:rac双节点+oracle11.2.0.4说明:节点1数据库正常,节点2......
  • “PL/SQL识趣--巧用Over函数”和“我们怎样来做性能诊断---Oracle性能诊断方法”双双
    作者:三十而立时间:2009年10月15日13:05:56 昨晚写了PL/SQL识趣--巧用Over函数,通过一个网友问的一个SQL题,通过实战的形式,把Over函数的用法介绍给大家,这个文章里不仅讲解......
  • Oracle Mysql论坛上线3周(2009-09-30) 网站技术统计
    OracleMysql论坛上线3周(2009-09-30)网站技术统计 网站技术统计 论坛会员统计 论坛发回帖统计 论坛流量统计 上周在csdn上推出了国庆的timesten系列的消息和公众班的......
  • 关于oracle开发中碰到的同列多行合并字符串的问题
    如何将Oracle中同一列的多行记录拼接成一个字符串?本人在oracle的存储过程的开发中,碰到了同一列的多行记录需要拼接成一个字符串进行存储,特此再次记录!1.可以使用wm_concat......
  • java相关学习资料收集
    springboot学习资料springboot系列教程 spingboot系列教程2 javaspringboot学习application.properties全部配置项   ​​点击查看SpringBoot所有配置......