维护表和索引分区

1. ALTER FRAGMENT 语句

  如果想更改分片策略,可以使用ALTER FRAGMENT语句。

  • 初始化新的片段模式

ALTER FRAGMENT …INIT

  • 增加额外片段

ALTER FRAGMENT …ADD

  • 删除一个片段

ALTER FRAGMENT …DROP

  • 修改片段表达式或 dbspace

ALTER FRAGMENT …MODIFY

  • 将表合并至一张分片表中,或将片段移至独立的表中

ALTER FRAGMENT …ATTACH or DETACH

2. ALTER FRAGMENT如何被执行?

2.1 具有日志记录的数据库

  • ALTER FRAGMENT 将作为一个单独的事务被执行。
    被移动的每一行将作为逻辑日志中的一个条目。因为可能存在大量的日志条目,所以可能会导致长事务。对于非常大的表,考虑在更改分片模式时关闭日志记录,或者把语句分为小的 ALTER FRAGMENT 语句来执行。

  • 语句执行时整张表都将被独占锁定。

  • 如果一行被移至一个片段中,它将从旧位置被删除并被添加到新片段中。
    只要旧行被删除,旧行所占的磁盘空间将被立即释放,但是所在的extent仍然会保持分配直至完为空。无论是片段是要删除行还是添加行,都需要确保有足够的磁盘空间可以容纳片段。

2.2 没有日志记录的数据库

  • 旧片段将保持原封不动,直到 ALTER FRAGMENT 操作完成。 确保有足够的磁盘空间同时容纳旧的和新的片段。

  • 语句执行时整张表都将被锁定。

3. 初始化新的片段策略

  • 将一个分片的表变成非分片,要指定 dbspace 名称,用于放置非分片表

alter fragment on table table1 init in dbspace2;

  • 将一个非分片的表变成分片

alter fragment on table table1
init fragment by round robin
   in dbspace1, dbspace2;

  • 完全改变分片策略

alter fragment on table table1
init fragment by expression
  col_1 <= 10000 and col_1 >= 1 in dbspace1,
  col_1 <= 20000 and col_1 > 10000 in dbspace;

  • 使用分区表

alter fragment on table table1
init partition by expression
partition part1 col_1 between 0 and 5000 in dbspace1,
partition part2 col_1 > 5000 in dbspace2;

4. 添加新的分片

  使用 ADD子句为分片表添加新的分片。ADD 命令执行时,行将被打乱以遵守新的分片策略。

  • 表达式模式

alter fragment on table orders
add note_code >3000 in dbspace4;

alter fragment on table orders
add note_code <= 3000 or note_code = 3500
  in dbspace3 before dbspace4;

  这两个例子为基于表达式的片段增加了新的 dbspace。BEFORE 或 AFTER 子句用于在已有条件之前或之后插入新的条件。这可能非常重要,因为表达式内的条件将按顺序判定。新的条件不能被添加到remainder子句之后。如果 BEFORE 或 AFTER 未被指定,则 dbspace 将被添加到表达式的末尾,但位于remainder子句之前。

  • 为轮循分片模式新增一个 dbspace

alter fragment on table customer
add dbspace3;

  • 添加新的分区

alter fragment on table fj_customer
add partition part4 id>=20000 in datadbs1;

  在 ADD 关键字之后添加 PARTITION 关键字和分区名称,从而为已存在的表添加一个新的分区。

5. 删除片段

  使用 DROP 子句删除一个片段,并将该片段中所有的行 (或索引键)移至其他片段。

alter fragment on table table1
drop dbspace1;

alter fragment on index table1_idx1
drop dbspace4;

  确保另一个片段有足够的空间容纳将要移至此处的行。例如,在基于表达式模式的分片中,被删除片段中的行将很可能进入remainder片段。

  不允许将片段的数量减少到少于 2 个。

  为删除分区,请使用分区名称而不是其常驻的 dbspace。

6. 修改已有片段

  使用 MODIFY 子句修改片段的表达式或 dbspace。

alter fragment on table table1
modify dbspace1 to col_1 > 30000
  in dbspace1;

alter fragment on table table1
modify dbspace3 to remainder
  in dbspace5;

alter fragment on table table1
modify part1 to
  partition part1 col_1 > 30000
  in dbspace1;

  如果更改了表达式,已有片段中不匹配表达式的行将移至合适的分片中。如果对于一个被判定为假的表达式又不存在一个合适的分片,而某一行必须要被移动,则系统会返回错误,同时ALTER FRAGMENT 也会失败。

  为修改分区,请使用分区名称而不是其常驻的 dbspace。

7. 附加和分离表

  • 使用 ATTACH 子句将两个具有相同模式的的表组合成一个分片表。

alter fragment on table table1
attach table1, table2;

  • 使用 DETACH 分离分片表的一部分为未分片表。

alter fragment on table table1
detach dbspace2 table2;

alter fragment on table table1
detach partition part1 table2;

7.1 ATTACH

  可以使用 ATTACH 子句将两个相同的表组合成一个分片表。在上面的例子中,table1 和 table2 是两张表,它们被组合成一张表 table1。两个表必须具有相同的模式并且必须位于不同的 dbspace。在任何一张表中不允许出现引用、主键、唯一或者 NOT NULL 约束。被合并的表中不能含有序列(serial column),并且合并的表不能有check约束。

索引重建

  如果新增加的分片与表中已有是对称的,那么可以避免索引重建。

  • 在已经存在的表片段和新增加的片段中没有数据重合。

  • 新增片段的索引和目标表的索引必须建立在相同的列的集合上。

  • 新增片段的索引必须和目标表的索引具有相同的属性(unique、duplicate)。

  • 新增片段的索引不能位于目标表索引片段已经使用的 dbspace 中。

7.2 DETACH

  可以使用 DETACH 子句提取一个片段用于创建一个单独的表。一旦片段被分离,被创建的表将可以被删除。对于一组滚动 的按时间顺序维护的分片表,新片段会被添加,旧片段要被移除,在这种情况下DETACH尤其有用。

索引重建

  如果被分离片段的索引分片策略与分片表的索引分片策略相同或高度相似,则原始表上的索引重建是不必要的。在这种情况下,与分离片段对应的索引片段会直接被删除。

  需要注意的是,DETACH 命令对于使用 WITH ROWIDS 创建的表不起作用。

8. 跳过无法访问的片段

  SinoDB动态服务器允许使用SQL语句SET DATASKIP 或 DATASKIP 配置参数跳过无法访问的片段。

  • 打开 dataskip

SET DATASKIP ON ;

  • 关闭 dataskip

SET DATASKIP OFF ;

  • 跳过指定片段

SET DATASKIP dbspace1;

  • 使用配置参数DATASKIP设置的策略

SET DATASKIP DEFAULT;

以下情况下无法访问的分片将不能被跳过:

  • 引用完整性 – 为删除父行,子行也必须能被删除。为插入子行,父行必须可以访问。

  • 更新 – 更新操作需要将一行从一个分片移至另一个分片,要求两个分片都可以被访问。

  • 插入或删除 –一个必须被放于特定分片中的行(由于基于表达式的分片模式)要求该分片必须可以被访问。

  • 索引 – 如果 INSERT,UPDATE 或 DELETE 会影响索引键,该索引键必须可以被访问。

  • 序列键值 – 第一个片段存储当前的序列键值,要求下一个连续键值的insert操作需要用到第一个片段。

更多信息内容请移步星瑞格官方社区,期待大家加入
Sinoregal Tech ForumAsk questions, share solutions, and get to know the Sinoregal community.icon-default.png?t=N7T8https://forum.sinoregal.cn/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

音频---数字mic

一、常见的数字mic pdm麦通过codec芯片将数字麦转换为i2s信号输入到SOC 纯pdm麦就是直接进入SOC的pdm接口&#xff0c;走的是PDM信号&#xff0c;PDM信号就是两个线&#xff0c;一根数据线一根时钟线&#xff08;如顺芯ES7201/7202把MIC信号转换成PDM&#xff09;。 二、DMIC…

Chrome将网页保存为PDF的实战教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

半导体行业芯片加工机台数据采集,如何同时保证效率和准确性?

半导体行业的重要性不言而喻&#xff0c;随着互联网时代技术的不断更新和演进&#xff0c;芯片的应用更加广泛&#xff0c;新能源、信息通讯设备、4C产业、智能电网等领域均需要芯片的支撑。而芯片的制造涉及多个关键步骤&#xff0c;包括晶圆制备、氧化、光刻、刻蚀、薄膜沉积…

Vue3(四):组件通信详解(九种方法)

主要有九种方法&#xff0c;以下是详细解释及使用方法&#xff1a; 1.props props实现父子间的通信&#xff0c;是使用频率最高的。 &#xff08;1&#xff09;父传子&#xff1a;属性值是非函数。 以Father.vue和Child.vue 为例。 父组件中&#xff0c;引入子组件并给子组…

【Leetcode每日一题】 递归 - 二叉树的所有路径(难度⭐)(59)

1. 题目解析 题目链接&#xff1a;257. 二叉树的所有路径 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 针对二叉树路径的求解问题&#xff0c;我们可以采用深度优先遍历&#xff08;DFS&#xff09;的策略来寻找所…

4.16 java项目小结1

java项目登录界面实现了服务端与客户端的连接&#xff0c;实现了客户端传递输入的账号和密码&#xff0c;服务端从数据库查询&#xff0c;并反馈给客户端。 学习了正则表达式 正则表达式的作用 作用一:校验字符串是否满足规则 作用二:在一段文本中查找满足要求的内容 目前我…

Python 包围盒裁剪卫星场景

下载 Landsat 场景 我们首先下载陆地卫星场景。您可以使用EarthExplorer门户来执行此操作。 数据下载后,您应该有一个下图所示的文件夹。这些是Landsat 2 级科学产品的所有可用文件。我们将处理突出显示的文件。这些是 3 个可见光波段和SR_stac文件。 加载图像和 stac 文件 …

PHP一句话木马

一句话木马 PHP 的一句话木马是一种用于 Web 应用程序漏洞利用的代码片段。它通常是一小段 PHP 代码&#xff0c;能够在目标服务器上执行任意命令。一句话木马的工作原理是利用 Web 应用程序中的安全漏洞&#xff0c;将恶意代码注入到服务器端的 PHP 脚本中。一旦执行&#xf…

Android Room 记录一个Update语句不生效的问题解决记录

代码展示 1.数据实体类 Entity public class User {PrimaryKey(autoGenerate true)private long id;private String name;private String age;private String sex;public User(String name, String age, String sex) {this.name name;this.age age;this.sex sex;}public …

Linux 磁盘管理和文件系统

硬盘的物理结构&#xff1a; 盘片硬盘有多个盘片&#xff0c;每盘片2面磁头每面一个磁头 硬盘的数据结构&#xff1a; 扇区盘片被分为多个扇形区域&#xff0c;扇区:每个扇区存放512字节的数据&#xff0c;硬盘的最小存储单位磁道同一盘片不同半径的同心圆&#xff0c;是由磁…

postgresql|数据库|实时数据库监控利器 pg_activity 的部署和初步使用

前言&#xff1a; postgresql的调优是比较重要的&#xff0c;那么&#xff0c;如何调优呢&#xff1f;自然是在某一个时间段内&#xff0c;通常是业务高峰期或者压测时间内实时观察数据库的运行情况&#xff0c;然后通过观察到的信息判断数据库的瓶颈&#xff0c;比如&#xf…

Windows 安装 A UDP/TCP Assistant 网络调试助手

Windows 安装 A UDP/TCP Assistant 网络调试助手 0. 引言1. 下载地址2. 安装和使用 0. 引言 需要调试一个实时在线聊天程序&#xff0c;安装一个UDP/TCP Assistant 网络调试助手&#xff0c;方便调试。 1. 下载地址 https://github.com/busyluo/NetAssistant/releases 2. 安…

【Android AMS】startActivity流程分析

文章目录 AMSActivityStackstartActivity流程startActivityMayWaitstartActivityUncheckedLocked startActivityLocked(ActivityRecord r, boolean newTask, boolean doResume, boolean keepCurTransition)resumeTopActivityLocked 参考 AMS是个用于管理Activity和其它组件运行…

华为云CodeArts IDE For Python 快速使用指南

CodeArts IDE 带有 Python 扩展&#xff0c;为 Python 语言提供了广泛的支持。Python 扩展可以利用 CodeArts IDE 的代码补全、验证、调试和单元测试等特性&#xff0c;与多种 Python 解释器协同工作&#xff0c;轻松切换包括虚拟环境和 conda 环境的 Python 环境。本文简要概述…

chrome浏览器取消右上方的更新红点提示

在桌面找到chrome浏览器的快捷方式&#xff0c;右键打开属性 在目标 引号后添加 --disable-background-netwroking

git上传代码

git上传代码 先写好本地代码&#xff0c;按照下面步骤操作

初识--Linux的虚拟地址空间

重新了解地址空间 在学习c/c语言的时候,大家一定见过以下这张图 说的是程序会加载在如图的结构上,实际上,我们真的对他很了解吗,而在Linux进程控制这,就会有一个奇怪的现象 前提提要:简要介绍一下fork函数 进程内核数据结构(PCB)自己的代码以及数据 在Linux中,fork可以从当…

Docker Desktop 卡死在 “Starting the Docker Engine“问题解决

docker desktop启动卡死在这个界面长时间没有反应 wsl --status输入以上命令查看wsl状态&#xff0c;发现也是卡死的状态&#xff0c;长时间没有反应&#xff0c;猜测是因为WSL卡死导致的docker desktop卡死的 netsh winsock reset通过以上命令重置 重启电脑后问题解决

【南京艺术学院×朗汀留学】部分录取案例合集

留学申请正在紧张的进行中&#xff0c;作为深耕留学的专业资深团队&#xff0c;朗汀留学成功帮助上千名学生出国留学。 在此我们将部分留学案例作以总结&#xff0c;以供新生参考。再次恭喜所有获得理想大学offer的学生们&#xff0c;你们的努力让梦想照进现实。 学校介绍 南京…

用Scrapy抓取当当网站数据

setting.py实验目的及要求&#xff1a; 【实验目的】 通过本实验了解Scrapy爬虫框架&#xff1b;熟练掌握Scrapy的基本使用方法和常用技巧。 【实验要求】 使用Scrapy框架&#xff0c;抓取网站商品信息&#xff08;京东、淘宝、当当等任选一个&#xff09;&#xff0c;并将结…