当前位置: 首页 > news >正文

28-Oracle 23ai Fast Ingest(Memoptimized Rowstore)高频写入

大家都是如何解决百万级TPS的高频写入场景的,当企业有了5G工厂(比如汽车主机厂、配件的产线,整条产线上的作业台和AGV小车),有了各种数采各式sensor数据(不大不小),大量高频写入的时候,是优选写入而后再校准,允许部分的不精准;还是保持ACID接收写入速率。

可以允许ACID中哪一个有缺失,还是成年人的世界,快、准,咱都要,是否有更好的平衡呢?

一、23ai 实现百万级TPS的高频写入

Oracle 23ai的Fast Ingest​(官方名称为 ​ Memoptimized Rowstore)是专为IoT、金融交易等高并发写入场景设计的核心技术。其核心架构分为三层:
  • 内存缓冲池(Memoptimized Pool)​
  • 在SGA中开辟独立内存区域
  • 写入时数据暂存于缓冲池,延迟写入避免直接触发磁盘I/O
  • 异步批量刷盘机制
  • - 由后台进程SMCO(Space Management Coordinator)和W001~W00x工作进程负责
  • 哈希索引加速定位
  • 通过内存哈希表快速定位缓冲数据,规避B+树锁竞争。
技术突破​:相比直接写入数据文件,Fast Ingest将事务提交延迟从毫秒级降至微秒级,TPS提升10倍以上

二、行业对比:其他解决方案

​数据库​

​技术方案

​局限性​

​Elasticsearch​

Translog + Refresh Interval

数据可见延迟高

​ClickHouse​

内存分区表 + 异步合并

不支持ACID事务

​Redis​

纯内存架构

数据持久化风险

​Oracle 23ai​

Memoptimized Pool

需预留专用内存

Oracle在保证ACID事务的前提下实现高频写入,而其他方案往往牺牲事务一致性或实时可见性 

三、版本演进:从Oracle 19c到23ai的升级之路

  • Oracle 19c
    • 仅支持基础异步写入
    • 首次引入Fast Ingest,但依赖LARGE POOL且无专用内存结构
  • Oracle 21c​:增强MEMOPTIMIZE FOR WRITE语法,支持表级启用
  • Oracle 23ai​:
    • 独立Memoptimized Pool区域
    • 支持AI Vector Search协同处理时序数据
    • 写入性能较19c提升40%,CPU开销降低25%

四、实践验证:测试Fast Ingest性能

​步骤1:启用Memoptimized Pool​
--要在CDB中设置,PDB中无法设置,RAC中所有节点要一致。
show parameter MEMOPTIMIZE;
SYS@FREE> show parameter MEMOPTIMIZE;NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
memoptimize_pool_size                big integer 0
memoptimize_write_area_size          big integer 0
memoptimize_writes                   string      HINT
SYS@FREE>
--MEMOPTIMIZE 参数 ON/Hint(默认),是个静态参数SPFILE
alter system set memoptimize_writes = on SCOPE=spfile;
SYS@FREE> alter system set memoptimize_writes = on SCOPE=spfile;System altered.
--ALTER SYSTEM SET vector_memory_size=500M SCOPE=spfile;  -- 为AI向量预留内存
--ALTER SYSTEM SET memoptimize_pool_size=2G SCOPE=spfile; --这个和FAST INGEST无关
--设置area大小
ALTER SYSTEM SET MEMOPTIMIZE_WRITE_AREA_SIEZE=2G SCOPE=BOTH;
SYS@CDB$ROOT> alter system set memoptimize_write_area_size=2g scope=both;System altered.
SHUTDOWN IMMEDIATE; 
STARTUP;
--V$MEMOPTIMIZE_WRITE_AREA;
SYS@FREE> SELECT * FROM V$MEMOPTIMIZE_WRITE_AREA;TOTAL_SIZE USED_SPACE FREE_SPACE NUM_WRITES NUM_WRITERS     CON_ID
---------- ---------- ---------- ---------- ----------- ----------0          0          0          0           0          10          0          0          0           0          20          0          0          0           0          3

步骤2:创建支持Fast Ingest的表​ 

CREATE TABLE TEST_FAST_INGEST (id   NUMBER PRIMARY KEY,source      varchar2(100)
) MEMOPTIMIZE FOR WRITE;
--Table TEST_FAST_INGEST created.
--或者将原有的表alter修成MEMOPTIMIZE FOR WRITE--查询表的是否是MEMOPTIMIZE
SELECT TABLE_NAME,MEMOPTIMIZE_WRITE FROM USER_TABLES WHERE TABLE_NAME = 'TEST_FAST_INGEST';
SYS@CDB$ROOT> SELECT TABLE_NAME,MEMOPTIMIZE_WRITE FROM USER_TABLES WHERE TABLE_NAME = 'TEST_FAST_INGEST';TABLE_NAME          MEMOPTIMIZE_WRITE
___________________ ____________________
TEST_FAST_INGEST    ENABLED

步骤3:手动关闭后插入100w条数据 

--USE HINT 写入一条
INSERT /*+ MEMOPTIMIZE_WRITE */ INTO TEST_FAST_INGEST VALUES (1,'TEST1')
--ALTER SESSION INSERT
ALTER SESSION SET MEMOPTIMIZE_WRITES=ON;
INSERT INTO TEST_FAST_INGEST VALUES (2,'TEST2');--可以手工关闭 DISABLE MEMOPTIMIZE_WRITE FOR TABLE
ALTER TABLE test_fast_ingest NO MEMOPTIMIZE FOR WRITE;SYS@CDB$ROOT> ALTER TABLE test_fast_ingest NO MEMOPTIMIZE FOR WRITE;Table TEST_FAST_INGEST altered.Elapsed: 00:00:00.049
SYS@CDB$ROOT> INSERT /*+ MEMOPTIMIZE_WRITE */ INTO TEST_FAST_INGEST (id, source)2  SELECT3      ROWNUM AS id,4      'SRC_' || TRUNC(DBMS_RANDOM.VALUE(1, 100)) AS source  -- 生成 SRC_1 到 SRC_99 的随机源5  FROM DUAL6* CONNECT BY LEVEL <= 1000000;1,000,000 rows inserted.Elapsed: 00:00:09.838
SYS@CDB$ROOT> SELECT * FROM V$MEMOPTIMIZE_WRITE_AREA;TOTAL_SIZE    USED_SPACE    FREE_SPACE    NUM_WRITES    NUM_WRITERS    CON_ID
_____________ _____________ _____________ _____________ ______________ _________282066944             0     282066944             0              1         3Elapsed: 00:00:00.019
-- 重新启用主键约束
ALTER TABLE TEST_FAST_INGEST MODIFY PRIMARY KEY ENABLE;

 步骤3、开启后插入100w条数据,查看AREA区域使用


-- 禁用约束加速写入(完成后需重新启用)
ALTER TABLE TEST_FAST_INGEST MODIFY PRIMARY KEY DISABLE;
-- 使用 CONNECT BY 语法批量生成
INSERT /*+ MEMOPTIMIZE_WRITE */ INTO TEST_FAST_INGEST (id, source)
SELECT ROWNUM AS id,'SRC_' || TRUNC(DBMS_RANDOM.VALUE(1, 100)) AS source  -- 生成 SRC_1 到 SRC_99 的随机源
FROM DUAL 
CONNECT BY LEVEL <= 1000000;--查看AREA使用
SYS@CDB$ROOT> SELECT * FROM V$MEMOPTIMIZE_WRITE_AREA;TOTAL_SIZE    USED_SPACE    FREE_SPACE    NUM_WRITES    NUM_WRITERS    CON_ID
_____________ _____________ _____________ _____________ ______________ _________282066944       1048576     281018368             0              1         3-- 重新启用主键约束
SYS@CDB$ROOT>
ALTER TABLE TEST_FAST_INGEST MODIFY PRIMARY KEY ENABLE;
--Table TEST_FAST_INGEST altered.

4、数据落盘

--数据写入的规则和设置使用DBMS_MEMOPTIMIZE Package的PL/SQL获得HWM高低水位线中的序列上、下限,DBMS_MEMOPTIMIZE WRITE_END Procedure将large pool中的当前会话数据全部落盘DBMS_MEMOPTIMIZE_ADMIN
将large pool中的当前LARGE POOL中的数据全部落盘包含所有的会话

五、应用场景:

工业物联网(IoT)、​​5G工厂

  • 万级传感器毫秒级数据采集

智能驾驶

  • 轨迹数据、ETC 高并发写入

六、技术平衡之道

Oracle 23ai通过Memoptimized Rowstore重新定义了高频数据写入,在ACID事务与极致性能间取得平衡。结合其新增的AI Vector Search,更可构建“写入-分析-决策”一体化架构。在设计IoT、实时分析系统时优先评估此特性。同样极致的性能风险性也需谨慎考虑。
Fast Ingest本质是用部分实时性换取吞吐量的工程妥协,其价值在IoT等场景不可替代,
需通过三层防御降低风险:
  1. 架构层​:Active Data Guard + 流处理前置缓冲
  2. 开发层​:写入前强制业务校验​(避免主键冲突)
  3. 运维层​:实时监控内存使用率

 

相关文章:

  • ubuntu20上 : mujoco210安装教程
  • 输电线防山火在线监测装置:科技赋能电网安全防线
  • 数字图像处理与OpenCV初探
  • Java异步编程:提升性能的实战秘籍
  • pyspark 初试
  • SpringBoot3+ShardingJdbc实现数据分片
  • HarmonyOS运动开发:深度解析文件预览的正确姿势
  • 利用Snowflake与SNP Glue揭示数据集成新潜力
  • ‘Target closed‘ error in Puppeteer解决
  • [前端]HTML模拟实现一个基于摄像头的手势识别交互页面
  • GitLab 拉取变慢的原因及排查方法
  • 【智算中心】以网补算
  • 力扣面试150题--单词接龙
  • React 集中状态管理方案
  • Windows安装docker及使用
  • 操作系统——第五章(I/O设备)
  • [架构之美]深入优化Spring Boot WebFlux应用
  • 机器学习-黑马笔记
  • STM32 开发 - 中断案例(中断概述、STM32 的中断、NVIC 嵌套向量中断控制器、外部中断配置寄存器组、EXTI 外部中断控制器、实例实操)
  • Python中的函数和方法概要
  • 网站建设 商城/什么是网站推广策略
  • 金坛网站建设公司/软文写作网站
  • 做动态网站文字显示问号/seo是什么品牌
  • 做网站用什么空间/百度怎么优化关键词排名
  • 东莞网站开发推荐/如何建立一个自己的网站?
  • 家庭电脑做网站/p站关键词排名