达梦数据库统计信息的导出导入
一、统计信息
对象统计信息描述了对象数据的分布特征。统计信息是优化器的代价计算的依据,可以帮助优化器较精确地估算成本,对执行计划的选择起着至关重要的作用。统计信息的收集频率是一把双刃剑,频率太低导致统计信息滞后,频率太高又影响查询性能,因此,系统管理员需要根据实际情况,合理安排统计信息收集的频率。
达梦数据库的统计数据对象分三种:表统计信息、列统计信息和索引统计信息。统计信息生成过程分三个步骤:
1. 确定采样的对象:根据数据对象,确定需要分析哪些数据。
1) 表:计算表的行数、所占的页数目、平均记录长度。
2) 列:统计列数据的分布特征。
3) 索引:统计索引列的数据分布特征。
2. 确定采样率。用户根据统计数据对象的大小,确定采样率。如缺省,则默认通过内部算法确定数据的采样率。
3. 生成统计信息。根据不同的数据对象生成不同的统计信息。
1)表:表的行数、所占的页数目、平均记录长度等汇总数据。
2)列和索引:将采样的数据按照不同的分布特征生成相应的直方图。有两种类型的直方图:频率直方图和等高直方图。根据算法分析表的数据分布特征(以不同值的数据量 1万个为分界线),确定直方图的类型。频率直方图的每个桶(保存统计信息的对象)的高度不同,等高直方图每个桶的高度相同。生成直方图时,如果不同值少于 1 万个则用频率直方图,否则用等高直方图。
在执行查询时,如果数据对象存在统计信息,代价算法可以根据统计信息中的数据,比较精确地计算出操作所需花费的成本,以此来确定连接方式、对象访问路径、连接顺序,选择最优的执行计划。
二、应用场景
随着数据库国产化进程的加快,越来越多的行业、越来越多的系统将选择我们的国产数据库,那么这个过程中必然会遇到大数据量系统迁移的情况,异构数据库迁移完成后,一定会在新替换的国产数据库中收集统计信息。在达梦数据库中,统计信息的导出导入,便适合应用于这种数据库数据量比较大,迁移异构数据库数据到DM数据库后统计信息收集耗时较长的场景。举例:假如客户原来使用A数据库,迁移到新数据库后,统计信息首次完全收集耗时会很长,那么为了缩短这一时间,可以在A数据库系统切换到国产数据库的上线演练过程中,将统计信息完全收集并导出,在上线当天将前期的统计信息导入上线的生产环境,以此来缩短收集统计信息的耗时,那么整体的时间窗口也将会大大减少。
三、具体操作
前提说明:假设存在两套达梦数据库,一套是进行过上线演练的DMA库(IP为192.168.10.100),一套是即将上线使用的DMB库(IP为192.168.10.200),其中DMA库已完成数据库统计信息的收集。
DMA库:
1、创建系统包
默认情况下,DM 在新建库第一次启动数据库服务时会自动创建除了 DMGEO、DBMS_JOB、DBMS_WORKLOAD_REPOSITORY 和 DBMS_SCHEDULER 之外的所有系统包。如果数据库没有做过换bin升级,此步可跳过,如不跳过,则执行创建系统包的系统存储过程时会重建指定的系统包。
--检查系统包是否创建,返回1表示已创建,返回0为表示未创建
SELECT SP_CREATE_SYSTEM_PACKAGES(1);
--创建(或重建)指定的系统包
SP_CREATE_SYSTEM_PACKAGES(1,'DBMS_STATS');
2、测试系统包的使用
--测试创建一个增加了前缀的临时统计信息表
DBMS_STATS.CREATE_STAT_TABLE('SYSDBA', 'OADB_ALLTB');
#其中SYSDBA为统计信息表的模式名,区分大小写;OADB_ALLTB为统计信息表名,区分大小写,系统实际创建的表会增加前缀。
--删除统计信息表
DBMS_STATS.DROP_STAT_TABLE ('SYSDBA', 'OADB_ALLTB');
#其中SYSDBA为统计信息表的模式名,区分大小写;OADB_ALLTB为创建时指定的统计信息表名,区分大小写。
3、把目标表的统计信息导出到指定的统计信息表中
--查看用户下的统计信息数量,第二步中指定了统计信息表创建到SYSDBA模式下,所以此处用SYSDBA查看
SELECT COUNT (*) FROM STAT$_OADB_ALLTB;
--备份统计信息,使用SYSDBA用户登陆数据库,执行下面备份语句
语法:DBMS_STATS.EXPORT_TABLE_STATS(OWNNAME, TABNAME, PARTNAME, STATTAB, STATID, CASCADE, STATOWN, STAT_CATEGORY);
参数详解OWNNAME 目标表的模式名,区分大小写。TABNAME 目标表名,区分大小写。PARTNAME 目标表分区名,如果不指定分区,则一起导出所有子表的统计信息,缺省为NULL。STATTAB 统计信息表名,区分大小写。STATID 由用户指定的统计信息标识名,缺省为空字符串。CASCADE 是否连列和索引的统计信息一起导出,缺省为 TRUESTATOWN 统计信息表的模式名,区分大小写,缺省为 NULL。STAT_CATEGORY 仅保留参数以兼容 ORACLE,功能暂未实现。
---单表
DBMS_STATS.EXPORT_TABLE_STATS('OA', 'OA_TABLE1', NULL, 'OADB_ALLTB', 'export stats test', TRUE, 'SYSDBA');
---多表
DECLARE
BEGIN FOR RS IN (SELECT OWNER,TABLE_NAME FROM DBA_TABLES WHERE OWNER IN ('USER1','USER2'))LOOPDBMS_STATS.EXPORT_TABLE_STATS(RS.OWNER,RS.TABLE_NAME,NULL,'OADB_ALLTB','table stats',true);END LOOP;
END;
--查看SYSDBA用户下的统计信息数量
SELECT COUNT (*) FROM STAT$_OADB_ALLTB;
备份统计信息使用ALLSTATS用户登陆188数据库,执行下面备份语句
BEGIN FOR RS IN (SELECT OWNER,TABLE_NAME FROM DBA_TABLES WHERE OWNER='ALLSTATS')
LOOP
DBMS_STATS.EXPORT_TABLE_STATS(RS.OWNER,RS.TABLE_NAME,STATTAB=>'TB_STATS',STATID => 'T1_202108161020');
END LOOP;
END;
--查看用户下的统计信息数量
SELECT COUNT (*) FROM STAT$_TB_STATS;
4、dexp导出统计信息表
./dexp SYSDBA/SYSDBA@192.168.10.100:5236 DIRECTORY=/dm/dumpfile/ FILE=ALL_STATS_20230301.DMP LOG=DEXP_ALL_STATS_20230301.LOG TABLES=SYSDBA.'STAT$_OADB_ALLTB'
DMB库:
1、创建系统包
默认情况下,DM 在新建库第一次启动数据库服务时会自动创建除了 DMGEO、DBMS_JOB、DBMS_WORKLOAD_REPOSITORY 和 DBMS_SCHEDULER 之外的所有系统包。如果数据库没有做过换bin升级,此步可跳过,如不跳过,则执行创建系统包的系统存储过程时会重建指定的系统包。
--检查系统包是否创建,返回1表示已创建,返回0为表示未创建
SELECT SP_CREATE_SYSTEM_PACKAGES(1);
--创建(或重建)指定的系统包
SP_CREATE_SYSTEM_PACKAGES(1,'DBMS_STATS');
2、测试系统包的使用
--测试创建一个增加了前缀的临时统计信息表
DBMS_STATS.CREATE_STAT_TABLE('SYSDBA', 'OADB_ALLTB');
#其中SYSDBA为统计信息表的模式名,区分大小写;OADB_ALLTB为统计信息表名,区分大小写,系统实际创建的表会增加前缀。
--删除统计信息表
DBMS_STATS.DROP_STAT_TABLE ('SYSDBA', 'OADB_ALLTB');
#其中SYSDBA为统计信息表的模式名,区分大小写;OADB_ALLTB为创建时指定的统计信息表名,区分大小写。
3、dimp导入统计信息表
./dimp SYSDBA/SYSDBA@192.168.10.200:5236 DIRECTORY=/dm/dumpfile/ FILE=ALL_STATS_20230301.DMP LOG=DIMP_ALL_STATS_20230301.LOG TABLES=SYSDBA.'STAT$_OADB_ALLTB' TABLE_EXISTS_ACTION=REPLACE
4、把统计信息表中的统计信息导入到目标表中
--还原统计信息,使用SYSDBA用户登陆数据库,执行下面备份语句
语法:DBMS_STATS.IMPORT_TABLE_STATS(OWNNAME, TABNAME, PARTNAME, STATTAB, STATID, CASCADE, STATOWN, NO_INVALIDATE, FORCE, STAT_CATEGORY);
参数详解OWNNAME 目标表的模式名,区分大小写。TABNAME 目标表名,区分大小写。PARTNAME 目标表分区名,如果不指定分区,则一起导出所有子表的统计信息,缺省为NULL。STATTAB 统计信息表名,区分大小写。STATID 由用户指定的统计信息标识名,缺省为空字符串。CASCADE 是否连列和索引的统计信息一起导出,缺省为 TRUESTATOWN 统计信息表的模式名,区分大小写,缺省为 NULL。NO_INVALIDATE 是否让依赖游标失效,缺省为 TRUE。FORCE 仅保留参数以兼容 ORACLE,功能暂未实现。STAT_CATEGORY 仅保留参数以兼容 ORACLE,功能暂未实现。
---单表
DBMS_STATS.IMPORT_TABLE_STATS('OA', 'OA_TABLE1', NULL, 'OADB_ALLTB', 'import stats test', TRUE, 'SYSDBA');
---多表
DECLARE
BEGINFOR RS IN (SELECT OWNER,TABLE_NAME FROM DBA_TABLES WHERE OWNER IN ('SYSDBA','USER2'))LOOPBEGINDBMS_STATS.IMPORT_TABLE_STATS(RS.OWNER,RS.TABLE_NAME,NULL,'OADB_ALLTB','TABLE STATS',TRUE);EXCEPTIONWHEN OTHERS THENPRINT ('OWNER:' || RS.OWNER);PRINT ('TABLE_NAME:' || RS.TABLE_NAME);PRINT ('CODE: ' || SQLCODE);PRINT ('ERRM: ' || SQLERRM);END;END LOOP;
END;
相关文章:
达梦数据库统计信息的导出导入
一、统计信息对象统计信息描述了对象数据的分布特征。统计信息是优化器的代价计算的依据,可以帮助优化器较精确地估算成本,对执行计划的选择起着至关重要的作用。统计信息的收集频率是一把双刃剑,频率太低导致统计信息滞后,频率太…...

信息系统基本知识(六)
大纲 信息系统与信息化信息系统开发方法常规信息系统集成技术软件工程新一代信息技术信息系统安全技术信息化发展与应用信息系统服务管理信息系统服务规划企业首席信息管及其责任 1.7 信息化发展与应用 我国在“十三五”规划纲要中,将培育人工智能、移动智能终端…...
<C++>智能指针
1. 智能指针 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<memory> using namespace std;int div() {int a, b;cin >> a >> b;if (b 0)throw invalid_argument("除0错误");return a / b; }void func() {int* p1 new in…...
1.分析vmlinux可执行文件是如何生成的? 2.整理内核编译流程:uImage/zImage/Image/vmlinx之间关系
一、分析vmlinux可执行文件是如何生成的? 1、分析内核的底层 makefile 如下: vmlinux: scripts/link-vmlinux.sh vmlinux_prereq $(vmlinux-deps) FORCE$(call if_changed,link-vmlinux)vmlinux_prereq: $(vmlinux-deps) FORCE发现vmlinux的生成主要依…...

数据结构4——线性表3:线性表的链式结构
基本概念 链式存储结构用一组物理位置任意的存储单元来存放线性表的数据元素。 这组存储单元既可以是连续的又可以是不连续的甚至是零散分布在任意位置上的。所以链表中元素的逻辑次序和物理次序不一定相同。而正是因为这一点,所以我们要利用别的方法将这些…...
weblogic 忘记密码重置密码
解决:weblogic 忘记密码 weblogic安装后,很久不用,忘记访问控制台的用户名或者密码,可通过以下步骤来重置用户名密码。 版本:WebLogic Server 11g 说明:%DOMAIN_HOME%:指WebLogic Server 域(…...

安卓开发之动态设置网络访问地址
之前开发程序联测测接口的时候,因为要和不同的后台人员调接口,所以经常要先把程序里的ip地址改成后台人员给我的。每次都要先修改ip地址,之后编译运行一下,才能测试。但要是换了个后台人员,或者同时和2个后台人员测接口…...

深度学习模型训练工作汇报(3.8)
进行数据的初始整理的准备 主要是进行伪序列字典的设置,以及训练数据集的准备。 期间需要的一些问题包括在读取文件信息的时候,需要跳过文件的第一行或者前两行,如果使用循环判断的话,会多进行n次的运算,这是不划算的…...

【ns-3】添加nr(5G-LENA)模块
文章目录前言1. 下载5G-LENA源代码2. 配置并重新构建ns-3项目参考文献前言 本篇以ns-3.37为例介绍如何在ns-3中添加nr(5G-LENA)模块 [1]。5G-LENA是一个由Mobile Networks group CTTC(Centre Tecnolgic de Telecomunicacions de Catalunya&a…...
(枚举)(模拟)(前缀和)(数组模拟哈希)(可二分)1236. 递增三元组
目录 题目链接 一些话 流程 套路 ac代码 题目链接 1236. 递增三元组 - AcWing题库 一些话 int f[N]; memset(f,0,sizeof f)影响不到f[N] 所以尽量不要对f[N]赋值,不要用f[N]操作 流程 //由三重暴力i,j,k因为三重暴力底下是分别用i和j,j和k作比较…...
mysql五种索引类型(实操版本)
为什么使用索引 最近学习了Mysql的索引,索引对于Mysql的高效运行是非常重要的,正确的使用索引可以大大的提高MySql的检索速度。通过索引可以大大的提升查询的速度。不过也会带来一些问题。比如会降低更新表的速度(因为不但要把保存数据还要保…...

微服务进阶之 SpringCloud Alibaba
文章目录微服务进阶🍓SpringCloud 有何劣势?🍓SpringCloud Alibaba 提供了什么?提示:以下是本篇文章正文内容,SpringCloud 系列学习将会持续更新 微服务进阶 🍓SpringCloud 有何劣势࿱…...
前端性能优化笔记2 第二章 度量
相关 Performance API 都在 window.performance 对象下 performance.now() 方法 精度精确到微妙获取的是把页面打开时间点作为基点的相对时间,不依赖操作系统的时间。 部分浏览器不支持 performance.now() 方法,可以用 Date.now() 模拟 performance.n…...

关于new和delete的一些思考,为什么不能在析构函数中调用delete释放对象的内存空间,new和delete的原理
最近在写代码的时候,觉得每次new出来的对象都需要去delete好麻烦,于是直接把delete写到了析构函数中,在析构函数里面写了句delete this,结果调用析构函数的时候死循环了,不是很理解原因,于是去研究了一下。…...

一场以数字技术深度影响和改造传统实业的新风口,正在开启
当数字经济的浪潮开始上演,一场以数字技术深度影响和改造传统实业的新风口,正在开启。对于诸多在互联网时代看似业已走入死胡同的物种来讲,可以说是打开了新的天窗。对于金融科技来讲,同样如此。以往,谈及金融科技&…...

【LeetCode】13. 罗马数字转整数
题目链接:https://leetcode.cn/problems/roman-to-integer/ 📕题目要求: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 例如, 罗马数字 2 写做 II ,即…...

2023/3/8集合之TreeSet HashSet简介 不含代码
TreeSet : 底层是由TreeMap维护的 无序的,不可重的 底层结构 : 红黑树(平衡二叉树) 特点 : 查询效率高,默认升序排序引用场景 : 适合应用在存储多个单个值的数据的集合,去重的,自动升序排序的场景新增方法:新增了一些与比较大小相关的方法 遍历方式 1)foreach 2)iterator 1测试…...

【面试1v1实景模拟】面试中常见的Java关键字详解
笑小枫专属目录老面👴:Java中有哪些关键字老面👴:简单介绍一下 final 关键字老面👴:简单介绍一下 this、super 关键字老面👴:简单介绍一下 static 关键字老面👴ÿ…...

MySQL8.0.16存储过程比5.7.22性能大幅下降
MySQL8.0.16存储过程比5.7.22性能大幅下降 1、背景 从5.7.22迁移数据库到8.0.16,发现存储过程执行性能大幅下降。原来在5版本上执行只需要3-5秒,到8版本上居然要达到上万秒。 5版本: call Calculation_Week() OK 时间: 3.122s 8版本&#x…...

基于MATLAB的无线信道的传播与衰落(附完整代码与分析)
目录 一. 一般路径损耗模型 1. 1自由环境下路径损耗 1. 2 考虑实际情况 1.3 考虑阴影衰落 二. 代码仿真与理解 (1)函数文件 (2)函数文件 (3)主运行文件 三. 运行结果及理解 3.1 3.2 3.3 一. …...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...