Oracle统计信息手动收集与修改

Oracle统计信息手动收集与修改

  • 检查统计信息
  • 收集统计信息
    • Schema统计信息收集
    • 表统计信息收集
  • 修改统计信息
  • 锁定统计信息

检查统计信息

查看表统计信息是否过期:

select owner,table_name,partition_name from dba_tab_statistics 
where STATTYPE_LOCKED is null and STALE_STATS='YES' and owner='XXX';select table_name,partition_name from user_tab_statistics 
where STATTYPE_LOCKED is null and STALE_STATS='YES';

其中,stattype_locked表示锁定的统计信息类型(data/cache/all),stale_stats表示统计信息是否过期。

收集统计信息

Schema统计信息收集

收集某个用户下所有数据库对象的统计信息:

BEGINdbms_stats.gather_schema_stats(ownname => 'XXX',     --用户Schema名称estimate_percent => 60,               --取样率(不能超过100)method_opt   => 'FOR ALL COLUMNS SIZE AUTO',degree 	  => 32,                   --并行度(对于只能串行的某些内部SQL不生效)cascade	  => true,                 --收集表统计信息的同时也收集索引统计信息options          => 'GATHER AUTO',    --自动收集必要的统计信息no_invalidate	  => FALSE);           --使shared pool中统计信息相关的游标立即失效
END;
/

注意:

  • estimate_percent:收集表统计信息取样的行数占总行数的比率。取值范围在0.000001到100之间,默认由DBMS_STATS.AUTO_SAMPLE_SIZE参数决定。
  • method_opt:直方图统计信息收集方法。
    • 默认为FOR ALL COLUMNS SIZE AUTO,表示Oracle自己决定列直方图的收集方法;
    • 取值为FOR ALL COLUMNS SIZE REPEAT时,仅对已有直方图统计信息的列收集直方图。
  • degree:统计信息收集的并行度,默认值为NULL。
    • 不要超过parallel_max_servers参数的值。
    • 对于只能串行的某些内部SQL不生效。
  • options:收集哪些表的统计信息。
    • 默认为GATHER,收集指定Schema下所有对象的统计信息;
    • 取值为GATHER AUTO时,自动收集必须的统计信息,除no_invalidate以外的绝大多数参数都会被忽略;
    • 取值为GATHER STALE时,仅对统计信息已过期的对象收集统计信息;
    • 取值为GATHER EMPTY时,仅对没有统计信息的对象收集统计信息。
  • no_invalidate:是否使shared pool中统计信息相关的游标立即失效。默认为DBMS_STATS.AUTO_INVALIDATE,数据库自己决定。
    • 取值为TRUE时,收集完统计信息后,不会使共享池中的游标立即失效,即使共享游标已经不是最优的执行计划。原有的执行计划只有在被age out或者flush out之后,才会生成新的执行计划;
    • 取值为FALSE时,收集完统计信息后,使共享池中的游标立即失效,可能在短时间内造成大量硬解析。

表统计信息收集

收集单张表的统计信息:

BEGINdbms_stats.gather_table_stats(ownname	 => 'XXX',tabname  => 'XXX_TABLE_NAME',             --表名partname => 'P11',                        --分区名(可以省略)estimate_percent => 60,method_opt	      => 'FOR ALL COLUMNS SIZE REPEAT',degree 	      => 32,cascade	      => true,no_invalidate	  => FALSE);
END;
/

示例:

exec dbms_stats.gather_table_stats('XX_SCHEMA_NAME','XX_TABLE_NAME',cascade=>true,no_invalidate=>false);

修改统计信息

对于某些无法准确收集统计信息、并且行数基本不变的表,可以手动指定行数统计信息。

手动修改单张表的统计信息:

BEGINdbms_stats.set_table_stats(ownname => 'XXX',tabname  => 'XXX_TABLE_NAME',      --表名partname => 'P11',                 --分区名(可以省略)numrows  => 10000,                 --手动指定表或分区中行数的统计信息no_invalidate => FALSE);
END;
/

示例:

exec dbms_stats.set_table_stats('XX_SCHEMA_NAME','XX_TABLE_NAME',numrows=>20000,no_invalidate=>false);

类似地,也可以通过DBMS_STATS.SET_COLUMN_STATS来手动指定列的统计信息(distcnt、density、nullcnt、avgclen等)。

锁定统计信息

手动修改统计信息后,如果不想表的统计信息再发生变化,还可以锁定数据库对象的统计信息。

示例:

--锁定表的统计信息
exec dbms_stats.lock_table_stats(ownname => 'XX_SCHEMA_NAME',tabname => 'XX_TABLE_NAME');--锁定整个Schema下所有对象的统计信息
exec dbms_stats.lock_schema_stats(ownname => 'XX_SCHEMA_NAME');

References
[1] https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_STATS.html#GUID-3B3AE30F-1A34-4BFE-A326-15048F7E904F
[2] http://blog.itpub.net/17203031/viewspace-1067620/

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

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

相关文章

详解FreeRTOS:FreeRTOS任务删除过程源码分析(进阶篇—2)

本篇博文讲解FreeRTOS中任务删除过程的源代码,帮助各位更好理解删除任务的原理和流程。 在详解FreeRTOS:FreeRTOS任务管理函数(基础篇—11)中,讲述了可以使用vTaskDelete()函数实现删除任务。 函数源码如下: 程序说明如下: (1)、调用函数 prvGetTCBFromHandle()获取要删…

MQTT Paho Android 支持SSL/TLS(亲测有效)

MQTT Paho Android 支持SSL/TLS(亲测有效) 登录时支持ssl的交互 这是调测登录界面设计 代码中对ssl/tls的支持 使用MqttAndroidClient配置mqtt客户端请求时,不加密及加密方式连接存在以下几点差异: url及端口差异 val uri: String if (tlsConnect…

链表oj题1(Leetcode)——移除链表元素,反转链表,链表的中间节点,

链表OJ 一,移除链表元素1.1分析1.2代码 二,找到链表的中间节点2.1分析2.2代码 三,反转链表3.1分析3.2代码 四,找到链表中倒数第k个节点4.1分析4.2代码 一,移除链表元素 移除链表元素 1.1分析 这里的删除要分成两种…

python的类型注释

指定变量的类型 x: int 5name: str liming 指定函数参数的类型和返回值的类型 def multiply(a: int, b: int) -> int:return a * b使用类型提示的列表或字典 from typing import List, Dictdef process_items(items: List[str]) -> Dict[str, int]:frequencies: Di…

9月19日作业

完成文本编辑器的保存工作-代码: void Widget::on_pushButton_4_clicked() {//创建保存文件对话框QString filename QFileDialog::getSaveFileName(this,"保存文件","./","All(*.*);;Text files (*.txt)");//创建一个文件对象&…

【VisualStudio】NuGet包管理器下载缓存packages文件夹过大怎么清理

使用Visual Studio 开发工具时间长了,会发现整个项目的总大小越来越大,默认是存放在电脑系统盘里的,随着Windows11系统常常更新重启,导致系统盘闲置空间越来越小,该怎么办呢。 描述问题 整个解决方案项目会越变越大&…

problen(5)ubuntu版本问题

浅浅记录一下这段时间的血和泪吧,大概耗时快一个月了吧,终于解决了...... 因为需要开启pwn之旅,需要在Ubuntu上安装一些东西,就是下面的一条命令: sudo pip3 install pwntools -i Simple Index(显示不太好了…

Vue 03 数据绑定

Vue中有2种数据绑定的方式: 1.单向绑定(v-bind): 数据只能从data流向页面。 2.双向绑定(v-model): 数据不仅能从data流向页面,还可以从页面流向data。 备注: 1.双向绑定一般都应用在表单类元素上(如&am…

1、RocketMQ概述

第1章 RocketMQ概述 一、MQ概述 1、MQ简介 MQ,Message Queue,是一种提供消息队列服务的中间件,也称为消息中间件,是一套提供了消息生 产、存储、消费全过程API的软件系统。消息即数据。一般消息的体量不会很大。 2、MQ用途 从网上…

Java低代码:jvs-list (子列表)表单回显及触发逻辑引擎配置说明

一、子列表【新增】表单默认回显主列表关联字段 子列表新增表单可使用表单回显配置,在新增表单中默认回显,如图效果 1、子列表中进入新增页面配置 2、切换到表单设置,选择回显设置,进入回显逻辑引擎。 3、在画布中拖入【对象变量…

接入网技术

接入网 接入网是指骨干网络到用户或企业之间的所有设备。其长度一般为几百米到几公里,因而形象地被称为“最后一公里”。接入网地接入方式包括铜线(普通电话线)接入、基于双绞线的ADSL技术、基于HFC网(光纤和同轴电缆(有线电视电缆)混合网)的Cable Modem技术、光纤接入…

【Vue】浏览器自定义格式化工具

当我们不启用浏览器自定义格式化工具,输出 Ref 或者 Reactive 类的值出输出完整的返回值对象,而且 value 值需要再次点击才可以得到。 为了解决这个问题,我们可以开启浏览器自定义格式化工具。 点击 setting 齿轮 依次找到 preference ->…

一对多映射处理

8.3.1 、collection /** * 根据部门id查新部门以及部门中的员工信息 * param did * return */ Dept getDeptEmpByDid(Param("did") int did);<resultMap id"deptEmpMap" type"Dept"> <id property"did" column"did&quo…

华为云云耀云服务器L实例评测|云耀云服务器L实例部署odoo开源ERP平台

华为云云耀云服务器L实例评测&#xff5c;云耀云服务器L实例部署odoo开源ERP平台 一、云耀云服务器L实例介绍1.1 云耀云服务器L实例简介1.2 云耀云服务器L实例使用场景1.3 云耀云服务器L实例特点 二、odoo介绍2.1 odoo简介2.2 odoo特点 三、本次实践介绍3.1 本次实践简介3.2 本…

科技云报道:青云科技打出“AI算力牌”,抢跑“云+AI”新增市场

科技云报道原创。 近三年&#xff0c;中国云计算市场在多个维度同时发生着剧烈变化——疫情极大加速了全社会对于数字化的认知和接受程度&#xff1b;一系列云原生技术依托着开源和蓬勃的市场而迅速发展演变&#xff0c;更多产品和技术名词同时涌向市场&#xff1b;国际关系复…

用python代码写中秋电影动画送对象

好&#xff0c;中秋节快到了&#xff0c;那我们就写个代码送对象吧&#xff01; 目录 基础代码 添加月兔和月饼 加上颜色 添加动作 添加兔子动作 成品 基础代码 直接上print时间复杂度杠杠的&#xff1a; import timedef send_mid_autumn_movie_to_girlfriend():pri…

字符流的使用(FileReader)

1、文件字符输入流&#xff1a;一次读取一个字符 1.1、字节流读取中文输出可能会存在什么问题&#xff1f; 会乱码。或者内存溢出。 1.2、读取中文输出&#xff0c;哪个流更合适&#xff0c;为什么&#xff1f; 字符流 更合适&#xff0c;最小单位是按照单个字符读取的。 packa…

http客户端Feign使用

一、RestTemplate方式调用存在的问题 先来看我们以前利用RestTemplate发起远程调用的代码&#xff1a; String url "http://userservice/user/" order.getUserId(); User user restTemplate.getForObject(url, User.class);存在下面的问题&#xff1a; 代码可读…

spring_javaConfig实现配置

现在我们尝试不使用Spring的XML文件来配置了&#xff0c;全权交给Java来做 1 编写pojo类 这个类要被Spring接管&#xff0c;要被注册到容器中 添加Component注解通过Value注解来为属性注入值 package com.wq.pojo;import org.springframework.beans.factory.annotation.Value…