KingbaseES Create Index Concurrently 过程探究

news2024/11/30 12:30:56

前言:

我们知道Oracle 可以通过create index online 在线创建索引,而不影响其他会话修改数据,但Oracle 实际在online 创建索引的最后一步,实际还是需要进行锁升级,申请表级的S锁,因此,最后还是有可能堵塞其他会话。而KingbaseES 的两阶段创建索引的机制,则不会对增删改操作有任何影响。以下我们通过观察创建索引过程中会话持有锁及等待的情况,来看下整个过程。

一、KingbaseES 非 Concurrently 创建索引

过程及锁申请如下:

  可以看到,正常创建索引的过程需要一直持有 ShareLock 锁,而 ShareLock 与 RowExclusiveLock 冲突,增删改操作无法进行。

二、KingbaseES 以 Concurrently 创建索引

过程及锁持有如下:

  注意点:

  1. 会话A 模拟了两次事务(这两次事务间隔时间很长),主要是为了验证 concurrently 创建索引的两次读取数据的过程。
  2. 会话A 在结束第1个事务后,会话B 才能开始扫描表(所有create index 开始时活动事务结束后),并建立索引。
  3. 会话 A 在结束第1 个事务后,立即开启事务2 , 此时 会话B 才开始建索引,也就是先于 B (在会话B 需要取得snapshot2前),这样会话B 又得等待。
  4. 可以看到,在创建过程中会话B 的virtualtransaction 会变动(两个值)

在并发索引构建中,需要在两个虚拟事务中发生两次表扫描。在每一次表扫描之前,索引构建必须等待已经修改了 表的现有事务终止。在第二次扫描之后,索引构建必须等待任何持有早于第二次扫描的快照的事务终止。然后该索引最终能被标记为准备好使用,并且CREATE INDEX命令终止。 不过即便那样,该索引也不是立刻可以用于查询:在最坏的情况下,只要早于索引构建开始时存在的事务存在,该索引就无法使用。

具体阶段如下:

  1. 开启 virtualtransaction1,拿到当前snapshot1。
  2. 扫描A表前,等待所有snapshot1前所有修改过A表的事务结束。
  3. 扫描A表,并建立索引。
  4. 结束 virtualtransaction1。
  5. 开启 virtualtransaction2,拿到当前 snapshot2。
  6. 再次扫描A表前,等待snapshot2前所有修改过A表的事务结束。
  7. 在snapshot2之后启动的事务对A表执行的DML,会修改索引。
  8. 再次扫描A 表,根据xmin or xmax ,在snapshot1到snapshot2之间变更的记录,合并到索引。
  9. 上一步更新索引结束后,等待任何持有早于第二次扫描的快照的事务结束(比如某repeatable read事务读取了该表 )。
  10. 结束索引创建。索引可见。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32CUBEMX开发GD32F303(17)----内部Flash读写

概述 本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过开发板内进行验证。 本例程主要讲解如何对芯片自带Flash进行读写,用芯片内部Flash可以对一些需要断电保存的数据进行保存,无需加外部得存储芯片&#xff0c…

广告公司到底干什么的?欣奥诚分享

广告公司到底干什么的? 这篇文章从产业的角度拆分广告业,还原一个真实的广告业出来。 01. 它们是谁? 早年广告业有4类公司:品牌咨询类公司;设计创意类公司;媒介投放类公司;活动执行类公司。 …

[附源码]Python计算机毕业设计电子病历系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

前端大全之JavaScript(简称JS)

目录 一、概念 1.总体概要 2.来源说明 3.JavaScript和java的关系 4.JS的特点 5.浏览器执行JS的简介 6.JS的组成 二、引入方式 1.内部脚本例子 2. 外部脚本例子 三、使用规则 1.书写语法 2.报错的查看方式 3.输出语句 (1)写入警告框 &am…

SecXOps 中的数据集存储方式

安全数据资产 统一管理DataOps,即 Data 和 Operations 的集成,于 2014 年首次提出。Gartner 将 DataOps 定义为“一种协作性的数据管理 实践,专注于改进组织内数据管道的通信、集成和自动化”[7]。DataOps 是一种面向流程的自动化方法&#x…

基于Java开发的(控制台)模拟的多用户多级目录的文件系统【100010035】

多级文件系统 1 设计目的 为了加深对文件系统内部功能和实现过程的理解,设计一个模拟的多用户多级目录的文件系统,并实现具体的文件物理结构、目录结构以及较为完善的文件操作命令集。 2 设计内容 2.1系统操作 操作命令风格:本文件系统的…

110115-07-6,Ac-LLM-CHOCalpain 抑制剂

Ac-LLM-CHO (ALLM) is a potent competitive inhibitor of cathepsin L (Ki0.6 nM) and cathepsin B (Ki100 nM). Ac-LLM-CHO (ALLM)是组织蛋白酶L (Ki0.6 nM)和组织蛋白酶B (Ki100 nM)的有效竞争性抑制剂。 编号: 124055中文名称: Calpain 抑制剂 II: Ac-Leu-Leu-M…

[附源码]Node.js计算机毕业设计点餐系统设计Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

游戏开发59课 性能优化

7. 耗电优化 游戏耗电和游戏卡并无必然联系,有些游戏在某些设备上虽然运行很流畅,但发现耗电很厉害,玩了不到半个小时,电量已经出现警报。游戏耗电的原因主要是因为:CPU占用普遍高,内存操作频繁&#xff0…

Spring MVC学习 | 获取请求参数

文章目录一、ServletAPI获取二、控制器方法形参获取2.1 不使用RequestParam注解2.2 使用RequestParam注解2.2.1 简介&使用2.2.2 相关注解2.3 实体类类型的形参三、中文乱码问题3.1 在tomcat中设置编码(了解)3.2 使用Spring MVC内部过滤器设置编码学习…

【PortSwiggerのWeb Security Academy靶场】SQL Injection系列 9th

Subject Lab: Blind SQL injection with conditional responses Url: portswigger.net/web-securit… Mind Palace 在带着 cookies的后续访问网页时会找到出现的 Welcome back! 标志 > 无法回显 > 采用盲注的方式 0x01 确认注入点 0x02 爆破数据库名 # 测试informati…

qiankun 部署微前端-vue2(一)

自从前后端分离以来,一直都有个困惑,就是随着项目的功能的不断拓展,项目变得不断臃肿,每次打包编译,都要把整个项目编译,非常耗时。如果前端也能像后端一样,在项目搭建初期,有类似微…

C++11【包装器】

包装器📖1. 为什么需要包装器📖2. 如何使用包装器📖3. bind函数📖1. 为什么需要包装器 包装器也叫做适配器,C中的function本质是一个类模板,也是一个包装器. 为什么需要function呢? 我们来看…

ant-design-vue修改input组件样式

问题场景 不得不说ant-design-vue的样式是真的难改。。。今天尝试了很多种方案,都无疾而终。最终,通过全局scss文件引入的方式解决了。 几种方案: 直接行内样式,发现部分可以,部分不行将style 的scoped属性去掉&#…

非线性负载的主要分类及其特性

非线性负载的主要分类 通常而言,由线性元件原件组成的负载称为线性负载,线性负载的输出与输入呈线性关系,典型的线性负载如电阻、电容和电感等;而由非线性元件构成的负载为非线性负载,在正弦波电压供电时会产生非正弦…

Sentinel服务流控

Sentinel通过流量控制(flow control)以及熔断降级来保护系统资源 QPS超过阈值直接失败 流量控制(flow control),其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制&#x…

如何使用ABAQUS对新能源动力电池进行Pack分析

电池Pack的仿真,按照系统层次,可从电芯、模组、Pack和整车逐级分析。电芯主要集中于机械性能的材料拟合、激光焊接以及电-化学-热-机耦合建模,模组主要集中于跌落、振动以及模组冷却,Pack主要集中于**、冲击和振动以及Pack热管理&…

Token Merging: Your ViT But Faster

论文:https://arxiv.org/pdf/2210.09461.pdf 代码: https://github.com/facebookresearch/ToMe 这篇论文写的很棒呀,以摘要为例,第一句话指明ToMe的作用(提高ViT-based模型的训练和推理速度)和特色&#x…

java面试强基(21)

什么是线程和进程? 何为进程? ​ 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。 ​ 在 Java 中,当我们启动 main 函数时其实就是启动了一个 J…

提质增效!北京筑龙助力蒙牛集团采招数智化升级

近两年,全球经济下行压力加剧,市场形势波动使得集团企业面临着很大的经营压力。随着数字经济时代的到来,利用数字技术重构价值链、重组业务流程,或创建新的生态系统平台成为集团企业数字化转型的契机。 蒙牛电子采购招标平台作为…