Oracle-探究统计信息收集自动采样AUTO_SAMPLE_SIZE

前言:

        Oracle数据库进行统计信息收集时,可以通过ESTIMATE_PERCENT参数指定采样方式或者比例,有以下4种指定的方式

1 统计信息收集时不指定值,这时候ESTIMATE_PERCENT值为默认值DBMS_STATS.AUTO_SAMPLE_SIZE,自动采样

2 指定采样比例,范围可以为0.000001到100

3 指定采样方式为自动采样DBMS_STATS.AUTO_SAMPLE_SIZE

4 指定为null,这时候采样比例为100

 

统计收集测试:

        对一张1000W行的1.2G的表TEST进行统计信息收集测试,分别使用指定采样比例方式以及自动采样方式进行收集测试

        使用estimate_percent =>DBMS_STATS.AUTO_SAMPLE_SIZE自动采样方式,花费时间9.04秒

SQL> exec  DBMS_STATS.GATHER_TABLE_STATS(ownname=>'TEST', tabname=>'TEST',estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt       =>'for all columns size auto',no_invalidate    => FALSE,degree=> 8,  cascade=> TRUE);
​
PL/SQL procedure successfully completed.
​
Elapsed: 00:00:09.04

        查看表统计信息收集的采样比例,这里自动采样使用的比例为100

4f1060997b95972ddab2764962759159.png

        查看表列统计信息的采样比例为,可以看到对于收集直方图信息的owner,created列,采样比例发生了改变,这里使用了一个很低的采样比例大小

 

ab16851fb6a4fab735a885b2db41c244.png

        查看索引统计信息的采样比例,这里同样也是使用了一个很低的采样比例

edbf56a93d4a1a26428a0776001f52f7.png

        使用estimate_percent =>30指定30%比例采样,花费时间28秒,慢了2倍左右

SQL> exec  DBMS_STATS.GATHER_TABLE_STATS(ownname=>'TEST', tabname=>'TEST',estimate_percent => 30, method_opt       =>'for all columns size auto',no_invalidate    => FALSE,degree=> 8,  cascade=> TRUE);
​
PL/SQL procedure successfully completed.
​
Elapsed: 00:00:28.27
SQL> 

查看表统计信息收集的采样比例,跟指定的比例一样为30%

6d880a285831f70b557a538686c7e63a.png

查看列统计信息收集的采样比例,跟指定的比例一样为30%

6f5120306b1d0f6d3162248319a5cbe3.png

查看索引统计信息收集的采样比例,跟指定的比例一样为30%

f55877ce3b7d466f3c9b8bfa2b79786c.png

分析DBMS_STATS.AUTO_SAMPLE_SIZE自动采样的执行过程:

        通过10046j进行跟踪,分析DBMS_STATS.AUTO_SAMPLE_SIZE自动采集的过程

主要执行的语句步骤如下

        1 获取表的统计信以及列的统计信息,这里采用的是100比例的采样,也是主要的耗时操作

bed8e54ec4f524e1182b83f7c54763d6.png

        2 对于要收集直方图信息的列,按0.0495277038比例的采样数据插入临时表ora_temp_1_ds_110008

f3195753cc7df433707d1cc5610e5121.png

        3 从临时表ora_temp_1_ds_110008分组统计owner列频率直方图列的信息

813519a1081e51f5098a6f952a59d488.png

        4 从临时表ora_temp_1_ds_110008分组统计created列的高度均衡直方图的信息

cf07ca7da01218a55cecdaa76036a3e9.png

        5 清空临时表数据

        truncate table sys.ora_temp_1_ds_110008

        6 按4.3728587743的采样比例收集索引IND_TEST_OWNER的统计信息

8d50774daa472a49d85101e3323c5ea0.png

        7 按3.8608254352的采样比例收集索引IND_TEST_CREATED的统计信息

57e0673a82a071f5e981f3c727938b62.png

        可以看到DBMS_STATS.AUTO_SAMPLE_SIZE默认对于全表的采用的是100%的采样比例收集,但对于索引,需要收集直方图信息的列单独采集的比例很低,所以整体的速度提升很多

        从Oracle mos的文档How to Gather Optimizer Statistics on 11g (Doc ID 749227.1)我们也可以看到在Oracle11g版本,为了对表本身收集尽可能的准确以及11g版本后使用了新的更快的hash算法去计算统计信息,所以默认对于表自身的统计信息收集采用的比例是100%,而对于列级别的统计信息采集比例则采用内部自动计算的方式

82b06eaba634eac97d8f8bffe6a1ef56.png

分析指定采样比例的执行过程:

        继续通过10046跟踪分析指定采样比例30%的收集过程

        主要执行的语句步骤如下

        1 按30%采样全表扫描,获取表的统计信以及列的统计信息

841ff3d0b779db01eebd94c5567b80e3.png

        2 按30%采样分组统计owner列频率直方图列的信息

 

f8fcd6969c4cf3e542c6509211d4cb1b.png

 

dbdbf8518365fe8e3c6d31c30e05ea61.png

        3 按30%采样分组统计created列高频直方图列的信息

 

6d131d0564db906f220ceb8af4c6faa6.png

        4 按采样30%的比例收集索引IND_TEST_OWNER的统计信息

a62324d2feefd627d4033ae3414c13db.png

        5 按采样30的比例收集索引IND_TEST_CREATED的统计信息

b2b703ea301f96f438d2ec7d586a59bb.png

        可以看到指定采样比例的方式,全程不管是对于表,列的直方图以及索引都采集30%表数据的方式进行采样,所以在列的直方图以及索引这一块的消耗时间要比DBMS_STATS.AUTO_SAMPLE_SIZE高,整个过程下来收集的时间相对较长,要多次执行对表统计信息收集表TEST的全表扫描

 

总结:

        测试下来,在Oracle11g 版本使用DBMS_STATS.AUTO_SAMPLE_SIZE的方式进行统计信息收集还是比较不错的方式,在确保表自身统计信息准确的情况下,对于一些额外的统计信息列直方图,索引,则采取使用内部自动计算采样比例进行收集,兼具了采集的准确度高以及较高的执行效率

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/612656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TXB2 ELISA kit—Enzo Life Sciences ELISA试剂盒

高灵敏、经过充分验证的ELISA试剂盒,3小时内即可得结果 血栓素A2(TXA2)参与血小板聚集、血管收缩和生殖功能,但在生理条件下的半衰期仅有37秒。血栓素B2(TXB2)是TXA2非酶水合的稳定产物,因此体内…

Kafka之集群搭建

1. 为什么要使用kafka集群 单机服务下,Kafka已经具备了非常高的性能。TPS能够达到百万级别。但是,在实际工作中使用时,单机搭建的Kafka会有很大的局限性。 ​ 消息太多,需要分开保存。Kafka是面向海量消息设计的,一个T…

数字化转型助力保险业腾飞,国产化安全产品护航高质量发展

近几年,全球贸易和经济受到了巨大冲击,众多贸易企业经营环境面临困难,某保险公司为国内企业提供强有力的保险保障,大大减轻了企业在国际贸易中风险,为国家经济恢复起到关键的作用。2022年,该保险公司承保金…

麒麟Linux安装新版微信的方法

麒麟Linux系统目前有v10和v10sp1,注意,恶趣味的是v10和v10sp1竟然不通用,这导致了一些国产程序出现运行bug,通过系统自带的麒麟商店无法图形界面安装,甚至搜索不到微信等等一系列问题,易用度确实很差。 解决办法也很简…

【一周年创作总结】人生是远方的无尽旷野呀

那一眼瞥见的伟大的灵魂,却似模糊的你和我 文章目录 📒各个阶段的experience🔎大一寒假🔎大一下学期🔎大一暑假🔎大二上学期(现在) 🍔相遇CSDN🛸自媒体&#…

Go gin框架控制器接收文件

1. 限定文件参数名(一般做法) func FileController(c *gin.Context) {//取表单中namefile的文件fileHeader, err : c.FormFile("file")//_, fileHeader, err : c.Request.FormFile("file")//这种也行if err ! nil {log.Println(err…

《Spring》--使用application.yml特性提供多环境开发解决方案/开发/测试/线上--方案2

阿丹-有话说: 第二种多环境的配置选择解决方案,这个更加的灵活没在配置方面都选择了一种yml的书写方式。 原理: 在Spring Boot中,spring.profiles.active 属性用于指定当前应用程序应激活哪个环境配置。当Spring Boot应用启动时…

我没有源码有可执行程序exe 带有一个dll库,我怎么调试dll来查看exe转入的参数

如果你只有一个可执行的程序(EXE)和一个动态链接库(DLL),而没有源代码,调试起来会比较复杂。不过,你仍然可以使用一些工具和方法来调试DLL并查看EXE传入的参数。以下是一些步骤和建议&#xff1…

112.Qt中的窗口类

我们在通过Qt向导窗口基于窗口的应用程序的项目过程中倒数第二步让我们选择跟随项目创建的第一个窗口的基类, 下拉菜单中有三个选项, 分别为: QMainWindow、QDialog、QWidget如下图: 常用的窗口类有3个 在创建Qt窗口的时候, 需要让自己的窗口类继承上述三个窗口类的…

设计模式——解释器模式

更多内容,前往IT-BLOG 在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性。如果将它们归纳成一种简单的表达式(例如:正则表达式等),那么这些问题实例将是该表达式的一些句子…

科技创新领航 ,安川运动控制器为工业自动化赋能助力

迈入工业4.0时代,工业自动化的不断发展,让高精度运动控制成为制造业高质量发展的重要技术手段。北京北成新控伺服技术有限公司作为一家集工业自动化产品销售、系统设计、开发、服务于一体的高新技术企业,其引进推出的运动控制产品一直以卓越的…

基于Selenium+Python的web自动化测试框架

一、什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE:Firefo…

海量数据处理数据结构之Hash与布隆过滤器

前言 随着网络和大数据时代的到来,我们如何从海量的数据中找到我们需要的数据就成为计算机技术中不可获取的一门技术,特别是近年来抖音,快手等热门短视频的兴起,我们如何设计算法来从大量的视频中获取当前最热门的视频信息呢&…

Windows下上帝模式的实现

在windows系统上有个特殊模式,那就是上帝模式,几乎包含了windows中所有的快捷方式,有很多小伙伴还不知道,让我们一起来实现这一操作吧! 一、首先新建一个文件夹 二、接着将文件夹重命名,命名为以下代码&am…

考试面试轻松应对:技术人的备考宝库 | 开源专题 No.58

yangshun/tech-interview-handbook Stars: 97.9k License: MIT 这个项目是一个技术面试手册,提供了免费和精选的技术面试准备材料。它包括最佳实践问题、编码面试的常见问题、如何准备编程面试以及算法小抄等内容。该项目的核心优势和主要功能有: 提供…

楼宇管理新智慧:Panorama SCADA楼宇管理系统应用实例

一、背景介绍 楼宇管理系统旨在集中控制和监测楼宇运营,涵盖暖通空调(HVAC)、照明、电力系统、消防和安全系统等。通过直观的用户界面,用户得以实时监测和精准掌控这些系统,从而提升能源效率、确保设备正常运行&#…

PyCharm社区版如何创建Django项目并运行

一、配置Django环境 1、使用PyCharm打开一个普通的Python项目 2、为该项目配置Django环境 (1)点击"File"-"Settings" (2)点击"Project:项目名"-"Python Interpreter"-"号" &…

联手英特尔,释放星飞分布式全闪存储潜能

近日,英特尔官网发布了与 XSKY 星辰天合联手打造的解决方案,即 XSKY 的新一代全闪分布式存储系统 XINFINI,该存储系统采用英特尔 QAT 加速数据压缩/解压缩,从而大幅度提升存储系统性能。 全闪存储系统面临的解压缩挑战 在存储系统…

创建EasyCodeMybatisCodeHelperPro模板文件用于将数据库表生成前端json文件

在intellij idea中,通过插件EasyCodeMybatisCodeHelperPro,从现有的模板文件中选择一个复制粘贴,然后稍为修改,即可得到一个合适的模板文件。 现在的前端,越来越像后端。TypeScript替代了JavaScript,引入了…

LeetCode 232.用栈实现队列(详解) (๑•̌.•๑)

题目描述: 解题思路: 创建两个栈,一个用于入数据,一个用于出数据。分别是pushST和popST; 1.如果是入数据就直接入进pushST 2.如果是出数据,先检查popST中有无数据,如果有数据,就直接出。如果没…