24-Oracle 23 ai ​Lock-Free Reservations​(无锁列值保留)

编程范式的本质:阴阳二分,相融相异 本文源于一次真实的设计讨论,上片博客沿着四种语言实现的路子走下去,本篇博客则沿着设计模式的路线归结到计算机哲学的根。需求本身小得不能再小:给一个存放数据库读取结果的 `Dict` 列表按字段名排序。但当我们把约束加码到"字段演进时排序器永不改动"时,这个需求就不再是工程问题,而成了三种编程范式的正面交锋。沿着这条线走下去,我们最终抵达了一个更根本的结论——**编程范式不是一张并列的表格,而是一棵树,而树的根只有两个。** 阅读详情

数据库领域为了解决ACID的平衡,尝试了各种锁、各种模式,
引擎技术特性、厂家实现方式各放异彩,被各种锁折磨的小伙伴,是不是感同身受。

一、数据库锁

1. 锁的类型与特点
  • ​全局锁​:锁定整个数据库实例,备份期间所有写操作阻塞,业务停滞
  • ​表级锁​:锁定整张表,批量操作时并发性差(如MySQL/PostgreSQL万级TPS瓶颈)
  • ​行级锁​:细粒度锁定单行,但高并发下仍存在三大致命缺陷​:
    • ​阻塞等待​:事务A未提交时,事务B需排队(如库存扣减场景)
    • ​死锁风险​:循环等待资源(如转账场景中A等B、B等A)
    • ​优先级反转​:低优先级事务持有锁时,高优先级事务被阻塞
2. ​锁的本质矛盾​
安全性与并发性不可兼得​:
  • 悲观锁 →悲观锁假设并发冲突频繁发生,因此在操作数据前立即加锁,阻止其他线程访问资源,直到当前操作完成
  • 乐观锁 → 乐观锁假设并发冲突较少,操作数据时不加锁,仅在提交时检查数据是否被修改(冲突检测),高并发但需重试逻辑
3. 锁的分类

​共享锁(S锁)​​

​原理​:允许多事务并发读取同一资源,禁止写入。

​场景​:高并发查询(如报表系统),配合读已提交隔离级别避免脏读。

​排他锁(X锁)​​

​原理​:事务修改数据时独占资源,禁止其他事务读写。

​场景​:数据更新操作(如账户扣款),保障原子性。

​间隙锁(Gap Lock)​​

​原理​:锁定索引记录间的空白区间,防止新数据插入。

​场景​:可重复读隔离级别下解决幻读(如范围查询)。

​更新锁(U锁)​​

​原理​:预锁定待修改资源,避免共享锁升级为排他锁时的死锁。

​场景​:先读后写的复合操作(如“查询库存后扣减”)。

 4. 事务的隔离级别对锁的诉求又不一样

隔离级别

​锁机制​

​解决痛点​

​遗留问题​

​读未提交

写操作加X锁,读操作无锁

无

脏读

​读已提交​

写操作加X锁,读操作依赖MVCC

脏读

不可重复读

​可重复读​

写操作加X锁,读操作MVCC+间隙锁

不可重复读、部分幻读

未完全解决幻读

​串行化​

读写均加锁(表级或范围锁)

所有并发问题

并发性能极差

5. ​技术特性对比 

​维度​

​Lock-Free Reservations​

​传统行锁​

​乐观锁​

​锁持有时间​

仅提交瞬间(毫秒级)

整个事务周期

无锁但需重试

​并发吞吐量​

100万+ TPS(无锁竞争)

1万~10万TPS(锁竞争瓶颈)

高但重试开销大

​开发复杂度​

声明列属性即可

需处理死锁

需实现重试逻辑

二、Oracle 23 ai Lock-Free Reservations(无锁列值保留)

1. ​原理创新:日志缓冲-原子合并​
-- 声明可保留列
ALTER TABLE inv_test ADD (qty NUMBER RESERVABLE CHECK (qty >= 0));
-- 退回传统锁模式
ALTER TABLE inv_test MODIFY (qty NOT RESERVABLE);
  • 无锁操作​:对RESERVABLE列(如库存qty)的加减操作(qty = qty ± N)​不锁行,而是将增量值(如-50)写入内部日志表SYS.RESV$JOURNAL
  • ​原子提交​:事务提交时,日志值合并到原表,并自动校验约束(如qty >= 0),违反则回滚
  • 数据类型​:仅支持NUMBER/INTEGER/FLOAT(非数值列报错ORA-55748)
  • 语法限制​:必须使用±操作(直接赋值报错ORA-55746)。
  • 非保留列​:更新产品名称等非RESERVABLE列时仍触发行锁。

三、实战验证:高并发库存扣减测试​

1. ​验证脚本​
SYS@CDB$ROOT> GRANT CREATE TABLESPACE TO QC;
Grant succeeded.
SYS@CDB$ROOT> GRANT CREATE SESSION TO QC;
Grant succeeded.
SYS@CDB$ROOT> GRANT ALTER TABLESPACE, DROP TABLESPACE TO QC;
Grant succeeded.
SYS@CDB$ROOT> commit;
Commit complete.
SYS@CDB$ROOT> ALTER USER QC QUOTA UNLIMITED ON users;
User QC altered.
SYS@CDB$ROOT> commit;
QC@localhost:1521/FREEPDB1> CREATE TABLESPACE inv_ts1 DATAFILE 'inv_ts1.dbf' SIZE 100M;
TABLESPACE INV_TS1 created.
SYS@CDB$ROOT> create user QC identified by Oracle_4U;
User QC created.
SYS@CDB$ROOT> GRANT CREATE TABLE, ALTER ANY TABLE TO QC;
Grant succeeded.
[oracle@OL96 ~]$ sql QC/Oracle_4U@localhost:1521/FREEPDB1;
-- --1:启用无锁列(Oracle 23ai)
CREATE TABLE inv_test (
    item_id     NUMBER PRIMARY KEY,
    qty         NUMBER RESERVABLE CHECK (qty >= 0)  -- 关键声明
);
INSERT INTO inv_test VALUES (1, 100);
COMMIT;

-- --2:并发扣减(两个会话)
-- 会话1:扣减50(不提交)
UPDATE inv_test SET qty = qty - 50 WHERE item_id=1;

-- 会话2:扣减30(立即执行,无阻塞!)
UPDATE inv_test SET qty = qty - 30 WHERE item_id=1;
COMMIT;
-- 会话2先提交

-- 会话1提交
COMMIT;  -- 合并日志:100-50-30=20,校验通过

-- --3:结果验证
SELECT * FROM inv_test;
QC@localhost:1521/FREEPDB1> SELECT * FROM inv_test;

   ITEM_ID    QTY
__________ ______
         1     20

-- --4:触发约束保护(故意超扣)
UPDATE inv_test SET qty = qty - 150 WHERE item_id=1;
-- 提交时报错ORA-02290(违反CHECK约束)
QC@localhost:1521/FREEPDB1> UPDATE inv_test SET qty = qty - 150 WHERE item_id=1;

Error starting at line : 1 in command -
UPDATE inv_test SET qty = qty - 150 WHERE item_id=1
Error report -
ORA-02290: check constraint (QC.SYS_C008612) violated
Help: https://docs.oracle.com/error-help/db/ora-02290/
2. ​工作流程解析​
成功失败事务A:扣减50日志表记录-50事务B:扣减30日志表记录-30提交时合并校验约束:100-50-30=20≥0更新原表为20自动回滚
关键创新​:
- ​消除行锁竞争​:操作日志表无需锁定原表行
- ​约束驱动安全​:通过CHECK约束保证业务逻辑(如防负库存)​
3. ​验证要点​
  • 无阻塞​:会话2无需等待会话1提交即可执行更新
  • 约束保护​:扣减后qty<0时自动回滚。
  • 日志追溯​(DBA权限):
-- 查看-50、-30日志,Oracle 23 ai free中无此视图,DBA_EXTENDED_TXN_DETAILS,也不存在
SELECT * FROM SYS.RESV$JOURNAL WHERE table_name='inv_test';

四、适用场景和特性

1. ​最佳场景

​场景类型​

​案例​

​性能提升​

​OLTP高频更新​

库存扣减(秒杀)

并发提升10倍+

​金融交易​

账户余额实时更新

延迟降至毫秒级

​计数系统​

点赞/投票计数

无锁写入

 

2. 并发控制的新范式​

Lock-Free Reservations的本质是将锁从“数据访问层”下沉至“提交层”​,通过日志缓冲实现毫秒级锁定。
其价值在于:
  • ​OLTP系统​:彻底消除热点数据锁竞争,吞吐量提升10倍+。
  • ​开发者体验​:无需重写应用代码,声明列属性即获性能飞跃。
  • ​未来生态​:与AI Vector Search协同处理结构化+非结构化混合负载

 

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04 编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017) 阅读详情

相关推荐

【学习记录】IIC驱动ICM42670+卡尔曼滤波+四元数姿态角解算

ICM42670陀螺仪可以使用iic驱动,单片机平台使用GD32f305VE。

liarsup的博客 8267

Oracle23c FREE的新特性

Oracle Database 23c Free Developer-Release是下一代 Oracle 数据库的第一个版本,使开发人员能够抢先一步构建具有一些新的 23c 功能的应用程序,为即将发布的下一个长期支持发行版 Oracle Database 23c 做好准备。

weixin_42329915的博客 821

快速玩转 Llama2!机器学习 PAI 最佳实践(一)—低代码 Lora 微调及部署

本实践将采用阿里云机器学习平台PAI-快速开始模块针对 Llama-2-7b-chat 进行开发。PAI-快速开始支持基于开源模型的低代码训练、布署和推理全流程,适合想要快速开箱体验预训练模型的开发者。

阿里云云栖号 1766

Oracle LiveLabs实验:探索 Oracle 23c 数据库的强大功能 - Schema Privileges 和 Lock-Free Reservations

Oracle LiveLabs实验:探索 Oracle 23c 数据库的强大功能 - 架构权限和无锁预留

In-Memory Computing Technology 857

《揭秘 BME688人工智能压力湿度温度气体传感器:气体检测的多面能手》:此文为AI自动生成

BME688 是博世推出的一款具有人工智能和集成高线性度高精度压力、湿度、温度传感器的气体传感器,专为移动和联网应用开发,尺寸紧凑且低功耗。BME688 作为一款先进的传感器,在多个领域展现出卓越的性能。它采用了坚固而紧凑的 3.0 x 3.0 x 0.9 mm³ 封装,这种小巧的尺寸使其能够轻松应用于对空间要求严格的移动设备和联网应用中。同时,低功耗的特性也使得它在能源有限的环境下能够长时间稳定运行。

zheng_ruiguo的专栏 1931

WRF移动嵌套结合伏羲模型与CFD(PALM)高精度多尺度降尺度分析研究

WRF移动嵌套(Moving Nesting):动态调整高分辨率嵌套网格位置,追踪天气系统(如台风、强对流系统)以提高局地预报精度。伏羲(Fuxi)模型:国产数值模式,提供对WRF模拟的初始及边界条件优化。CFD(Computational Fluid Dynamics)PALM模型:精细化局地流场、湍流、温度分布。

m0_57411304的博客 1716

Oracle静默安装,含仅软件安装和数据库安装及常见报错处理方法DBT-10317 DBT-05509 [FATAL] ORA-03114

本文详解Oracle 19c单机版静默安装与数据库创建全流程,涵盖目录配置、响应文件编写、安装及建库命令,附常见报错(如DBT-10317、ORA-03114)解析与解决方案,包含删库指令与日志分析,适合内网环境自学实战,免费干货,实用性强。

qq_41474349的博客 177

基于Simulink的异步电机参数在线辨识与自适应控制仿真

本文基于Simulink平台,详细介绍了异步电机参数在线辨识与自适应控制系统的仿真实现。针对异步电机运行中参数时变问题,采用模型参考自适应系统(MRAS)实时辨识转子电阻和互感,并结合自适应PI控制策略动态调整控制器参数。通过搭建完整的矢量控制(FOC)仿真模型,验证了系统在稳态辨识、参数摄动和动态响应等工况下的性能:参数辨识误差<1.2%,转速跟踪误差<20rpm,动态响应时间<10ms。文章还提供了详细的Simulink建模步骤、核心代码实现及性能分析,为高级电机控制系统的设计与优化提

amy_mhd的博客 72

Spring 事务详解:@Transactional 如何生效、何时回滚、传播行为怎么选

从订单与库存写入出发,拆解 @Transactional 的代理调用链、默认回滚规则与自调用问题;通过 Spring Boot + H2 的五个验证用例比较 REQUIRED、REQUIRES_NEW、NESTED,并说明数据库事务与 Redis、消息和远程接口的边界。

qq_74421990的博客 305

ximalaya 新xm-sign逆向思路

本文主要介绍目标网站新xm-sign值的逆向思路。仅代表个人理解,如有其他建议可在评论区沟通。声明仅仅记录一下自己的学习方法,不作为其他参考、更不作为商业用途。如有侵犯请联系本人删除。

weixin_66580433的博客 2017

如何在不牺牲精度的前提下,把 YOLOv11 压缩到 Jetson 能跑的程度

YOLOv11 在目标检测任务中具备较强的准确性与多尺度鲁棒性,但其原始模型参数规模与计算量,对边缘设备来说并不友好,特别是面向 Jetson 这类资源受限的推理平台。本文基于实际部署场景,逐步拆解从结构层级改造、剪枝策略制定、量化导出流程,到 Jetson TensorRT 推理落地全过程。在不牺牲主干精度的前提下,最终实现 YOLOv11 推理延迟缩短 3 倍、模型体积压缩 4 倍、mAP 损失控制在 1% 以内的轻量化优化结果,并总结出一条可复用的工程路径,供工业界与边缘侧模型部署开发者参考。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 2426

Oracle多租户集群PDB异机恢复至单机部署数据库

本文详细演示了将Oracle RAC集群中的PDB(RMAN_PDB)通过RMAN备份恢复至单机CDB的全过程。首先在源库创建测试PDB并插入数据,随后配置RMAN备份路径,备份该PDB及其元数据文件。接着将备份文件传输至单机环境,启动实例并恢复控制文件与数据文件,最后利用DBMS_PDB.EXPOSE_PDB_FROM_RMAN生成PDB描述文件,将其插入新单机CDB中,实现PDB的独立使用。整个流程涵盖数据准备、备份、恢复及插入,完整验证了跨环境PDB迁移的可行性。

qq_57492774的博客 183

【python数据挖掘课程】二十八.基于LDA和pyLDAvis的主题挖掘及可视化分析

这是《Python数据挖掘课程》系列文章,前面很多文章都讲解了数据挖掘、机器学习,这篇文章主要讲解LDA和pyLDAvis算法,同时讲解如何读取CSV文本内容进行主题挖掘及可视化展示。文章比较基础,希望对你有所帮助,提供些思路,也是自己教学的内容。推荐大家购买作者新书《Python网络数据爬取及分析从入门到精通(分析篇)》,如果文章中存在错误或不足之处,还请海涵。 目录: 一.显示结果及安装 二.LDA主题挖掘 三.pyLDAvis可视化分析 四.小结

杨秀璋的专栏 1万+

Mysql数据库基础篇(三):全面掌握数据库与数据表操作:深度剖析底层文件差异与核心管理机制

如果你想彻底改掉某个字段的名字,应该使用 change。实例:将 employee表中的 name列修改为xingming注意:使用 change时,即便不改变数据类型,在指定了新列名后依然需要完整地写一遍它的数据类型与约束定义。

2501_93641778的博客 238

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

oracle直方图测试

预期:没有直方图时,优化器假设 status 分布均匀(选择性 = 1/NDV ≈ 1/100),两个查询的预估行数(E-Rows)会非常接近(约 1000 行),很可能对两个查询都选择索引扫描,或者都选择全表扫描,无法区分数据量的巨大差异。

ZHANG123HUO的博客 51

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Oracle 19c RAC ASM 在线扩容实战

最近有一套 Oracle 19c RAC 数据库,DATA 磁盘组空间使用率已经接近 90%,需要扩容。环境是两节点 RAC,底层使用 Dell EMC SAN 存储,通过 Multipath 管理共享磁盘,存储侧已经分配好一块 2TB 的新 LUN,只需要在操作系统上识别,然后加入 ASM 磁盘组。整个过程不需要停库,本文记录一下实际操作步骤。这次 Oracle 19c RAC ASM 扩容整体比较顺利。

LuciferLiu_DBA 293

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

带着小白学习-微服务-5 实战:配置中心-数据库连接

如前所述,服务治理主要包含注册中心,前面所有的微服务子工程均已注册到nacos,然后由相应的应用到nacos进行拉取。接下来,我们将使用nacos的配置中心,用于保存和分发应用运行所需的动态配置。比如数据库的各类信息等。

wdyan297的博客 215

任务8-1 数据库用户权限管理

本实战训练MySQL权限管理的完整流程。通过CREATE USER建用户,GRANT按需授权,SHOW GRANTS核查权限。岗位变动时,使用REVOKE回收多余权限,并用FLUSH PRIVILEGES刷新缓存。全流程旨在落实最小权限原则,规范数据库安全运维。

howard2005的专栏 153

用校园小助手生成ER图:从建表语句到可调布局

从建表语句或自然语言生成,到关系识别、主外键颜色区分,再到布局切换和折叠,校园小助手的ER图功能把画图过程中最耗时的部分交给了工具。它适合大学生论文、研究人员科研、教师教学及企业数据分析等场景,所有功能都在校园小助手平台内实现。下次作业要用ER图时,不妨先从手里的SQL开始。

weixin_74789176的博客 191

SQLServer常用指令手册

覆盖数据库创建、表与约束、增删改查、查询进阶、索引、视图/存储过程/函数/触发器、事务、权限、运维排查。适用版本:SQL Server 2012 及以上(标注的条目为对应版本起可用)。

lzcbaba的博客 239

MySQL数据库和表的操作

本文系统介绍了MySQL数据库与表的基本操作。包括创建、查看、修改和删除数据库,重点讲解字符集与校验规则对大小写敏感性的影响;通过SHOW、ALTER、DROP等命令实现数据库管理;介绍数据备份(mysqldump)与恢复(SOURCE)方法;并详细阐述表的创建、结构查看(DESC)、字段增删改(ALTER TABLE)及表删除操作,涵盖字段类型、注释、索引等关键要素,为数据库开发与维护提供完整指导。

2201_75570391的博客 367

Oracle 19c 在线重定义后旧表空间清理及 ASM 存储资源回收 SOP

Oracle 19c 在线重定义后旧表空间清理与 ASM 存储资源回收 SOP

「YYL DBA手记」 数据库 · 架构 · 运维 · 实战 yyldba.blog.youkuaiyun.com 486

搭建Oracle RAC 集群

配置SSH互信,分别RAC1和RAC2的root,grid,Oracle三个用户下执行以下命令。安装LINUX.X64_193000_grid_home.zip文件包。添加6块硬盘,每块50G,添加控制器,设为虚拟,添加网络适配器。设置主机名,配置网卡,编写/etc/hosts文件()配置磁盘规则,执行writerule.sh脚本。运行test.sh脚本,完成基础配置。

x_SpiderMan的博客 48

【服务器数据恢复】RAID5阵列双盘掉线Oracle+OA系统的数据恢复案例

某医药公司服务器组建RAID5磁盘阵列,阵列内两块硬盘先后离线,直接造成服务器宕机。服务器操作系统为RedhatLinux,承载基于Oracle数据库搭建的OA业务系统,业务数据价值高、恢复时效要求紧急。由于该OA配套Oracle版本早已停止技术支持,客户需求为:完整恢复业务数据,同时尽可能复原原有操作系统环境。

beiya123的博客 127

Oracle ORA-12560 故障排查实战:Windows TCP 连接资源不足(端口缓冲池爆满)与重启恢复 SOP

Windows 环境 Oracle ORA-12560 故障排查与处理:TCP 连接资源不足及重启恢复实战

「YYL DBA手记」 数据库 · 架构 · 运维 · 实战 yyldba.blog.youkuaiyun.com 443

AI代理驱动数据库应用的新范式与TiDB实践

三是多数据源联邦,一个Agent同时挂载多个数据库的MCP Server,跨库联合查询由模型编排,这会催生新的数据虚拟化玩法,也对工具间的语义一致性提出要求。再往后是ORM框架的普及,开发者操作的是对象模型,SQL由框架在运行期拼装生成,数据库的真实形态被进一步隐藏。理想的是配置一名同时理解两边的桥梁角色,负责解读审计日志中的异常模式,把模型侧的怪异行为翻译成数据库侧的防护策略调整。MCP Server只是起点,它验证的是一条基本原则:让AI安全地触碰生产数据,靠的不是模型的自觉,而是架构的设计。

搞定过:百亿级数据、万级QPS、零宕机、AI工业化。 642
上一篇: 23-Oracle 23 ai 区块链表(Blockchain Table)
下一篇: 25-Oracle 23ai DBMS_SEARCH — Ubiquitous Search(无处不在的搜索)
远方1609
博客等级 码龄22年 577粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值