轻量级锁是使用原子操作、等待队列和信号量实现的。...但是由于代码复杂度及各类异常处理,openGauss提供了LWLock的死锁检测机制,避免各类异常场景产生的LWLock死锁问题。与轻量级锁相关的函数有如下几个。
轻量级锁是使用原子操作、等待队列和信号量实现的。...但是由于代码复杂度及各类异常处理,openGauss提供了LWLock的死锁检测机制,避免各类异常场景产生的LWLock死锁问题。与轻量级锁相关的函数有如下几个。
Table类包含管理数据库中内存表所需的所有项。表由以下组件组成:列、主索引和可选的...openGauss提供的外部表ID。表437 Row类的关键成员变量。创建行时生成的唯一rowId。表schema中的字段个数。指向内存管理表的指针。
与pg_database相关的SQL命令是ALTER DATABASE、CREATE DATABASE、DROP DATABASE,这些命令执行的结果是把数据库相关的信息存储到pg_database系统表中。这几个值与cachedesc结构体的字段对应,表示pg_database表的OID...
函数ExecGrant_Relation用来处理表对象权限的授予或回收操作,入参为InternalGrant类型的变量,存储着授权或回收操作的操作对象信息、被授权者信息和权限信息。将参数avail_goptions传入函数restrict_and_check_...
8年进入阿里一直到现在。**
Silo的关键贡献是一种基于乐观并发控制的提交协议,它支持序列化,同时避免对仅读取的记录进行共享内存写入。SILO的并发控制以事务ID(tansaction ID,TID)为中心,它标识事务并记录版本,也用作锁和检测数据冲突。...
除此之外, SegmentedGroupSyncRedoLogHandler将每个NUMA处理器(socket)的事务分组,以减少跨NUMA处理器的数据传输,因为跨NUMA处理器的数据访问比同一NUMA处理器本地内存访问慢。根据不同的配置参数,当一个组被...
在libpqrcv_connect函数中,备机通过libpq协议连上主机,通过特殊的连接串信息,触发主机侧启动“wal sender”线程来处理该连接请求(相比之下,对于普通客户端查询请求,主机启动backend线程或线程池线程来处理连接...
在需要获取旧版本数据时,astore可以直接从tuple的头部读取到元组的插入和删除的事务号(XID),来判断元组的可见性。(1) 从元组的TD读到ITL2,和astore类似,根据CSN的大小,判断TD2中的XID不可见,需要使用...
如图5-22所示,CLOG的日志缓冲池在共享内存中且全局唯一,名称为名称为“CLOG Ctl”,为各工作线程共享该资源。按页面号进行取模运算(求两个数相除的余数)将日志均分到多个共享内存的缓冲池中,由线程局部对象的...
作为Table类的一部分,Index抽象类提供了创建和访问数据索引的能力。如图4-54所示,描述了一个有三行和两个索引的MOT表T的结构,其中一个索引是非唯一索引,另一个索引是唯一索引。在图4-54中,MOT将哨兵插入到带有...
获取快照时,需要在共享内存数组中更新槽位信息,事务结束时,需要从槽位中将其事务信息清除。计算快照时,通过遍历该全局数组,获取当前所有并发线程的事务信息,并计算出快照信息(xmin、xmax、snapshotcsn等)。...
MOT采用源自SILO的单版本并发控制(concurrency control,CC)算法,是一种OCC算法。并发控制模块满足内存引擎的所有事务性需求,其主要设计目标是为MOT内存引擎提供各种隔离级别的支持。当前支持如下隔离级别。...
本节为您介绍openGauss中如何创建数据库、表以及查看数据库中的对象。ƒ 在创建数据库过程中,若出现类似“could not initialize database directory”的错误提示,可能是由于文件系统上数据目录的权限不足或磁盘满...
事务是数据库操作的执行单位,需要满足最基本的ACID(原子性、一致性、隔离性、持久性)属性。(1)原子性:一个事务提交之后要么全部执行,要么全部不执行。(2)一致性:事务的执行不能破坏数据库的完整性和一致性。...
openGauss数据库是华为公司在深度融合技术应用于数据库领域多年经验的基础上,结合企业级场景要求,推出的新一代企业级开源数据库。本章将从各方面对该数据库进行简要介绍。
其中LIMIT_INITIAL对应处理Limit算子初始化,LIMIT_RESCAN对应重新执行子节点计划,LIMIT_EMPTY对应Limit算子是空集,LIMIT_INWINDOW用于处理窗口函数(在窗口函数内前向和后向移动),LIMIT_SUBPLANEOF用于处理子...
openGauss相比其他开源数据库主要有高性能、高扩展、可维护性和高可用等特点。
openGauss整个系统设计支持多个存储引擎来满足不同场景的业务诉求。
在执行过程中,所有执行算子分为2大类,行存储算子和向量化算子。行存储算子执行入口函数的命名规则一般为“Exec+算子名”的形式,向量化算子执行入口函数的命名规则一般为“ExecVec+算子名”的形式;...
内存引擎源码目录为:/src/gausskernel/storage/mot。内存引擎源码文件如表1-11所示。表1-11 内存引擎源码文件模块源码文件功能mot并发控制管理infra辅助与配置函数memory内存数据管理storage持久化存储system全局...
AI4D(artificial intelligence for ...本章主要从openGauss功能、应用场景、系统架构、代码结构和价值特性等多方面介绍了openGauss数据库系统的设计,可以加深读者对openGauss的设计理念与代码逻辑有的认识与理解。
openGauss数据库是华为深度融合在数据库领域多年...从本期开始,Gauss松鼠会将陆续推出openGauss数据库源码解析系列文章,带你解析openGauss各功能模块的源代码逻辑和实现原理。该系列文章主要面向openGauss内核开...
其中,omm为数据库管理员(也是运行openGauss的操作系统用户),dbgrp为运行openGauss的操作系统用户的群组名称,“/opt/software/openGauss/cluster_config.xml”为openGauss配置文件路径。在执行过程中用户需要...
介绍 当我们想清除表中数据但又想保留表原有格式属性时,可以通过 Truncate command实现。接下来一起学习 postgres Truncate command的实现原理。 1 ExecuteTruncate 功能介绍: /src/backend/command/...
openGauss会把事务ID记在行头,在一个事务取得一行时,通过比较行头的事务ID和事务本身的ID判断这行是否可见,而事务ID是一个无符号整数,如果事务ID耗尽,事务ID会跨过整数的界限重新计算,此时原先可见的行就会...
查询优化openGauss数据库的查询优化过程功能比较明晰,从源代码组织的角度来看,相关代码分布在不同的目录下,如表1所示。表1 查询优化模块说明 模块目录说明 查询重写 src/gausskernel/optimizer...