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

目录

  • 一. 介绍
  • 二. 参数说明
  • 三. 简易封装
  • 四. 效果


一. 介绍

DBMS_STATS.GATHER_TABLE_STATS 用于收集 表 级别的统计信息。这些统计信息有助于查询优化器优化查询计划,影响与表本身相关的查询性能。
Oracle 查询优化器会根据表的统计信息来选择最优的执行计划。当运行 DBMS_STATS.GATHER_TABLE_STATS 时,它会收集表的统计信息(例如:表的行数、列的基数、空值数目、数据分布等),这些信息会被存储在数据字典中。优化器使用这些统计信息来估算查询的成本,从而决定使用哪种执行计划。

⭐可以提优化查询计划,提升表的查询速度。

⏹注意事项

  • 如果表的数据量较大且数据分布发生了变化(如添加了很多新数据或删除了大量数据),则执行 DBMS_STATS.GATHER_TABLE_STATS 是必要的,才能保证优化器使用最新的表信息。
  • 频繁的统计信息更新并不总是有益的:如果你有稳定的数据负载并且查询性能已经稳定,频繁地收集统计信息可能不会显著改善性能,反而可能会增加系统负担。

二. 参数说明

  • ownname
    • 数据类型:VARCHAR2
    • schema名称,表的所有者
  • tabname
    • 数据类型:VARCHAR2
    • 要收集信息的表的名称
  • estimate_percent:
    • 数据类型:NUMBER
    • 用于估算样本的百分比(0 到 100),用于估算索引的统计信息。较低的百分比会减少收集时间,但可能会影响统计信息的准确性。
    • 默认值:DBMS_STATS.AUTO_SAMPLE_SIZE (自动选择样本大小)。
  • degree
    • 数据类型:NUMBER
    • 表示收集统计信息时要使用的并行度。如果设置为 0 或者省略,则不使用并行度。
    • 默认值:DBMS_STATS.DEFAULT_DEGREE(即通常不使用并行度)。
  • cascade
    • 数据类型:BOOLEAN
    • 是否收集索引表的统计信息。如果设置为 TRUE,则会在收集索引统计信息时,也收集该索引所在表的统计信息。
    • 默认值:FALSE
  • no_invalidate
    • 数据类型:BOOLEAN
    • 是否在收集统计信息后不使所有依赖此索引的查询计划失效。如果设置为 TRUE,则不使查询计划失效。
      • 当设置为 FALSE 时,收集统计信息后不会使现有的执行计划失效。换句话说,如果索引统计信息有变化,优化器不会重新计算查询的执行计划。
      • 如果设置为 TRUE,则会使相关的执行计划失效,并重新生成新的执行计划。
      • 通常,设置为 FALSE 是比较安全的做法,避免不必要的性能波动。
    • 默认值:FALSE(使查询计划失效)
DBMS_STATS.GATHER_TABLE_STATS(ownname => 参数值,tabname => 参数值,estimate_percent => 参数值,degree => 参数值,cascade => 参数值,no_invalidate => 参数值
);

三. 简易封装

⏹新建一个table_stats_analyse.sql的sql脚本,封装dbms_stats.gather_table_stats方法

  • 通过传参的方式指定要收集信息的表名
  • 可以将要执行的sql脚本打印在控制台上
  • 参数
    • &&1:oracle数据库用户名
    • &&2:oracle数据库密码
    • &&3tnsnames.ora文件中配置的service名称
    • &&4:表的所有者
    • &&5:表名
set echo on
set pagesize 1000
set linesize 1000
-- 启用 DBMS_OUTPUT ,打印指定内容到控制台
set serveroutput on -- 定义错误code
define ERR_CD = 2-- 设置回滚条件
whenever sqlerror exit &ERR_CD rollback;
whenever oserror exit &ERR_CD rollback;-- 连接数据库
connect &&1/&&2@&&3DECLAREv_sql_text         VARCHAR2(4000);v_ownname          VARCHAR2(15) := '&&4';v_tabname          VARCHAR2(50) := '&&5';v_estimate_percent NUMBER := NVL(TO_NUMBER('&&6'), DBMS_STATS.AUTO_SAMPLE_SIZE);v_degree           NUMBER := NVL(TO_NUMBER('&&7'), DBMS_STATS.DEFAULT_DEGREE);
BEGIN-- 拼接动态内容v_sql_text := 'DBMS_STATS.GATHER_TABLE_STATS(' || CHR(10) ||'    ownname => ''' || v_ownname || ''',' || CHR(10) ||'    tabname => ''' || v_tabname || ''',' || CHR(10) ||'    estimate_percent => ' || v_estimate_percent || ',' || CHR(10) ||'    degree => ' || v_degree || ',' || CHR(10) ||'    cascade => TRUE,' || CHR(10) ||'    no_invalidate => FALSE' || CHR(10) ||');';-- 打印到控制台DBMS_OUTPUT.PUT_LINE('=========================================');DBMS_OUTPUT.PUT_LINE('Executing SQL:');DBMS_OUTPUT.PUT_LINE('=========================================');DBMS_OUTPUT.PUT_LINE(v_sql_text);DBMS_OUTPUT.PUT_LINE('=========================================');-- 取得统计情报DBMS_STATS.GATHER_TABLE_STATS(ownname => v_ownname,tabname => v_tabname,estimate_percent => v_estimate_percent,degree => v_degree,cascade => TRUE,no_invalidate => FALSE);
END;
/-- 退出
exit 0

四. 效果

sqlplus -S /nolog @/home/apluser/work/table_stats_analyse.sql db_user oracle SERVICE_XEPDB1_CLIENT db_user CHARGE_FIXED_WORK 10 16

在这里插入图片描述

sqlplus -S /nolog @/home/apluser/work/table_stats_analyse.sql db_user oracle SERVICE_XEPDB1_CLIENT db_user CHARGE_FIXED_WORK

在这里插入图片描述

⏹在表analyse完之后,可以通过下面的SQL查看index索引的LAST_ANALYZED时间
👉因为我们设置了 cascade => TRUE,所以在分析表信息的时候,索引的信息一会一并被分析。

SELECTINDEX_NAME, INDEX_TYPE, TABLE_OWNER, TABLE_NAME, TABLE_TYPE, TO_CHAR(last_analyzed, 'YYYY/MM/DD HH24:MI:SS') AS LAST_ANALYZED
FROMUSER_INDEXES 
WHEREINDEX_NAME = 'CHARGEFIXEDWORK_DB1';

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

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

相关文章

apache-skywalking-apm-10.1.0使用

apache-skywalking-apm-10.1.0使用 本文主要介绍如何使用apache-skywalking-apm-10.1.0,同时配合elasticsearch-8.17.0-windows-x86_64来作为存储 es持久化数据使用。 步骤如下: 一、下载elasticsearch-8.17.0-windows-x86_64 1、下载ES(elasticsear…

Flink系统知识讲解之:容错与State状态管理

Flink系统知识之:容错与State状态管理 状态在Flink中叫作State,用来保存中间计算结果或者缓存数据。根据是否需要保存中间结果,分为无状态计算和有状态计算。对于流计算而言,事件持续不断地产生,如果每次计算都是相互…

Python线性混合效应回归LMER分析大鼠幼崽体重数据、假设检验可视化|数据分享...

全文链接:https://tecdat.cn/?p38816 在数据分析领域,当数据呈现出层次结构时,传统的一般线性模型(GLM)可能无法充分捕捉数据的特征。混合效应回归作为GLM的扩展,能够有效处理这类具有层次结构的数据&…

大疆机场及无人机上云

最近基于大疆上云api进行二次开发,后面将按照开发步骤对其进行说明!

【WEB】网络传输中的信息安全 - 加密、签名、数字证书与HTTPS

文章目录 1. 概述2. 网络传输安全2.1.什么是中间人攻击2.2. 加密和签名2.2.1.加密算法2.2.2.摘要2.2.3.签名 2.3.数字证书2.3.1.证书的使用2.3.2.根证书2.3.3.证书链 2.4.HTTPS 1. 概述 本篇主要是讲解讲一些安全相关的基本知识(如加密、签名、证书等)&…

SpringMVC

开发模式: (1)前后端不分离:服务端渲染 数据和结构并不分离,客户端发送请求后访问指定路径资源,服务端业务处理之后将数据组装到页面,并返回带数据的完整页面。 (2)前…

uni-app编写微信小程序使用uni-popup搭配uni-popup-dialog组件在ios自动弹出键盘。

uni-popup-dialog 对话框 将 uni-popup 的type属性改为 dialog&#xff0c;并引入对应组件即可使用对话框 &#xff0c;该组件不支持单独使用 示例 <button click"open">打开弹窗</button> <uni-popup ref"popup" type"dialog"…

UML系列之Rational Rose笔记九:组件图

一、新建组件图 二、组件图成品展示 三、工作台介绍 最主要的还是这个component组件&#xff1b; 然后还有这几个&#xff0c;正常是用不到的&#xff1b;基本的使用第四部分介绍一下&#xff1a; 四、基本使用示例 这些&#xff0c;主要是运用package还有package specifica…

数据结构《MapSet哈希表》

文章目录 一、搜索树1.1 定义1.2 模拟实现搜索 二、Map2.1 定义2.2 Map.Entry2.3 TreeMap的使用2.4 Map的常用方法 三、Set3.1 定义3.2 TreeSet的使用3.3 Set的常用方法 四、哈希表4.1 哈希表的概念4.2 冲突4.2.1 冲突的概念4.2.2 冲突的避免1. 选择合适的哈希函数2. 负载因子调…

赛灵思(Xilinx)公司Artix-7系列FPGA

苦难从不值得歌颂&#xff0c;在苦难中萃取的坚韧才值得珍视&#xff1b; 痛苦同样不必美化&#xff0c;从痛苦中开掘出希望才是壮举。 没有人是绝对意义的主角&#xff0c; 但每个人又都是自己生活剧本里的英雄。滑雪&#xff0c;是姿态优雅的“贴地飞行”&#xff0c;也有着成…

qt vs ios开发应用环境搭建和上架商店的记录

qt 下载链接如下 https://download.qt.io/new_archive/qt/5.14/5.14.2/qt-opensource-mac-x64-5.14.2.dmg 安装选项全勾选就行&#xff0c;这里特别说明下qt5.14.2/qml qt5.14.2对qml支持还算成熟&#xff0c;但很多特性还得qt6才行&#xff0c;这里用qt5.14.2主要是考虑到服…

JavaSE学习心得(反射篇)

反射 前言 获取class对象的三种方式 利用反射获取构造方法 利用反射获取成员变量 利用反射获取成员方法 练习 保存信息 跟配置文件结合动态创建 前言 接上期文章&#xff1a;JavaSE学习心得&#xff08;多线程与网络编程篇&#xff09; 教程链接&#xff1a;黑马…

FPGA 串口与HC05蓝牙模块通信

介绍 关于接线&#xff1a;HC-05蓝牙模块一共有6个引脚&#xff0c;但经过我查阅资料以及自己的实操&#xff0c;实际上只需要用到中间的4个引脚即可&#xff08;即RXD,TXD,GND,VCC&#xff09;。需要注意的是&#xff0c;蓝牙模块的RXD引脚需要接单片机的TXD引脚&#xff0c;同…

基于CiteSpace的知网专利文献计量分析与可视化

CiteSpace是一款可视化学术文献分析软件&#xff0c;它可以帮助用户分析和可视化研究领域的文献数据。适用于分析大量文献数据&#xff0c;例如由 Web of Science、Scopus 和知网等学术数据库生成的数据。图为来自CiteSpace的成图&#xff0c;是不是很美观&#xff1f;接下来我…

Gitee图形界面上传(详细步骤)

目录 1.软件安装 2.安装顺序 3.创建仓库 4.克隆远程仓库到本地电脑 提交代码的三板斧 1.软件安装 Git - Downloads (git-scm.com) Download – TortoiseGit – Windows Shell Interface to Git 2.安装顺序 1. 首先安装git-2.33.1-64-bit.exe&#xff0c;顺序不能搞错2. …

深入了解生成对抗网络(GAN):原理、实现及应用

生成对抗网络&#xff08;GAN, Generative Adversarial Networks&#xff09;是由Ian Goodfellow等人于2014年提出的一种深度学习模型&#xff0c;旨在通过对抗训练生成与真实样本相似的数据。GAN在图像生成、图像修复、超分辨率等领域取得了显著的成果。本文将深入探讨GAN的基…

Git的基本命令以及其原理(公司小白学习)

从 Git 配置、代码提交与远端同步三部分展开&#xff0c;重点讲解 Git 命令使用方式及基本原理。 了解这些并不是为了让我们掌握&#xff0c;会自己写版本控制器&#xff0c;更多的是方便大家查找BUG&#xff0c;解决BUG &#xff0c;这就和八股文一样&#xff0c;大多数都用…

信号与系统初识---信号的分类

文章目录 0.引言1.介绍2.信号的分类3.关于周期大小的求解4.实信号和复信号5.奇信号和偶信号6.能量信号和功率信号 0.引言 学习这个自动控制原理一段时间了&#xff0c;但是只写了一篇博客&#xff0c;其实主要是因为最近在打这个华数杯&#xff0c;其次是因为在补这个数学知识…

【初识扫盲】厚尾分布

厚尾分布&#xff08;Fat-tailed distribution&#xff09;是一种概率分布&#xff0c;其尾部比正态分布更“厚”&#xff0c;即尾部的概率密度更大&#xff0c;极端值出现的概率更高。 一、厚尾分布的特征 尾部概率大 在正态分布中&#xff0c;极端值&#xff08;如距离均值很…

--- 多线程编程 基本用法 java ---

随着时代的发展&#xff0c;单核cpu的发展遇到了瓶颈&#xff0c;而要提高算力就要发展多核cpu&#xff0c;他能允许多个程序同时运行&#xff0c;这时并发编程他能利用到多核的优势&#xff0c;于是就成为了时代所趋了 其实多进程编程也能进行实现并发编程&#xff0c;只不过…