解析OceanBase v4.2 Oracle 语法兼容之 LOCK TABLE

news/2024/5/4 3:51:43

背景

在OceanBase V4.1及之前的版本中,尽管已经为Oracle租户兼容了LOCK TABLE相关的语法,包括单表锁定操作,和WAIT N, NOWAIT 关键字。但使用时还存在一些限制。例如:LOCK TABLE只能针对单表进行锁定,并不支持多表或分区锁定;WAIT N和 NOWAIT 关键字在实际执行中并未发挥预期作用,即用户在语句中指定WAIT NNOWAIT后,实际的执行行为和关键字效果不一致,系统仍然会按照设定的语句超时时间和事务超时时间的最小值来等待锁,这意味着锁定操作可能会持续至语句超时或事务超时。

想要了解相关语法和描述可以参考官方文档。LOCK TABLE

在 Oceanbase 4.2 及之后的版本中,提供了更完备的 LOCK TABLE 语法兼容性,并补全了未生效的功能,包括对多表、多分区、多二级分区上锁,以及使WAIT NNOWAIT关键字生效。

LOCK TABLE 语法解析

LOCK TABLE 的语法如下所示:

LOCK TABLE
{
[ schema. ]  table
[ PARTITION '('partition ...')' | SUBPARTITION '(' subpartition ...')' ] 
...
}
IN lockmode MODE
[ NOWAIT | WAIT integer] ;

其对应的语法结构图如下。

lock_table::=对应的语法结构见下图:

1700449555

1700449563

partition_extension_clause::=对应的语法结构见下图:

1700449572

如果你对上述语法结构中的字段存疑,可以参考下表中对于LOCK TABLE 各字段的说明。

字段名称描述
table指定要锁定的表的名称。
partition指定要锁定的分区的名称。
subpartition指定要锁定的二级分区的名称。
lockmode指定锁定模式。OceanBase 数据库当前版本支持的锁定模式如下。ROW SHARE:允许并发访问锁定的表,但禁止用户锁定整个表而进行独占访问。ROW EXCLUSIVE :与 ROW SHARE 相同,但也禁止在 SHARE 模式下锁定表。在进行更新、插入或删除时,将自动获得 ROW EXCLUSIVE 锁。SHARE:允许并发查询,但禁止更新锁定的表。SHARE ROW EXCLUSIVE:用于查看整个表,并允许其他人查看表中的行,但禁止其他人在 SHARE 模式下锁定表或更新行。EXCLUSIVE:只允许对锁定的表进行查询,禁止对其进行其他操作。
NOWAIT如果对执行的表、分区或二级分区上锁时发生锁冲突,则指定 NOWAIT 可以让数据库立即将控制权返回给用户。在这种情况下,数据库会返回一条消息,以告知表、分区或子分区已被另一个用户锁定。
WAIT如果发生锁冲突,那么语句应该等待冲突的锁释放,直到超过用户设置的 interger 时间(单位对应为秒),integer 的值没有限制。

LOCK TABLE 语法实践

了解基本概念和原理后,我们来上手实践一下。以如下所示的表结构作为实践操作表,演示10个操作场景。其中,subpartition template 生成的二级分区名称为一级分区名称 + 's' + 二级分区模板名称,例如,p0分区有二级分区p0ssp0p0ssp1p0ssp2

create table test(col1 int, col2 int)
partition by range (col1)
subpartition by range (col2)
subpartition template
(
subpartition sp0 values less than (3),
subpartition sp1 values less than (6),
subpartition sp2 values less than (9)
)
(
partition p0 values less than (100),
partition p1 values less than (200),
partition p2 values less than (300)
);

场景1:对整个表上互斥锁。

lock table test in exclusive mode;

场景2:对一级分区p1上互斥锁。

lock table test partition (p1) in exclusive mode;

场景3:对二级分区p1ssp1上互斥锁。

lock table test subpartition (p1ssp1) in exclusive mode;

场景4:在两个客户端上分别对同一个表上锁,其中持锁客户端上互斥锁,请求锁客户端上共享锁。

# conn1
start transaction;
lock table test in exclusive mode;# conn2
start transaction;
set ob_trx_timeout = 10000000000; # 10000 second
set ob_query_timeout = 1000000;   # 1 second# client will get error code after 1 second
lock table test in share mode;
ERROR HY000: resource busy and acquire with NOWAIT specified or timeout expired

当 LOCK TABLE 语句不设置WAIT N/NOWAIT关键字时,其超时时间将取决于语句超时时间和事务超时时间的最小值,在该例子中即为 1 秒后将报出锁冲突错误。

场景5:在两个客户端上分别对同一个表上表锁,其中持锁客户端上互斥锁,请求锁客户端上共享锁,并使用NOWAIT关键字。

# conn1
start transaction;
lock table test in exclusive mode;# conn2
start transaction;
lock table test in share mode nowait;
ERROR HY000: resource busy and acquire with NOWAIT specified or timeout expired

当 LOCK TABLE 语句设置了NOWAIT关键字后,若遇到表锁冲突将会立即报错,并在报错信息中体现“NOWAIT”信息。该报错信息与语句不设置WAIT N/NOWAIT关键字不同。

场景6:在两个客户端上分别对同一个表上表锁,其中持锁客户端上互斥锁,请求锁客户端上共享锁,并使用WAIT N关键字。

# conn1
start transaction;
lock table test in exclusive mode;# conn2
start transaction;# client will get error code after 1 second
lock table test in share mode wait 1;
ERROR HY000: resource busy and acquire with NOWAIT specified or timeout expired

当 LOCK TABLE 语句设置了WAIT N关键字后,若遇到表锁冲突将会等待N秒,若N秒后为解锁将报错,并在报错信息中体现“timeout expired”信息。该报错信息与语句不设置WAIT N/NOWAIT关键字不同。

场景7:对一个表的多个分区上互斥锁。

lock table test partition (p1,p2) in exclusive mode;

场景8:对一个表的多个二级分区上互斥锁。

lock table test subpartition (p0ssp1,p1ssp2) in exclusive mode;

场景9:对一个表的多个分区和二级分区上互斥锁。

lock table test partition (p1, p2), test subpartition (p3ssp0, p3ssp1) in exclusive mode;

场景10:对不存在的分区上互斥锁(其中p3分区不存在,但是p0分区也不会上锁成功,整条语句将回滚).

lock table test partition (p0, p3) in exclusive mode;
ERROR HY000: Specified partition does not exist

写在最后

LOCK TABLE 语句是生产场景中常用的并发控制手段,可以帮助用户简单高效地实现表级的 ddl / dml 互斥。本文介绍了 OceanBase v4.2 新增的 LOCK TABLE Oracle 语法兼容的新特性,从语法的结构、字段的描述等角度详细解析了该新特性的使用方法,并分享了新特性的场景实践,希望能够帮助大家更“丝滑”地使用该特性,也欢迎大家在评论区分享优化建议、使用体验等。


http://www.mrgr.cn/p/21551378

相关文章

题解:P10365 [PA2024] Kraniki(评分:8.4)

前言 我们一场模拟赛的题,结果原题是新鲜出炉的。 小弟不才,感觉这题是做过的题中几乎最复杂的了。 既然搞懂了,就来写一发题解吧。 (题外话:目前最优解,我的常数真是小小又大大啊) "Up and down,glowin round..." Solution 1、一个经典的 Trick 直接模拟每一…

kubernetes CNI(Container Network Inferface)

为什么需要 CNI 在 kubernetes 中,pod 的网络是使用 network namespace 隔离的,但是我们有时又需要互相访问网络,这就需要一个网络插件来实现 pod 之间的网络通信。CNI 就是为了解决这个问题而诞生的。CNI 是 container network interface 的缩写,它是一个规范,定义了容器…

【LAMMPS学习】八、基础知识(3.6)计算热导率

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

Sentinel 流控注解使用

大概原理:通过反射解析注解 SentinelResource信息完成调用,处理方法,类似AOP编程 处理方法的返回类型要保持一致,参数和顺序保持一致, 可以在参数列表最后加 com.alibaba.csp.sentinel.slots.block.BlockException; …

LLM推理加速,如何解决资源限制与效率挑战

©作者|Zane 来源|神州问学 LLM加速推理,GPU资源破局之道。 引言 大型语言模型(LLM)已经在多种领域得到应用,其重要性不言而喻。然而,随着这些模型变得越来越普遍,对GPU资源的需求也随之激增&#xff…

WIN11安装FFmpeg

WIN11安装FFmpeg 官网: https://ffmpeg.org/download.html#build-windows 找 Windows builds by BtbN,跳转到:https://github.com/BtbN/FFmpeg-Builds/releases 选择合适的版本下载 。 我这里下载的是 ffmpeg-master-latest-win64-gpl-shared下载完后,进行解压,然后把解压…

C++入门之类和对象(中)

C入门之类和对象(中) 文章目录 C入门之类和对象(中)1. 类的6个默认对象2. 构造函数2.1 概念2.2 特性2.3 补丁 3. 析构函数3.1 概念3.2 特性3.3 总结 4. 拷贝构造函数4.1 概念4.2 特性4.3 总结 1. 类的6个默认对象 如果一个类中什么都没有,那么这个类就是一个空类。…

20.安全性测试与评估

每年都会涉及;可能会考大题;多记!!! 典型考点:sql注入、xss; 从2个方面记: 1、测试对象的功能、性能; 2、相关设备的工作原理; 如防火墙,要了解防…

解析几何简单计算

设点设线 例题 1 题目 已知椭圆方程 \(\dfrac{x^2}{4}+y^2=1\),设直线 \(l\) ,不经过点 \(P(0,1)\)且与椭圆相交于 \(A,B\) 两点,若直线 \(PA\) 与直线 \(PB\) 的斜率和为 \(-1\) ,证明:直线 \(l\) 过定点。 题解 由直线 \(l\) 不过点 \(P(0,1)\) 可设直线 \(l\) 方程: \…

苏维埃日报07.是谁在给二游带节奏?

前言 本人是个混二游圈挺久的老油条(某种意义上算3到4年老油条,方舟2020入的坑,2023跑原和铁那边去了然后又顺便去玩了崩三,2024回坑方舟+入坑雷索纳斯) 但是玩二游哪能不经历些腥风血雨(毕竟二游圈风气还是……) 嗯对,我一个原神玩家,哪能没见过反原反米斗士(甚至有…

双链表的实现

我们知道链表其实有很多种,什么带头,什么双向啊,我们今天来介绍双向带头循环链表,了解了这个其他种类的链表就很简单了。冲冲冲!!! 链表的简单分类 链表有很多种,什么带头循环链表&…

OOP课程第一次博客

目录1.前言2.设计与分析1.第一次pta作业2.第二次pta作业3.第三次pta作业3.踩坑心得4.改进建议5.总结 1.前言 前三次pta题目集的最后一题主要是实现一个模拟小型测试的答题判题程序,第二次题目集在第一次的基础上新增了一个答卷类,第三次题目集在第二次题目集上新增了一个学生…

性能测试——性能测试-linux监控工具-Centos7.x安装Grafana

2个参考: 小菠萝:https://www.cnblogs.com/poloyy/p/12219145.htmlCentos7安装Grafana Grafana官网下载路径:https://grafana.com/grafana/download 1、直接执行以下命令进行安装:wget https://dl.grafana.com/oss/release/grafana-6.5.2-1.x86_64.rpm sudo yum localinsta…

亚信安全入选中国数据安全市场图谱

近日,全球领先的IT市场研究和咨询公司IDC发布了《IDC Market Glance:中国数据安全市场图谱,2024》报告(以下简称“报告”),报告展示了中国数据安全市场的构成和格局,遴选出不同细分市场领域的主…

TR5 - Transformer的位置编码

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目录 前言什么是位置编码1. 定义2. 三角函数3. 位置编码公式4. 位置编码示例 可视化理解位置编码1. 代码实现2. 观察不同位置对应的曲线3. 整句话的位置编码可…

BUUCTF-MISC01金胖

题目:动图使用Stegsolve软件进行逐帧查看 下载文件后,图片隐写之gif多帧隐藏,这类题比较简单,只需要将图片使用Stegsolve软件进行逐帧查看就行了.file-open打开添加文件 将文件添加进来,而后点击Analyse-Frame Browse…

HCF-Net:用于红外小目标检测的分层上下文融合网络

摘要 红外小目标检测是一项重要的计算机视觉任务,涉及在红外图像中识别和定位微小物体,这些物体通常仅包含几个像素。然而,由于物体尺寸极小以及红外图像中通常复杂的背景,这项任务面临困难。在本文中,我们提出了一种…

HarmonyOS实战开发-横竖屏切换

介绍 本实例展示如何使用媒体查询,通过ohos.mediaquery 接口完成在不同设备上显示不同的界面效果。 效果预览 使用说明 1.在竖屏设备上,首页展示新闻列表,点击新闻进入详情界面。 2.在横屏设备上,首页左侧展示新闻列表&#x…

【爆款推荐】初中中考阅读理解难题一网打尽!句子结构深度解析+答案揭秘,助你轻松冲刺高分!-008-Eat Your Schoolwork

PDF格式公众号回复关键字:ZKYDT008原文1 The Giant Student Farmers’ Market is the largest student-run farmers’ market in the country, isn’t it? 解析 1 The Giant Student Farmers’ Market 主语, is 是, the largest student-run farmers’ market 表语 , in the…

AI人工智能老师大模型讲师叶梓 OneLLM:开创性的多模态大型语言模型技术

在人工智能领域,多模态大型语言模型(MLLM)的研究一直是一个热门话题。近期,一种名为OneLLM的创新技术引起了业界的广泛关注。OneLLM通过其独特的统一框架,实现了多种不同模态与自然语言的高效对齐,为多模态…