ALTER TABLE 之 定点变更(in-place alter)
定点变更算法可以提供优于慢速变更算法的诸多性能优势:
定点变更算法:
1,增加了表的可用性
ALTER TABLE操作使用定点变更算法时,其他用户稍后可以访问该表,因为数据库服务器只在更新表定义和重建包含更改列的索引时才锁定该表。
对于要求7 * 24不停运行的应用程序系统,这种对表可用性的增强可以提高系统吞吐量。
使用定点变更算法时,数据库服务器锁定表的时间比慢速变更算法要短,因为数据库服务器:
- 将表转换成新的定义肘,不必为表制作副本
- 在ALERR TABLE 操作期间,不转换数据行
- 当您以后更新或插入行时,在变更操作之后使用最新定义来定点变更物理列。数据库服务器对驻留在每页上的行进行转换。
2,需要的空间比慢速变更算法所需要的少
ALTER TABLE操作使用慢速变更算法时,数据库服务器将复制表以将该表转换为新定义。 ALTER TABLE操作要求空间至少为原始表大小的两倍与日志空间之和。
ALTER TABLE操作使用定点变更算法时,可以为非常大的表节省大量的空间。
3,在ALTER TABLE操作期间提高系统吞吐量
在定点变更操作期间,数据库服务器不会对表数据的任何更改进行日志记录。不对更改进行日志记录有以下优点:
- 对于非常大的表,可以节省大量的日志空间
- 变更操作不是长事务
数据库服务器何时使用定点变更算法:
对于您在ALTER TABLE语句的ADD、DROP 和MODIFY 子句中指定的特定操作类型,数据库服务器将使用定点变更算法。
变更表执行以下操作时,数据库服务器使用定点变更算法:
- 除了使用ROWIDS 关键宇添加的列外,添加任何数据类型的列或者列的列表
- 除了TEXT或BYTE以及使用ROWIDS 关键宇创建的列外,删除任何数据类型的列
- 添加或删除使用CRCOLS 关键字创建的列
- 修改满足以下条件的列:数据库服务器可以将其旧数据类型的所有可能值转换为新数据类型
- 修改的列是分段存储表达式的一部分(如果转换后,值的更改不要求行从一个分段移到另一个分段)
注意:表包含扩展的数据类型、VARCHAR 数据类型、BOOLEAN 数据类型或智能大对象时,即使所变更的列包含内置数据类型,数据库服务器也不会使用定点变更算法。
使用定点变更算法的MODIFY操作和条件
| 源数据类型 | 目标数据类型 | 条件 |
|---|---|---|
| SMALLINT | INT、INT8、BIGINT、SMALLFLOAT或者FLOAT | 所有 |
| SMALLINT | DEC(p,s) | p-s>=5 |
| SMALLINT | DEC§ | p>=5或者不是分片表达式的一部分 |
| SMALLINT | CHAR(n) | n>=6且不是分片表达式的一部分 |
| INT或SERIAL | INT8或者BIGINT | 所有 |
| INT或SERIAL | DEC(p,s) | p-s>=10 |
| INT或SERIAL | DEC§ | p>=10或者不是分片表达式的一部分 |
| INT或SERIAL | SMALLFLOAT | 不是分片表达式的一部分 |
| INT或SERIAL | FLOAT | 所有 |
| INT或SERIAL | CHAR(n) | n>=11且不是分片表达式的一部分 |
| SERIAL | SERIAL、SERIAL8或BIGSERIAL | 所有 |
| DEC(p,s) | SMALLINT | p-s<5且(s=0或者不是分片表达式的一部分) |
| DEC(p,s) | INT或SERIAL | p-s<10且(s=0或者不是分片表达式的一部分) |
| DEC(p,s) | INT8、BIGINT、SERIAL8或BIGSERIAL | p-s<20且(s=0或者不是分片表达式的一部分) |
| DEC(p,s) | DEC(p2,s2) | p2-s2>=p-s且(s2>=s或者不是分片表达式的一部分) |
| DEC(p,s) | DEC(p2) | p2>=p或者不是分片表达式的一部分 |
| DEC(p,s) | SMALLFLOAT或FLOAT | 不是分片表达式的一部分 |
| DEC(p,s) | CHAR(n) | n>=8且不是分片表达式的一部分 |
| DEC§ | DEC(p2) | p2>=p或者不是分片表达式的一部分 |
| DEC§ | SMALLFLOAT或FLOAT | 不是分片表达式的一部分 |
| DEC§ | CHAR(n) | n>=8且不是分片表达式的一部分 |
| SMALLFLOAT | DEC§或FLOAT | 不是分片表达式的一部分 |
| SMALLFLOAT | CHAR(n) | n>=8且不是分片表达式的一部分 |
| FLOAT | DEC§或SMALLFLOAT | 不是分片表达式的一部分 |
| FLOAT | CHAR(n) | n>=8且不是分片表达式的一部分 |
| CHAR(n) | CHAR(n2) | n2>=n或(不是分片表达式的一部分 且 非ANSI日志模式 |
| 增加长度 | CHAR(n) | 非ANSI日志模式 |
| 增加长度 | DEC或MONEY | 所有 |
附加信息:
- DEC§是指将此数据类型作为浮点数据处理的非ANSI日志模式数据库
- 在ANSI日志模式数据库中,DEC§缺省为DEC(p,0),并与DEC(p,s)使用相同的变更算法
- 变更算法在不同版本中可能不同
不使用定点变更算法的变更操作:
在使用多个算法且值移动到其他分段时,数据库服务器不使用定点变更算法。
在以下情况中,数据库服务器不使用定点变更算法:
- 正在使用的算法多于一种时
如果ALTER TABLE 语句包含多个更改,那么数据库服务器在执行语句时将使用最低性能的算法。 - 值必须移动到另一个分段时
变更作为索引的一部分的列:
如果变更的列是索引的一部分,那么表仍会定点变更,但此种情况下数据库服务器会重新建立一个或多个索引。如果不需耍重建索引,应在执行更改操作之前将其删除或禁用。执行这些步骤可以提高性能。
但是,如果修改的列是主键或外键,而且您想要保持这种约束,那么您必须再次在ALERR TABLE 语句中指定这些关键字,而且数据库服务器将重建索引。
即使对主键或外键列的ALERR TABLE操作重建了索引,数据库服务器仍将利用定点变更算法。定点变更算法在性能方面可以带来以下好处:
- 无需为了将表转换成新定义而制作表的副本
- 在变更操作期间不转换数据行
- 并不重建对表的所有索引
相关文章:
ALTER TABLE 之 定点变更(in-place alter)
定点变更算法可以提供优于慢速变更算法的诸多性能优势: 定点变更算法: 1,增加了表的可用性 ALTER TABLE操作使用定点变更算法时,其他用户稍后可以访问该表,因为数据库服务器只在更新表定义和重建包含更改列的索引时才锁…...
【RAG实践】Rerank,让大模型 RAG 更近一步
RAGRerank原理 上一篇【RAG实践】基于LlamaIndex和Qwen1.5搭建基于本地知识库的问答机器人 我们介绍了什么是RAG,以及如何基于LLaMaIndex和Qwen1.5搭建基于本地知识库的问答机器人,原理图和步骤如下: 这里面主要包括包括三个基本步骤&#…...
私有化客服系统:在线客服搭建与部署的创新之路
随着互联网技术的飞速发展,企业与客户之间的沟通方式也在不断地演变。在这个信息爆炸的时代,一个高效、便捷、智能的在线客服系统成为了企业提升服务质量、增强客户满意度的重要工具。本文将详细介绍在线客服系统的构建、部署以及私有化客服的优势&#…...
VM-UNet: Vision Mamba UNet for Medical Image Segmentation
VM-UNet: Vision Mamba UNet for Medical Image Segmentation VM-UNet:基于视觉Mamba UNet架构的医学图像分割 论文链接:http://arxiv.org/abs/2402.02491 代码链接:https://github.com/JCruan519/VM-UNet 1、摘要 文中利用状态空间模型SS…...
面向对象编程:在Python中的面向对象编程奥秘
面向对象编程在Python中的奥秘 在编程的世界里,面向对象编程(Object-Oriented Programming,简称OOP)是一种非常重要的编程范式。它改变了我们思考问题和设计代码的方式。Python作为一种支持面向对象的语言,为我们提供…...
考研数学|零基础100分保底复习方案+资料分享
目标100分其实很好实现,只要你有决心,不需要去看任何人的学习技巧 其实基础差,你只要专攻基础就好了,现在的很多考研课程和资料真的很不照顾基础不好的同学,好像就默认你什么都会一样,但是还是有对于基础差…...
【MATLAB源码-第29期】基于matlab的MIMO,MISO,SIMO,SISO瑞利rayleigh信道容量对比。
操作环境: MATLAB 2022a 1、算法描述 1. SISO(单输入单输出): - SISO 是指在通信系统中,只有一个天线用于传输信号,也只有一个天线用于接收信号的情况。这是最简单的通信方式。 2. SIMO(单…...
JRT高效率开发
得益于前期的基础投入,借助代码生成的加持,本来计划用一周实现质控物维护界面,实际用来四小时左右完成质控物维护主体,效率大大超过预期。 JRT从设计之初就是为了证明Spring打包模式不适合软件服务模式,觉得Spring打包…...
Spring Boot 切面的一种的测试方法,java中级开发面试
void afterReturnName() { Assertions.assertEquals(studentController.getNameById(123L).getName(), "测试姓名Yz");} } 但往往切面中的逻辑并非这么简单,在实际的测试中其实我们也完成没有必要关心在切面中到底发生了什么(发生了什么应该在…...
嵌入式自学路线-高薪路线(持续更新,欢迎关注)
1 入门:51STM32 主要学习内容中断、定时器、串口、NAND FLASH、网络控制器、LCD屏、触摸屏等的工作原理。学习资源推荐视频:野火,正点原子书籍:野火,正点原子学习建议如果你以后的方向是驱动开发,这部分学…...
SpringMVC的运行流程
SpringMVC的运行流程可以概括为以下几个主要步骤: 用户发送请求: 用户通过浏览器或其他客户端发送HTTP请求到服务器。 前端控制器(DispatcherServlet)接收请求: SpringMVC的前端控制器(通常是DispatcherSe…...
成绩分析 蓝桥杯 java
成绩分析 小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。 请计算这次考试的最高分、最低分和平均分。 输入格式 输入的第一行包含一个整数 n,表示考试人数。 接下来 n 行,每行包含一…...
计算psnr ssim niqe fid mae lpips等指标的代码
以下代码仅供参考,路径处理最好自己改一下 # Author: Wu # Created: 2023/8/15 # module containing metrics functions # using package in https://github.com/chaofengc/IQA-PyTorch import torch from PIL import Image import numpy as np from piqa import P…...
OpenHarmony开发技术:【国际化】实例
国际化 如今越来的越多的应用都走向了海外,应用走向海外需要支持不同国家的语言,这就意味着应用资源文件需要支持不同语言环境下的显示。本节就介绍一下设备语言环境变更后,如何让应用支持多语言。 应用支持多语言 ArkUI开发框架对多语言的…...
c++子类和父类成员函数重名
子类和父类返回值参数相同,函数名相同,有virtual关键字,则由对象的类型决定调用哪个函数。子类和父类只要函数名相同,没有virtual关键字,则子类的对象没有办法调用到父类的同名函数,父类的同名函数被隐藏了,…...
《C++程序设计》阅读笔记【7-堆和拷贝构造函数】
🌈个人主页:godspeed_lucip 🔥 系列专栏:《C程序设计》阅读笔记 本文对应的PDF源文件请关注微信公众号程序员刘同学,回复C程序设计获取下载链接。 1 堆与拷贝构造函数1.1 概述1.2 分配堆对象1.3 拷贝构造函数1.3.1 默…...
洛谷 P1048 [NOIP2005 普及组] 采药
辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同…...
VMware vSphere虚拟化基础管理平台
VMware简介 VMware介绍 官网:https://www.vmware.com/cn.html VMware公司成立于1998年,2003年存储厂商EMC以6.35亿美元收购了VMware;2015年10月,戴尔宣布以670亿美元收购EMC。VMware公司在2018年全年收入79.2亿美元。 VMware主…...
leetcode刷题-代码训练营-第7章-回溯算法1
回溯法模板 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表); // 递归回溯,撤销处理结果} }理解 从…...
三种常见webshell工具的流量特征分析
又来跟师傅们分享小技巧了,这次简单介绍一下三种常见的webshell流量分析,希望能对参加HW蓝队的师傅们有所帮助。 什么是webshell webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,主要用于网站管理、服务器管理、…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
webpack面试题
面试题:webpack介绍和简单使用 一、webpack(模块化打包工具)1. webpack是把项目当作一个整体,通过给定的一个主文件,webpack将从这个主文件开始找到你项目当中的所有依赖文件,使用loaders来处理它们&#x…...
麒麟系统使用-进行.NET开发
文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的,如果需要进行.NET开发,则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET,所以要进…...
