涉及用户身份管理识别、用户口令安全存储以及完善的认证机制3大模块,而对于系统内部的进程间通信(主备),则需要调用业界通用的Kerberos认证机制,下面将主要围绕这4个子模块进行涉及原理介绍和代码解析。
涉及用户身份管理识别、用户口令安全存储以及完善的认证机制3大模块,而对于系统内部的进程间通信(主备),则需要调用业界通用的Kerberos认证机制,下面将主要围绕这4个子模块进行涉及原理介绍和代码解析。
这里的lock成员变量将引用共享内存中的全局LWLock数组中的某个元素,在WALInsertLock优化之后,尽管WALInsertLock已经按照NUMA Node分布了,但是其引用的LWLock却无法控制其物理内存位置,因此在访问WALInsertLock的...
如果当前缓存的日志段文件页面中无法读完,那么会调用ReadPageInternal接口加载下一个日志段文件页面到内存中继续读取,直到读完所有等于日志头部xl_tot_len长度的日志数据。日志文件读写的最小I/O粒度为一个页面。...
检查点的关键类和数据结构如表4-40所示。表4-40 检查点的关键类和数据结构简介关键类和数据结构描述CheckpointManager类理整个检查点机制的主类,是MOT中所有检查点相关任务的接口类。CheckpointWorkerPool类用于...
权限管理是安全管理重要的一环,openGauss权限管理基于访问控制列表(access control list,ACL)实现。
同时,对于某个堆/索引页面对应的FSM信息,只在页面初始化和页面空闲空间整理(见本节后面介绍)两种场景下才会主动更新,除此之外,只有当新插入的数据发现该页面实际空间不足时才会被动更新该页面对应的FSM信息...
将最新版本的“有效数据”存储在数据页面上,而单独开辟一段undo(回滚)空间,用于统一管理历史版本的“垃圾数据”,因此数据空间不会由于频繁更新而膨胀,垃圾回收效率更高。向上对接SQL引擎,提供对ustore表的...
审计机制和审计追踪机制能够对用户的日常行为进行记录和分析,实现规避风险、提高安全性。
下面对这个函数进行更详细的介绍。该函数的处理也类似GaussDbThreadMain函数,根据thread_role角色的不同调用不同角色的处理函数,进入各个线程的main函数,比如StartupProcessMain函数、CheckpointerMain函数、...
如一个SQL语句,在解析时需要对词法单元和语法单元分配内存,在执行过程中需要对执行状态分配内存。在事务结束时,如果不是PREPARE语句,那么SQL语句的执行计划内存和执行过程的状态内存都需要释放。如果是PREPARE...
磁盘引擎是数据库系统中最常用的存储引擎,openGauss提供不同存储格式的磁盘引擎来支持大容量(数据量大于内存空间)场景下的OLTP、OLAP和HTAP(hybrid transactions and analytics processing,混合交易和分析处理...
本章节详细解析了openGauss的安全架构,并通过关键数据结构和关键函数代码解读描述每一种安全防护机制的实现细节,这些代码实现细节将有助于开发者了解openGauss的安全原理,并基于最新的安全标准来不断地优化和改善...
与行存储格式不同,cstore列存储的主体数据文件以CU为I/O单元,只支持追加写操作,因此cstore只有读共享缓冲区。CU间和CU内的可见性由对应的CUDESE表(astore表)决定,因此其可见性和并发控制原理与行存储astore...
openGauss在多线程架构的基础上,实现了线程池。线程池机制实现了会话和处理线程分离,在大并发连接的情况下仍然能够保证系统有很好的SLA响应。另外不同的线程组可绑到不同的NUMA(non-uniform memory access,非...
本章节将围绕openGauss安全机制进行源码解读,以帮助数据库内核开发者在进行内核开发时正确地理解和使用安全功能接口,持续为产品提供安全保护能力,或基于当前安全能力进一步开发新的安全能力。不同于数据库其他...
另一方面,在openGauss行存储格式中,对同一行数据的写-写查询冲突通过两阶段锁协议来实现并发控制(参见第5章中关于行级锁的介绍),对同一行数据的读-写查询冲突通过行级多版本技术来实现互不阻塞的、高效的并发...
此函数主要根据判断nodeTag所归属的DDL操作类型,进入不同的审计执行逻辑。在每个工作线程初始化阶段把审计模块加载至线程中,其审计的执行原理是把审计函数赋给SQL生命周期不同阶段的Hook(钩子),当线程执行至SQL...
ACLMASK_ALL表示需要满足待检查权限mode中的所有权限,ACLMASK_ANY表示只需满足待检查权限mode中的一种权限即可。数据库通过查询数据库对象的访问控制列表检查用户对数据库对象的访问权限,数据库对象的ACL保存在...
事务并发控制机制用来保证并发执行事务的情况下openGauss的ACID特性。下面将逐一介绍事务并发控制的各组成部分。
基于openGauss XLOG (WAL)的ILogger的一个实现,它简单地使用openGauss WAL接口将序列化的事务写入WAL中。MOT WAL日志项有自己的资源管理器,这可以使openGauss识别到该日志项是一个MOT WAL日志项,并将其转发到MOT...
索引删除操作用于在堆元组被删除的同时,将对应的索引元组也标上对应的xmax。此时会将该元组视为可见,但会标记xs_recheck_itup,告知ustore的数据页面需要在取到对应的数据元组后,再次构建对应的索引元组并与返回...
openGauss可在数据库系统部署完毕之后开启Kerberos模式,即Kerberos服务部署在数据库系统机器上,部署过程中会开启Kerberos相关的服务,并派发凭证给集群内部所有的节点,初始化一系列Kerberos需要用到的环境变量,...
重量级清理的对外接口是cluster_rel函数,内部逐层调用rebuild_relation、copy_heap_data、tableam_relation_copy_for_cluster、heapam_relation_copy_for_cluster、copy_heap_data_internal、reform_and_rewrite_...
如“4.2.8 日志系统”节中所述,通过采用WAL日志的方式可以在对性能影响较小的情况下保障用户事务对数据库修改的持久化。然而如果只是依赖日志来保障持久化的话,那么数据库服务(故障)重启之后将需要回放大量的...
此时在回收队列的元信息页面中保存了已正确追踪的页面数量,若该数量少于整个索引表的页面数量,会尝试去使用这一部分未追踪的页面,并更新已追踪的页面数量。如果拿到了页面的写锁,会尝试对页面进行清理。...
(2) start_xact_command函数开始一个query命令,调用StartTransactionCommand函数,此时事务块上层状态未TBLOCK_DEFAULT,继续调用StartTransaction函数,设置事务底层状态TRANS_START,完成内存、缓存区、锁资源...
参与日志同步的主要有“wal sender”(主机端)和“wal receiver”(备机端)两个线程。一个主机上可以由多个“wal sender”线程同时存在,用于给不同的备机进行日志复制;一个备机上同一时刻只会有一个“wal ...
图4-27 cstore表插入流程示意图cstore表的删除流程主要分为两步。
在恢复过程中,可能存在跨越多个重做日志段的长事务,MOT将其保存在InProcessTransactions映射对象中,直到提交。包含在映射中的数据作为检查点处理过程的一部分进行序列化,并在检查点恢复期间进行反序列化。...