前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >表和索引统计信息自动采集的问题

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

作者头像
bisal
发布2021-12-30 17:43:45
7950
发布2021-12-30 17:43:45
举报

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

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

ea1d67c4c358b7a4ad67cfe8d8aae35e.png
ea1d67c4c358b7a4ad67cfe8d8aae35e.png

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

5d75ac2fdbc84783a5244c37e65fb8f0.png
5d75ac2fdbc84783a5244c37e65fb8f0.png

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

a1fd77d961ce1508f60cbb813443b890.png
a1fd77d961ce1508f60cbb813443b890.png

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

而索引,情况不同,

cbfbf6dabbdce0e608369937c54433f2.png
cbfbf6dabbdce0e608369937c54433f2.png

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

5d7044c87f102dc82a7e991640621e08.png
5d7044c87f102dc82a7e991640621e08.png

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

4fd5dcfd0eec64463dbf6a6f281c5d9b.png
4fd5dcfd0eec64463dbf6a6f281c5d9b.png

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

37c2f77ff2cf7fb57a47d4cb4572bd48.png
37c2f77ff2cf7fb57a47d4cb4572bd48.png

此时再创建索引,

52eff45eb207c5faeb7ea556303efb09.png
52eff45eb207c5faeb7ea556303efb09.png

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

58156c3489f8936290fc5fe662845020.png
58156c3489f8936290fc5fe662845020.png

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

363c39996c92998ab7b711deec47af51.png
363c39996c92998ab7b711deec47af51.png

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

277a76ad7d30a0ace0160bc23e825250.png
277a76ad7d30a0ace0160bc23e825250.png

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

57bdd6ef1a892e6a55906d98190d51f1.png
57bdd6ef1a892e6a55906d98190d51f1.png

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

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档