收集统计信息(二) 之 dbms_stats

利用dbms_stats收集统计信息(待续) 统计收集的权限 普通用户必须有execute_catalog_role权限 grant execute_catalog_role to hr; grant connect,resource,analyze any to hr; 统计收集的时间考虑 当参数STATISTICS_LEVEL设置为TYPICAL或者ALL,系统会在夜间自动收集统计信息。 表统计; 统计表的行 阅读详情
这次讲解一下收集统计信息常用的存储过程

收集统计信息类:

一、dbms_stats.gather_table_stats存储过程
This procedure gathers table and column (and index) statistics. It attempts to parallelize as much of the work as possible, but there are some restrictions as described in the individual parameters.
SQL> desc dbms_stats.gather_table_stats;
Parameter        Type     Mode Default?
---------------- -------- ---- --------
OWNNAME          VARCHAR2 IN            --所有者的姓名
TABNAME          VARCHAR2 IN            --要分析的表名
PARTNAME         VARCHAR2 IN   Y        --要分析的分区名称
ESTIMATE_PERCENT NUMBER   IN   Y        --采样的比例
BLOCK_SAMPLE     BOOLEAN  IN   Y        --是否块分析
METHOD_OPT       VARCHAR2 IN   Y        --分析的方式
DEGREE           NUMBER   IN   Y        --分析的并行度
GRANULARITY      VARCHAR2 IN   Y        --分析的粒度
CASCADE          BOOLEAN  IN   Y        --是否分析索引
STATTAB          VARCHAR2 IN   Y        --使用的性能表名
STATID           VARCHAR2 IN   Y        --性能表的标识
STATOWN          VARCHAR2 IN   Y        --性能表的所有者
NO_INVALIDATE    BOOLEAN  IN   Y        --是否有验证游标的关系
STATTYPE         VARCHAR2 IN   Y        
FORCE            BOOLEAN  IN   Y        --强制分析,即使表被锁定

除了owner、tabname之外,其他的参数都有默认的值,比如,我们分析t表,同时分析索引我们就可以执行以下语句:
SQL> exec dbms_stats.gather_table_stats(user,'T',cascade => true);
 
PL/SQL procedure successfully completed

如果想要知道某个参数当前的默认值,可以使用dbms_stats.get_param来获得。

SQL> select dbms_stats.get_param('METHOD_OPT') from dual;
 
DBMS_STATS.GET_PARAM('METHOD_O')
--------------------------------------------------------------------------------
FOR ALL COLUMNS SIZE AUTO

下面我们来一个个介绍比较重要的参数
1、采样的比例(ESTIMATE_PERCENT)
查看默认值:
SQL> select dbms_stats.get_param('ESTIMATE_PERCENT') from dual;
 
dbms_stats.get_param('ESTIMATE_PERCENT')
--------------------------------------------------------------------------------
DBMS_STATS.AUTO_SAMPLE_SIZE
这个值为多少没有定论,理论上讲越多越好。如果你的数据直方图比较均匀,就可以用默认参数DBMS_STATS.AUTO_SAMPLE_SIZE,让oracle自己来判断。有时候,特别是批量加载的表
我们可以预估计表中的数量,可以人工设置一个合理的值(多少呢?),比如在我使用的生产数据库中,就是手动设置这个值,对于一个有1000w数据库的分区表,就把这个参数设置为0.000001,这是一个经验值。

2、分析样式(METHOD_OPT)
这个参数用来定义直方图分析的一些值,包括以下的一些选项
1)所有列:FOR ALL COLUMNS
2)索引列:只对索引的列进行分析,FOR ALL INDEXED COLUNMS
3)隐藏列:只对隐藏的列进行分析,FOR ALL HIDDEN COLUMNS
4)显示指定列:显示的指定那些列进行分析,FOR COLUMNS cloumns_name
这个参数的默认值是FOR ALL COLUMNS SIZE AUTO。
一般来说,对索引进行分析是比较合适的,通常,如果谓词中引用到某个列,大多数时候这个列上是应该创建索引的,这样可以使sql的性能得到提高;因为要使用索引上的数据,所以要对有索引的列上做直方图,这样CBO才能最大的了解索引键值中的数据分布情况,比如说是否有数据倾斜等。

3、并行度(Degree)
查看默认值:
SQL>  select dbms_stats.get_param('Degree') from dual;
 
DBMS_STATS.GET_PARAM('DEGREE')
--------------------------------------------------------------------------------
NULL
1)NULL create和alter 表的时候会指定并行度,如果Degree设置为改值的时候,oracle讲使用被分析表的属性的并行度。
2)一个数值 可以显示地指定分析时使用的并行度
3)Default_Degree
  如果设置这个值,oracle将根据初始化参数中的相关设置来决定使用的并行度。
 
4、分析的粒度(GRANULARITY)  
查看默认值:
SQL>  select dbms_stats.get_param('GRANULARITY') from dual;
 
dbms_stats.get_param('GRANULARITY')
--------------------------------------------------------------------------------
AUTO
1)ALL:将会对表的全局(Global)、分区、子分区的数据都做分析。
2)AUTO:Oracle根据分区的类型,自动决定做哪一种粒度的分析。
3)Global:只做全局的分析
4)Global AND PARTITION:只对全局和分区级别做分析,对子分区不做分析,这个和ALL的一个级别
5)PARTITION:只在分区级别做分析
6)SBUPARTITION:只在子分区做分析
这个参数比较有意思,在oltp和olap中要区别对待,一般在olap或者数据库仓库的环境里,这个参数设置的选择会直接影响到CBO的执行计划。
在OLAP或者数据仓库系统中,经常有这样的事情,新创建一个分区,将批量的数据(通常是很大的数据)加载到分区中,对分区做分析,然后做报表或者数据挖掘。 在理想的情况下,对表的全局,分区都做分析,这样才能得到最充足的数据,但是通常这样的表都非常大,如果每增加一个分区都需要做一次全局分析,那么会消耗极大的系统资源。 但是如果只对新加入的分区进行分区而不做全局分析,oracle 在全局范围内的信息就会不准确。
该参数在默认情况下,DBMS_STATS 包会对表级(全局),分区级(对应参数partition)都会进行分析。 如果把cascade 设置为true,相应索引的全局和分区级别也都会被分析。 如果只对分区级进行分析,而全局没有分析,那么全局信息没有更新,依然会导致CBO 作出错误的执行计划。

所以当一些新的数据插入到表中时,如果对这些新的数据进行分析,是一个非常重要的问题。 一般参考如下原则:
(1)看一下新插入的数据在全表中所占的比例,如果所占比例不是很大,那么可以考虑不做全局分析,否则就需要考虑,一句是业务的实际运行情况。
(2)采样比例。如果载入的数据量非常大,比如上千万或者更大,就要把采样比例压缩的尽可能地小,但底线是不能影响CBO做出正确的执行计划,采样比例的上线是不能消耗太多的资源而影响到业务的正常运行。
(3)新加载的数据应该要做分区级的数据分析。 至于是否需要直方图分析,以及设置多少个buckets(size参数指定),需要DBA一句数据的分布情况进行考虑,关键是视数据的倾斜程度而定。


二、dbms_stats.GATHER_SCHEMA_STATS存储过程
This procedure gathers statistics for all objects in a schema.
DBMS_STATS.GATHER_SCHEMA_STATS (
ownname          VARCHAR2,
estimate_percent NUMBER   DEFAULT to_estimate_percent_type
                                                (get_param('ESTIMATE_PERCENT')),
block_sample     BOOLEAN  DEFAULT FALSE,
method_opt       VARCHAR2 DEFAULT get_param('METHOD_OPT'),
degree           NUMBER   DEFAULT to_degree_type(get_param('DEGREE')),
granularity      VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'),
cascade          BOOLEAN  DEFAULT to_cascade_type(get_param('CASCADE')),
stattab          VARCHAR2 DEFAULT NULL,
statid           VARCHAR2 DEFAULT NULL,
options          VARCHAR2 DEFAULT 'GATHER',
objlist          OUT      ObjectTab,
statown          VARCHAR2 DEFAULT NULL,
no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type (
                                     get_param('NO_INVALIDATE')),
force             BOOLEAN DEFAULT FALSE,
obj_filter_list  ObjectTab DEFAULT NULL);

这个存储过程用于对某个用户下所有的对象进行分析。
优点:用户对象非常多分析方便
缺点:所有的分析使用相同的分析策略

这个存储过程大多数参数和gather_table_stats是一样的,大家可以参照前面的论述
值得一提的是有个 OPTIONS 参数
1)GATHER 对用户下的所有对象分析
2)GATHER AUTO:由Oracle决定哪些对象需要分析和如何分析,当这个参数被设置后,除了ownname、stattab、statid、objlist、statown,其余参数全部全部忽略。
3)GATHER STALE:Oracle只对陈旧的数据进行分析,Oracle通过*_tab_modifications视图来找到哪些对象的信息已经陈旧,从而对他们进行分析。
4)GATHER EMPTY:只对没有统计分析数据的对象进行分析。
5)LIST AUTO:返回一个由GATHER AUTO产生的被分析对象的列表。
6)LIST STALE:返回一个Oracle收集的统计信息过时的对象列表。
7)LIST EMPTY返回一个没有统计分析数据的对象列表。

三、GATHER_INDEX_STATS Procedure
This procedure gathers index statistics. It attempts to parallelize as much of the work as possible. Restrictions are described in the individual parameters. This operation will not parallelize with certain types of indexes, including cluster indexes, domain indexes, and bitmap join indexes. The granularity and no_invalidate arguments are not relevant to these types of indexes.
如果分析表的时候,cascade选择true时候,索引被自动分析,cluster indexes, domain indexes, and bitmap join indexes等不能使用并行分析。
DBMS_STATS.GATHER_INDEX_STATS (
   ownname          VARCHAR2,
   indname          VARCHAR2,
   partname         VARCHAR2 DEFAULT NULL,
   estimate_percent NUMBER   DEFAULT to_estimate_percent_type
                                                (GET_PARAM('ESTIMATE_PERCENT')),
   stattab          VARCHAR2 DEFAULT NULL,
   statid           VARCHAR2 DEFAULT NULL,
   statown          VARCHAR2 DEFAULT NULL,
   degree           NUMBER   DEFAULT to_degree_type(get_param('DEGREE')),
   granularity      VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'),
   no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type
                                               (GET_PARAM('NO_INVALIDATE')),
   force            BOOLEAN DEFAULT FALSE);

获取信息类:
GET_COLUMN_STATS Procedures
GET_INDEX_STATS Procedures
GET_SYSTEM_STATS Procedure
GET_TABLE_STATS Procedure

设置信息类:
SET_COLUMN_STATS Procedures
SET_INDEX_STATS Procedures
SET_SYSTEM_STATS Procedure
SET_TABLE_STATS Procedure

删除统计信息
。。其他参考官方文档就不一一描述了。

  

oracle dbms_stats统计信息管理 dbms_stats相关常见操作,可以作为一个手册参考. 阅读详情

相关推荐

dbms_stats收集统计信息

-- gather table statsexec dbms_stats.gather_table_stats(ownname =>'your schema name', tabname =>'your table name', ...

cclweee的博客 2703

DBMS_STATS.GATHER_TABLE_STATS详解

由于Oracle的优化器是CBO,所以对象的统计数据对执行计划的生成至关重要! 作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息(默认参数下是对表进行直方图信息收集,包含该表的自身-表的行数、数据块数、行长等信息;列的分析--列值的重复数、列上的空值、数据在列上的分布情况;索引的分析-索引页块的数量、索引的深度、索引聚合因子). DBM...

weixin_30636089的博客 1576

什么是统计信息以及收集查看方法

概念: oracle的统计信息:存储在数据字典里,且从多个维度描述了Oracle数据库里对象的详细信息。CBO会利用这些统计信息来计算各条路径的成本。 分类: 表、索引、列、系统、数据字典、内部对象的统计信息 收集统计信息: ANALYZE 命令和DBMS_STATS包。表、索引、列、数据字典都可以用两个。系统、内部对象只能用DBMS_STATS。 1、ANAL

我只是站在舞台上被灯光照着的小人物。 2222

【Oracle】DBMS_STATS.GATHER_TABLE_STATS分析表

表分析,简单的说,就是收集表和索引的信息,CBO根据这些信息决定SQL最佳的执行路径。通过对表的分析,可以产生一些统计信息,通过这些信息oracle的优化程序可以优化。 语法:DBMS_STATS.GATHER_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname

Just Do IT 4553

Oracle分析表使用DBMS_STATS.GATHER_TABLE_STATS并行收集统计信息

表分析,简单的说,就是收集表和索引的信息,CBO根据这些信息决定SQL最佳的执行路径。通过对表的分析,可以产生一些统计信息,通过这些信息oracle的优化程序可以进行优化。

tttzzzqqq2018的博客 3494

DBMS_STATS.GATHER_TABLE_STATS详解.pdf

作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息. DBMS_STATS.GATHER_TABLE_STATS的语法如下: DBMS_STATS.GATHER_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2, estimate_percent NUMBER, block_sample BOOLEAN, method_opt VARCHAR2, degree NUMBER, granularity VARCHAR2, cascade BOOLEAN, stattab VARCHAR2, statid VARCHAR2, statown VARCHAR2, no_invalidate BOOLEAN, force BOOLEAN); 参数说明: ownname:要分析表的拥有者 tabname:要分析的表名. partname:分区的名字,只对分区表或分区索引有用

[統計信息]權限

兩種授權方式使用戶可以用DBMS_STATS來收集/管理統計信息:1. SYSDBA;2. ANALYZE ANY DICTIONARY和ANALYZE ANY;不建議第一種方式(權限太大),第二種方式的腳本...

congwu2589的博客 122

高通camx ThreadManager

m_pCore->AcceptNewJob是将一个Job或者任务插入一个Queue,有一个工作线程循环从Queue中取Job任务执行,执行任务就是回调任务中的callback函数,AcceptNewJob实现。调用AddToPriorityQueue将任务添加到queue任务队列,那么什么时候从这个queue中取任务执行呢?有个线程循环执行DoWork,最终调用checkAndDequeue取任务执行。

GetnextWindow的专栏 436

OCP认证052考试最新题库及答案整理-2

2、Which two are true about Optimizer Statistics? A) They do not persist across Instance restarts. B) T...

crn41753的博客 119

计算机补码两位乘法移位补0还是1,补码两位乘.doc

补码两位乘沈阳航空航天大学课 程 设 计 报 告课程设计名称:计算机组成原理课程设计课程设计题目:COP2000实现补码两位乘法院(系):计算机学院专 业:计算机科学与技术(嵌入式系统方向)班 级学 号:2009040101181姓 名:张驰指导教师:杨华完成日期:2012年1月14日目 录第1章 总体设计方案11.1设计原理11.2设计思路11.3设计环境2第2章...

weixin_34471838的博客 968

Android应用加固脱壳实战:从爱加密原理到Frida内存Dump与修复

在移动应用安全领域,代码加固与动态加载是保护核心逻辑的关键技术。其原理在于通过修改应用启动流程,将原始DEX加密隐藏,并注入包含解密逻辑的壳DEX,实现运行时动态加载。这项技术的核心价值在于防止应用被逆向分析、二次打包或恶意篡改,广泛应用于金融、游戏等高安全要求场景。对于安全研究、漏洞挖掘或历史版本审计,掌握脱壳技能至关重要。本文聚焦于**爱加密**等主流加固方案,深入探讨如何利用**Frida**框架在内存中精准捕获解密后的DEX数据,并解决脱壳后常见的签名校验等运行问题,提供一套从原理到实践的完整攻防思

weixin_28716443的博客 490

OCP-052考试题库汇总(11)-CUUG内部解答版

Which two are true about Optimizer Statistics? A)They are gathered by the Manageability Monitor(MMON) background process. B)They can be gathered ...

chouluanzhi0562的博客 445

EZ-USB-FX3 slavefifo调试

最近使用fx3-usb-3.0调试slave fifo的传输,期间遇到许多难以理解的问题。在这里分享给大家,希望可以少走一些弯路,我自己是这样走过来的。 1,首先去官网下载原始的参考设计,并安装所提供的SDK软件:FX3SDKSetup_1.3.4.exe 2,接着把参考设计文档AN65974阅读一遍,分别创建新的SDK工程和FPGA工程。如果使用的原厂的开发板,那么可以按照文档提示,可以很顺畅的跑完整过测试。否则需要匹配自己的硬件,做针对性的更改和移植,而我走的是后一条路,于是开始了漫长的调试之路。.

YDY5659150的专栏 3631

oracle 如何正确收集统计信息

本篇主要是从两个角度出发:1、什么统计信息;2、怎么正确收集统计信息

qq_16729455的博客 1万+

CamoFox MCP:让AI助手隐身操作浏览器的反检测自动化实战

浏览器自动化是提升工作效率和实现数据采集的关键技术,其核心原理在于通过程序脚本模拟人类在网页上的交互行为。传统方案如Selenium或Playwright虽功能强大,但需要开发者编写复杂脚本并处理反爬机制。随着AI Agent技术的发展,自然语言驱动的自动化成为新趋势,它能将任务规划与逻辑判断交由AI处理,大幅降低使用门槛。Model Context Protocol(MCP)作为连接AI与外部工具的标准协议,在此场景下价值凸显,它使得AI助手能直接调用丰富的浏览器操作工具。CamoFox MCP创新性地将

weixin_42551967的博客 727

RT-Thread Studio 使用笔记(七)| 配合STM32CubeMX添加裸机驱动(以ADC为例)

1. 配置STM32CubeMX 2. 复制stm32xxxx_hal_msp.c文件 将 CubeMx 生成的代码 stm32f7xx_hal_msp.c 函数复制到 RT-Thread Studio 生成的工程中,并参与工程编译: 由于我们并没有使用 CubeMx 生成的工程,所以这里需要将 stm32f7xx_hal_msp.c 文件中 #include “main.h” 替换为 #i...

Mculover666的博客(嵌入式) 9627

Oracle 使用dbms_stats.gather_table_stats来进行表analyse,收集表统计信息

⏹Oracle 使用dbms_stats.gather_table_stats收集表统计信息

菜鸟记录 2109

uniapp | 基于高德地图实现位置选择功能(安卓端)

在uni-app项目中实现地图位置选择功能的解决方案。由于uni.chooseLocation功能受限,采用高德地图API自主开发。系统由父组件poiMap.vue(负责展示和跳转)和子组件poiBox.vue(核心地图逻辑)构成,通过父子组件通信传递位置数据。关键技术包括:1)使用AMapLoader动态加载地图SDK;2)集成PositionPicker实现拖拽选点;3)异步加载AMapUI插件;4)通过事件监听获取位置详情(地址/经纬度)。

大胆尝试,小心实践 734

Oracle收集统计信息_DBMS_STATS

统计信息的类型 1. 表的统计信息 2. 索引的统计信息 3. 列的统计信息 4. 系统的统计信息 5. 数据字典的统计信息 6. 内部对象的统计信息 统计信息的收集方法 1. ANALYZE 表,索引,列,系统,不能收集数据字典和内部对象 2. DBMS_STATS 都可以收集 ANALYZE 和 DBMS_STATS 的区别 1. ANALYZE 命令不能正确地收集分区表的统...

u010692693的专栏 1704

基于单片机的智能体重秤设计与嵌入式程序实现

智能体重秤的基本功能是测量用户的体重,并将数据通过无线方式传输到终端设备(如智能手机、电脑或云平台)进行管理。体重测量:实时测量用户体重,并进行数据存储。BMI(体质指数)计算:基于体重和身高计算BMI值,帮助用户了解健康状况。多用户管理:通过蓝牙或Wi-Fi技术支持多用户体重数据记录。健康数据分析:结合历史数据分析体重变化趋势。语音播报:通过语音播报用户体重,便于老人或视力不便的人士使用。数据同步:通过App或云平台同步数据,进行长期健康监控。

2201_76125393的博客 1757

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

2.1_9 Oralce 收集统计信息方式1_SYS.DBMS_STATS

Oracle收集统计信息方式1 SYS.DBMS_STATS

GroupiesM的博客 4237

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【DBMS_STATS】并行和并发收集统计信息

本文针对并行和并发收集统计信息的相关知识内容以及部分案例进行介绍,并重点介绍并发统计信息收集。

SQLplusDB的小院 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

达梦数据库如何利用DBMS_STATS收集统计信息

前言 优化统计信息描述了数据库中的对象细节。查询优化使用这些信息选择最合适的执行计划。使用DBMS_STATS包来收集统计、删除信息,将收集的统计信息记录在数据字典中。 DBMS_STATS 包中涉及到类型,如下统一说明。 OBJECTELEM 类型是 DBMS_STATS 专有类型。用户不能引用和改变该记录的内容。 OBJECTELEM 记录类型定义如下: TYPE OBJECTELEM I...

键盘上的艺术 2125

达梦数据库的DBMS_STATS包

达梦数据库(DM Database)提供了DBMS_STATS包,这个包主要用于管理和维护数据库的统计信息。通过该包,您可以收集、删除、锁定和解锁表和索引的统计信息,从而帮助优化器生成更高效的查询执行计划。DBMS_STATS。

文牧之的博客 1951
上一篇: 收集统计信息(一)
下一篇: 收集统计信息(三)
RuleV5
博客等级 码龄16年 61粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值