国产数据库OpenGauss--内存优化表(MOT)实践

MOT是openGauss数据库的内存优化表特性,提供高并发、高吞吐和低延迟的事务处理。其核心技术包括免锁事务管理、Masstree索引、NUMA感知内存管理和高效持久性。创建与管理MOT表涉及权限授权、配置调整和数据恢复。通过示例展示了如何创建MOT表、插入数据和查询操作。
摘要由CSDN通过智能技术生成

MOT介绍

MOT即Memory-Optimized Table,是openGauss数据库最先进的生产级特性(Beta版本),它为事务性工作负载提供更高的性能。
MOT在高性能(查询和事务延迟)、高可扩展性(吞吐量和并发量)以及高资源利用率(某些程度上节约成本)方面拥有显著优势。

企业可以在关键任务、性能敏感的在线事务处理OLTP中使用MOT,以实现高性能、高吞吐、可预测低延迟以及多核服务器的高利用率

MOT的关键技术如下:

  • 免锁事务管理:MOT在保证严格一致性和数据完整性的前提下,采用乐观的策略实现高并发和高吞吐
  • 免锁索引:由于内存表的数据和索引完全存储在内存中,MOT索引机制基于最先进的Masstree,这是一种用于多核系统的快速和可扩展的键值(Key Value,KV)存储索引,以B+树的Trie实现
  • NUMA-aware的内存管理:MOT内存访问的设计支持非统一内存访问(NUMA)感知
  • 高效持久性:日志和检查点是实现磁盘持久化的关键能力,也是ACID的关键要求之一(D代表持久性)
  • 高SQL覆盖率和功能集:MOT通过扩展的PostgreSQL外部数据封装(FDW)以及索引,几乎支持完整的SQL范围,包括存储过程、用户定义函数和系统函数调用
  • 使用PREPARE语句的查询原生编译:通过使用PREPARE客户端命令,可以以交互方式执行查询和事务语句。
  • MOT和openGauss数据库的无缝集成:MOT是一个高性能的面向内存优化的存储引擎,已集成在openGauss包中。

如下图所示,openGauss数据库内存优化存储引擎组件(绿色部分)负责管理MOT和事务。
详见介绍参见:MOT简介
在这里插入图片描述

MOT 实践

授权权限及关闭增量检查点

  • MOT通过外部数据封装器(Foreign Data Wrapper,FDW)机制与openGauss数据库集成,所以需要授权用户权限。
  • 如果postgresql.conf中开启了增量检查点,则无法创建MOT。因此请在创建MOT前将enable_incremental_checkpoint设置为off。
-- select * from pg_foreign_server ;
-- select usename,usesysid from pg_user;
#授权权限
GRANT USAGE ON FOREIGN SERVER mot_server TO test;
#查看配置
show enable_incremental_checkpoint;
#修改配置,修改后需要重启数据库
alter system set enable_incremental_checkpoint='off';

创建表

参照TPC-C基准中的ORDER表创建MOT表,MOT表的定义详见下图

create foreign table mot_order ( 
  o_id         integer      not null, 
  o_d_id       integer      not null, 
  o_w_id       integer      not null, 
  o_c_id       integer not null,
  o_entry_d    timestamp, 
  o_carrier_id integer,          
  o_ol_cnt     integer, 
  o_all_local  integer, 
  primary key (o_w_id, o_d_id, o_id) 
); 

在这里插入图片描述

字 段 名 称字 段 定 义注 释
O_ID10,000,000 unique IDs
O_D_ID20 unique IDs
O_W_ID2*W unique IDs
O_C_ID96,000 unique IDs
O_ENTRY_Ddate and time制单时间
O_CARRIER_ID10 unique IDs, or null货运代号
O_OL_CNTfrom 5 to 15分录数
O_ALL_LOCALnumeric, 1 digit是否全部本地供货

产生模拟数据

insert into mot_order 
select number, (number % 20) + 1,ceil(random()*20000+1),ceil(random()*96000+1),'2020-12-02 00:00:00'::timestamp + number * interval '1 second',(number % 10),(number % 10)+5, ceil(random()*2) FROM generate_series(1,200000) as number;

查询

explain select * from mot_order where o_w_id=2 limit 4;
select * from mot_order where o_w_id=2 limit 4;
#SQL优化做得好,能根据索引调整条件的顺序
explain select * from mot_order where o_d_id=1 and o_w_id=2  limit 4;

在这里插入图片描述
在这里插入图片描述

数据库重启

gs_om -t restart

MOT恢复是随着openGauss数据库其余部分的恢复而自动执行的,并且完全集成到openGauss恢复过程(也称为冷启动)。
分为2个阶段:

  • 检查点恢复:必须通过将数据加载到内存行并创建索引,从磁盘上的最新检查点文件恢复数据。
  • WAL重做日志恢复:从检查点恢复中使用检查点后,必须通过重放之后添加到日志中的记录,从WAL重做日志中恢复最近的数据(在检查点中未捕获)。

删除表

drop foreign table mot_order;
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

enjoy编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值