Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >表和索引统计信息自动采集的问题

表和索引统计信息自动采集的问题

作者头像
bisal
发布于 2021-12-08 06:13:51
发布于 2021-12-08 06:13:51
6490
举报

Oracle的CBO基于成本的优化器,计算过程中最重要的依据就是统计信息,而统计信息的采集存在着他的逻辑。

其中一个场景,就是当Oracle创建一张新表时,默认情况下,不会自动采集统计信息,19c的环境,做个测试,

例如测试表T,相同的统计信息都是空的,

当系统自动采集统计信息,或者人为触发dbms_stats.gather_table_stats,才会写入表的统计信息,

因此当创建了一张新表,同时灌入了大量数据,在统计信息自动采集任务开始前就需要使用的情况下,建议人为采集统计信息,否则就可能导致因为统计信息不准,选错执行计划的场景。

而索引,情况不同,

创建索引的时候,会自动采集,

从他的创建语句就可以看出端倪,自带了"compute statistics"子句,他的意思是通过对数据对象的完全扫描来收集精确的统计数据,

但是存在一种特殊的场景,如果锁定某张表的统计信息,如下所示,执行了dbms_stats.lock_table_stats,表统计信息锁定可以从dba_tab_statistics的stattype_locked的字段进行判断,为空代表统计信息未锁定,ALL是锁定,

此时再创建索引,

可以看到,创建语句中并未带着"compute statistics",

索引的统计信息,自然是空的,

如果在创建时,显式带着compute statistics,会提示错误,说对象统计信息已经锁定了,

从官方文档对lock_table_stats的介绍可以知道,当表的统计信息锁定,所有依赖于表的统计信息,包括表的统计信息、列的统计信息、直方图,以及索引统计信息,都会被锁定,

因此,当锁定了表的统计信息时,如果显式使用compute statistics创建索引,就会提示错误,因为索引统计信息同样被锁定了,开锁前,不能采集。如果不指定compute statistics,指定不采集索引统计信息,因此能创建。

以上现象不仅对普通表,对于分区表而言,同样适用,有兴趣的朋友,可以测下。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/12/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一波三折:一次CPU使用率过高故障分析SQL优化解决过程
作者 | 罗贵林: 云和恩墨技术工程师,具有8年以上的 Oracle 数据库工作经验,曾任职于大型的国家电信、省级财政、省级公安的维护,性能调优等。精通 Oracle 数据库管理,调优,问题诊断。擅长 SQL 调优,Oracle Rac 等维护,管理。
数据和云
2018/10/25
3.3K0
一波三折:一次CPU使用率过高故障分析SQL优化解决过程
一次分区大表索引整改的案例分析(下)
确定成功收集统计信息后,发现还是没有效果,在当时操作过程中认为收集统计信息后,oracle没有走上正确的索引就是成本优化器判断错误,于是决定手工绑定走错索引的sql,这也是一般的处理思路,如下示:
IT大咖说
2019/05/15
6660
一次分区大表索引整改的案例分析(下)
【DB笔试面试628】Oracle的统计信息包括哪几种类型?
Oracle数据库里的统计信息是一组存储在数据字典里,且从多个维度描述了数据库里对象的详细信息的一组数据。当Oracle数据库工作在CBO(Cost Based Optimization,基于代价的优化器)模式下时,优化器会根据数据字典中记录的对象的统计信息来评估SQL语句的不同执行计划的成本,从而找到最优或者是相对最优的执行计划。所以,可以说,SQL语句的执行计划由统计信息来决定,若没有统计信息则会采取动态采样的方式来生成执行计划。统计信息决定着SQL的执行计划的正确性,属于SQL执行的指导思想。若统计信息不准确,则会导致表的访问方式(例如应该使用索引,但是选择了全表扫描)、表与表的连接方式出现问题(例如应该使用HJ,但是使用了NL连接),从而导致CBO选择错误的执行计划。
AiDBA宝典
2019/09/29
7650
【DB笔试面试628】Oracle的统计信息包括哪几种类型?
YashanDB|数据量变化导致统计信息“失效”?执行计划不准的原因找到了!
【问题分类】 性能优化 【关键词】 统计信息失效、STALE_STATS、执行计划偏差
数据库砖家
2025/04/18
720
灌入大量数据后手工采集统计信息的重要性
SQL> create table TBL_STAT as select * from dba_objects where 1<>1; Table created. SQL> create index idx_tbl_stat on tbl_stat (object_id); Index created. SQL> select count(*) from tbl_stat;   COUNT(*) ----------          0
bisal
2019/01/29
3420
【YashanDB知识库】数据变化率超过阈值统计信息失效
create table t1 (id int,name varchar2(200));
用户10349277
2025/02/20
550
Oracle批量灌数后自动收集统计信息(Online Statistics Gathering for Bulk Loads)
大批量灌数后立即查询是很多数据库的痛点,通常都会因为统计信息不准导致计划出问题,下面总结下Oracle的解决方法:
mingjie
2023/10/13
3570
Oracle 12c数据库优化器统计信息收集的最佳实践(一)
原文链接 http://www.oracle.com/technetwork/database/bi-datawarehousing/twp-bp-for-stats-gather-12c-1967354.pdf 译者 刘金龙 导 语 Oracle优化器会为SQL语句产生所有可能的访问路径(执行计划),然后从中选择一条COST值最低的执行路径,这个cost值是指oracle估算执行SQL所消耗的资源。为了让优化器能够精确计算的每一条执行计划的COST值,这就需要被执行SQL语句所需访问的所有对象(表和
沃趣科技
2018/03/26
1.7K0
Oracle 12c数据库优化器统计信息收集的最佳实践(一)
【DB笔试面试632】在Oracle中,如何锁住统计信息?
Oracle会自动收集表的统计信息,大部分情况下,这种行为是有利的。当不需要对某个表做收集的时候,可以采用锁定统计信息的方法,把不需要收集的表排除在外,这样可以使得此表上的统计信息不变,如下所示:
AiDBA宝典
2019/09/29
1.1K0
truncate表,会将统计信息清除么?
说明执行truncate,表的统计信息不会被删除,除非执行了统计信息采集,truncate table和表和索引的统计信息,没有任何关联。
bisal
2019/01/29
1.3K0
Oracle 12c数据库优化器统计信息收集的最佳实践(二)
原文链接 http://www.oracle.com/technetwork/database/bi-datawarehousing/twp-bp-for-stats-gather-12c-1967354.pdf 译者 杨禹航 何时收集统计信息 为了选择最佳执行计划,优化器必须可以获得有代表性的统计信息。有代表性的统计数据不必是最新的,而是一组能够帮助优化器确定执行计划中每个操作所能返回的行数。 自动统计信息收集任务 Oracle会在预定义维护窗口期间 (工作日10pm 到2am 和周末6am 到2am
沃趣科技
2018/03/26
1.7K0
Oracle 12c数据库优化器统计信息收集的最佳实践(二)
3.X vs 4.X:OceanBase 手动收集统计信息的天壤之别!
作者:何文超,分享 MySQL 和 OceanBase 相关技术博文。 个人博客【CSDN | 雅俗数据库】
爱可生开源社区
2025/05/08
1370
3.X vs 4.X:OceanBase 手动收集统计信息的天壤之别!
Oracle CBO选错执行计划的一种场景
测试人员做应用性能测试,反馈有一条SQL语句,之前执行非常快,现在执行时间,明显慢了。
bisal
2019/01/30
5290
六千字带你了解 Oracle 统计信息和执行计划
前几天,微信上收到《Oracle DBA工作笔记》、《MySQL DBA工作笔记》作者,DBAplus社群联合发起人杨建荣老师的邀请,说在他的 QQ 群里分享一下技术类、职场类、感悟类的文章,我顿时感到诚惶诚恐,荣幸之至,分享也是一个学习的过程呀,便欣然答应了杨老师的邀请。想着最近也在学习优化相关的东西,那就一边学习一边总结分享,文中如有其它不到之处,还请多多指教。
JiekeXu之路
2020/04/20
3.2K0
DBMS_STATS.AUTO_SAMPLE_SIZE的值是什么?
这是2014年写的一篇文章(http://blog.csdn.net/bisal/article/details/18910785#reply),看了一下,当时的实验和说明是,
bisal
2019/01/29
1.7K0
自动统计信息收集(Automatic Optimizer Statistics Collection)
本文主要介绍自动统计信息收集(Automatic Optimizer Statistics Collection)任务。
SQLplusDB
2020/03/25
1.6K0
Oracle统计信息中的Pending Statistics
Oracle中的统计信息相信大家都不陌生,统计信息中有Pending Statistics这个概念。
数据和云
2021/10/13
9260
Oracle统计信息中的Pending Statistics
【YashanDB 知识库】YashanDB 获取统计信息
在测试环境重现生产环境 SQL 语句执行计划问题时,需要使用生产环境相关表的统计信息模拟。
用户10349277
2025/02/28
440
【DB笔试面试629】在Oracle中,自动收集统计信息的机制有哪些?10g和11g在自动收集统计信息方面有哪些区别?
在Oracle中,自动收集统计信息的机制有哪些?10g和11g在自动收集统计信息方面有哪些区别?
AiDBA宝典
2019/09/29
7340
【DB笔试面试629】在Oracle中,自动收集统计信息的机制有哪些?10g和11g在自动收集统计信息方面有哪些区别?
SQL查询太慢?实战讲解YashanDB SQL调优思路
本文是Meetup第十期“调优实战专场”的第二篇技术文章,上一篇《高效查询秘诀,解码YashanDB优化器分组查询优化手段》中,我们揭秘了YashanDB分组查询优化秘诀,本文将通过一个案例,助你快速上手YashanDB慢日志功能,精准定位“慢SQL”后进行优化。
用户10349277
2025/02/18
950
推荐阅读
相关推荐
一波三折:一次CPU使用率过高故障分析SQL优化解决过程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档