Oracle统计信息的魔力

news2025/1/16 11:13:47

文章目录

      • 一、Oracle统计信息的概述
      • 二、统计信息主要包括以下内容
      • 三、收集统计信息的方法
        • 使用dbms_stats 程序包手动收集收集的是系统统计信息
      • 四、 案例

一、Oracle统计信息的概述

Oracle统计信息是数据库性能调优的关键组成部分,它为数据库优化器提供了关于表、索引、列和分区等对象的详细信息。这些统计信息可以帮助数据库优化器更智能地制定执行计划,从而提高查询性能。Oracle通过自动收集和更新统计信息,这些信息对于Oracle的优化器(CBO)来说非常重要,因为优化器需要根据统计信息来决定查询的最佳执行计划。

二、统计信息主要包括以下内容

表和索引的大小、行数、块数等。
数据的分布情况,例如数据的偏斜程度、不同值的数量、空值的数量等。
索引的分布和键值的信息。
这些统计信息可以帮助优化器更好地理解数据,从而选择更有效的查询路径。例如,如果一个表只有很少的数据,而一个全表扫描的成本很低,那么优化器可能会选择全表扫描而不是使用索引。相反,如果表的数据量很大,并且使用索引的成本更低,那么优化器可能会选择使用索引。

三、收集统计信息的方法

GATHER_STATS_JOB 是Oracle中的一个作业,主要用于自动收集数据库的统计信息。该作业是在数据库创建时自动创建的,由Scheduler来管理。该作业的主要任务是检测哪些对象没有统计信息或者统计信息比较陈旧,然后优先对这些对象进行分析。

GATHER_STATS_JOB 作业一般会在特定的时间段内运行,例如晚上10点到早上6点或者周末全天。这种安排可以尽量减少对数据库性能的影响。

如果您想要手动执行GATHER_STATS_JOB,可以使用以下SQL命令:
EXEC DBMS_STATS.GATHER_TABLE_STATS(‘SCHEMA_NAME’, ‘TABLE_NAME’);

当参数STATISTICS_LEVEL设置为TYPICAL或者ALL,系统就会在夜间自动收集统计信息
在这里插入图片描述
查看系统自动收集统计信息的job:
SELECT * FROM dba_scheduler_jobs WHERE job_name = ‘GATHER_STATS_JOB’;

关闭自动收集统计信息
BEGIN
dbms_scheduler.disable(‘GATHER_STATS_JOB’);
END;

使用dbms_stats 程序包手动收集收集的是系统统计信息

DBMS_STATS 提供了一些过程(如 GATHER_TABLE_STATS、GATHER_INDEX_STATS 等)来收集或修改统计信息。这些过程可以针对表、索引、列或分区进行操作。
例如,GATHER_TABLE_STATS 过程用于收集表的统计信息,而 GATHER_INDEX_STATS 过程用于收集索引的统计信息。

– 查看是否开启统计信息功能

select client_name,status from dba_autotask_client where client_name = 'auto optimizer stats collection';

四、 案例

例:创建一个job用来收集apps用户下MRP_SCHD_DATES_SN表的统计信息,并且每天10:00中自动收集
代码:

BEGIN  
  DBMS_SCHEDULER.create_job (  
    job_name        => 'gather_mrp_schd_dates_sn_stats',  
    job_type         => 'PLSQL_BLOCK',  
    job_action       => 'BEGIN dbms_stats.gather_table_stats(ownname => ''APPS'', tabname => ''MRP_SCHD_DATES_SN'', estimate_percent => 10, cascade => true, degree => 8); END;',  
    start_date       => SYSTIMESTAMP,  
    repeat_interval  => 'FREQ=DAILY; BYHOUR=10; BYMINUTE=0',  
    enabled          => TRUE);  
END;  
/

参数解释
ownname:指定表所属的模式或用户。在这个例子中,表MRP_SCHD_DATES_SN属于APPS模式。
tabname:指定要收集统计信息的表的名称。在这个例子中,要收集表MRP_SCHD_DATES_SN的统计信息。
estimate_percent:指定用于收集统计信息的样本数据的百分比。在这个例子中,使用10%的样本数据进行统计信息收集。
cascade:指定是否级联收集相关对象的统计信息。如果设置为TRUE,则会收集与表MRP_SCHD_DATES_SN相关的索引、分区等对象的统计信息。在这个例子中,设置为TRUE。
degree:指定并行处理的度数。这个参数用于指定在收集统计信息时使用的并行度。在这个例子中,设置为8,表示使用8个并行进程进行统计信息收集。
repeat_interval 设置您希望的调度频率,例如每天的10:00

验证:

– 查看数据库的所有统计信息

SELECT OWNER,TABLE_NAME,OBJECT_TYPE,NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,CHAIN_CNT,AVG_ROW_LEN,SAMPLE_SIZE,GLOBAL_STATS,
USER_STATS,LAST_ANALYZED  FROM DBA_TAB_STATISTICS;

– 查看APPS用户下关于MRP_SCHD_DATES_SN表的统计信息

SELECT OWNER,TABLE_NAME,OBJECT_TYPE,NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,CHAIN_CNT,AVG_ROW_LEN,SAMPLE_SIZE,GLOBAL_STATS,
USER_STATS,LAST_ANALYZED  FROM DBA_TAB_STATISTICS WHERE TABLE_NAME = 'MRP_SCHD_DATES_SN' AND OWNER = 'APPS';

– 查看APPS下的统计信息

SELECT OWNER,TABLE_NAME,OBJECT_TYPE,NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,CHAIN_CNT,AVG_ROW_LEN,SAMPLE_SIZE,GLOBAL_STATS,
USER_STATS,LAST_ANALYZED  FROM DBA_TAB_STATISTICS WHERE  OWNER = 'APPS';

– 查看定时执行的JOB信息

SELECT OWNER,JOB_NAME,JOB_STYLE,JOB_CREATOR, STATE,JOB_TYPE,JOB_ACTION,START_DATE,REPEAT_INTERVAL, LAST_START_DATE,LAST_RUN_DURATION, NEXT_RUN_DATE FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'GATHER_MRP_SCHD_DATES_SN_STATS';

– 查看作业GATHER_MRP_SCHD_DATES_SN_STATS的日志

SELECT * FROM DBA_SCHEDULER_JOB_LOG WHERE JOB_NAME = 'GATHER_MRP_SCHD_DATES_SN_STATS';

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

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

相关文章

图像ISP处理——自动对焦AF算法

自动对焦算法是在数码相机、摄像机和其他图像采集设备中常见的技术之一,它通过调整镜头位置或其他光学参数来确保拍摄的图像在焦点上清晰。 以下是一些常见的自动对焦算法: 对比度检测对焦(Contrast Detection Autofocus,CDAF&am…

掌握激活函数(一):深度学习的成功之源

文章目录 引言基本概念常用激活函数举例Sigmoid激活函数公式Sigmoid函数的数学特性示例基于NumPy和PyTorch实现Sigmoid函数将Sigmoid函数应用于二分类任务 Sigmoid激活函数的局限性举例 ReLU激活函数公式ReLU函数的数学特性ReLU函数的特点示例基于NumPy和PyTorch实现ReLU函数搭…

Python+OpenGL绘制3D模型(四)绘制线段

系列文章 一、逆向工程 Sketchup 逆向工程(一)破解.skp文件数据结构 Sketchup 逆向工程(二)分析三维模型数据结构 Sketchup 逆向工程(三)软件逆向工程从何处入手 Sketchup 逆向工程(四&#xf…

[RoarCTF2019] TankGame

不多说,用dnspy反编译data文件夹中的Assembly-CSharp文件 使用分析器分析一下可疑的FlagText 发现其在WinGame中被调用,跟进WinGame函数 public static void WinGame(){if (!MapManager.winGame && (MapManager.nDestroyNum 4 || MapManager.n…

DevOps持续交付之容器化CICD流水线

DevOps持续交付 随着DevOps⼤规模化的落地和应⽤,持续集成以及持续交付已经是⼀种常态的。CI指的是持续集成,使⽤的开源⼯具是Jenkins,CD指的是持续交付和持续部署,⼀个完整的软件开发⽣命周期为: 主要流程可以具体为: 构建阶段…

JS 嵌套循环之退出顶层循环

我们常常写循环的时候&#xff0c;可能会遇到嵌套循环&#xff0c;如果出现退出循环&#xff0c;一层还好&#xff0c;多层循环就费劲了&#xff0c;传统做法是加 flag&#xff0c;如下&#xff1a; for (let i 0; i < 10; i) {let flag falsefor (let j 0; j < 5; j…

C++ BuilderXE10 关于Intraweb关于IWTemplateProcessorHTML1操作

1、端口设置,port参数修改端口号。 2、初始化设置成ciMultiThreaded。这样可以避免ADO组件的加载错误。 3、IWTemplateProcessorHTML1设置&#xff0c; IWForm1->LayoutMgr IWTemplateProcessorHTML1;//关联模板(IWForm1. html) IWTemplateProcessorHTML1->RenderStyles…

【Recruitment Mercedes Benz】

Network I) JDII) IPv4与IPv6之间的区别是什么III) was advices3.1&#xff09; 防火墙&#xff0c;配置&#xff0c;数据的in/out (data flow in or flow out)3.2&#xff09; 域名&#xff0c;网址&#xff0c;端口3.3) 三次握手&#xff0c;四次挥手3.4) TCP/IP, 几层协议&a…

原生微信小程序如何动态配置主题颜色及如何调用子组件的方法

一、最终效果 二、步骤 1、在初始化进入项目时&#xff0c;获取当前主题色 2、把主题色定义成全局变量&#xff08;即在app.js中设置&#xff09; 3、tabBar也需要定义全局变量&#xff0c;在首页时需要重新赋值 三、具体实现 1、app.js onLaunch () {//获取主题数据this.set…

Go 泛型之明确使用时机与泛型实现原理

Go 泛型之明确使用时机与泛型实现原理 文章目录 Go 泛型之明确使用时机与泛型实现原理一、引入二、何时适合使用泛型&#xff1f;场景一&#xff1a;编写通用数据结构时场景二&#xff1a;函数操作的是 Go 原生的容器类型时场景三&#xff1a;不同类型实现一些方法的逻辑相同时…

Xshell 从github克隆项目:使用ssh方式。

接上文&#xff1a; https://blog.csdn.net/liu834189447/article/details/135247868 是能克隆项目了&#xff0c;但是速度太磕碜了&#xff0c;磕碜到难以直视。 找到另外一种办法&#xff0c;使用SSH克隆项目 速度嘎嘎猛。 首先得能进得去github网站&#xff0c;不能点上边…

电缆故障测试仪的其他用途是什么?

电缆故障测试仪是电力行业非常重要的设备。它可以帮助电缆维护人员快速准确地判断电缆故障点和类型&#xff0c;帮助电缆维护人员快速维护和维护电缆&#xff0c;从而减少电缆故障引起的安全事故。此外&#xff0c;电缆故障测试仪的其他用途是什么&#xff1f;现在让我们一起分…

Download Monitor Email Lock下载监控器邮件锁插件

打开Download Monitor Email Lock下载监控器邮件锁插件 Download Monitor Email Lock下载监控器邮件锁插件下载监视器的电子邮件锁定扩展允许您要求用户在获得下载访问权限之前填写他们的电子邮件地址。 Download Monitor Email Lock下载监控器邮件锁插件用法 安装扩展程序后…

德鲁伊(Druid)链接PGsql前端请求或者后端自动任务频繁出现IOException

尝试在druid配置文件中增加&#xff1a; socket-timeout: 60000 druid一些版本默认会给链接数据库socket默认10s&#xff0c;超出10s之后socket断开&#xff0c;对于GP数据库报的个IO异常。 &#xff08;对于同样的场景mysql超出10s后提示的是socketTimeOut&#xff0c;所以相…

Buck电源设计常见的一些问题(五)MOS管振荡抑制方法(三)

MOS管振荡抑制方法(三)Rboot的选取 1.Rboot的选取2.总结1.Rboot的选取 同步 Buck 变换器一般采用自举电路供电,如图所示。开关节点上升沿的振荡与上管开通关系密切,上管开通时的驱动电流路径如图所示。因此,可以通过增大 Rboot来减缓上管开通的速度,从而抑制开关节点的振…

洛谷:线性表

今天开始刷洛谷&#xff0c;之前刷leetcode都是核心代码模式&#xff0c;现在突然让我用ACM模式&#xff0c;刚开始还是很不习惯的&#xff0c;但做了几道题好点了&#xff0c;只能说洛谷题的难度是比leetcode大的。 还有就是&#xff0c;STL牛逼&#xff01; 1.询问学号(vect…

C语言—每日选择题—Day64

前言 两天没更新了&#xff0c;作者在复习期末考试&#xff0c;更新一波&#xff0c;祝大家都能顺利通过期末考试&#xff01;&#xff01;&#xff01; 指针相关博客 打响指针的第一枪&#xff1a;指针家族-CSDN博客 深入理解&#xff1a;指针变量的解引用 与 加法运算-CSDN博…

Python可视化之Matplotlib

文章目录 Matplotlib与可视化分析简单图形的绘制pylot的高级功能添加图例与注释 Matplotlib与可视化分析 我们之前对数据的处理与分析&#xff0c;其实最终还是要利用可视化工具进行更加直观的输出 我们开业通过 pip install matplotlib命令来安装对应的模块 简单图形的绘制…

《深入理解JAVA虚拟机笔记》Java 运行时内存区域

程序计数器&#xff08;线程私有&#xff09; 程序计数器&#xff08;Program Counter Register&#xff09;是一块较小的内存空间&#xff0c;它可以看做是当前线程所执行的字节码的行号指示器。在 Java 虚拟机的概念模型里&#xff0c; 字节码解释器工作时就是通过改变这个计…

mfc140u.dll丢失的解决方法,怎样修复mfc140u.dll

最近看到很多朋友在问找不到mfc140u.dll丢失怎么办&#xff1f;有什么解决方法&#xff0c;今天就给小伙伴们解答一下&#xff0c;mfc140u.dll丢失的解决办法&#xff0c;怎么修复mfc140u.dll。 一.丢失的原因 1.损坏的程序安装:在安装某个程序时&#xff0c;可能会出现意外中…