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等网页文件形式存在的一种代码执行环境,主要用于网站管理、服务器管理、…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
