数据库系统设计与开发 课件6-openGauss体系结构_第1页
数据库系统设计与开发 课件6-openGauss体系结构_第2页
数据库系统设计与开发 课件6-openGauss体系结构_第3页
数据库系统设计与开发 课件6-openGauss体系结构_第4页
数据库系统设计与开发 课件6-openGauss体系结构_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章openGauss体系架构数据库系统设计与开发openGauss体系架构数据库系统架构openGauss体系架构openGauss的功能架构数据库系统架构基于openGauss的数据库系统常见架构主要包含了业务应用、客户端驱动程序、运行管理(OperationManager,OM)模块、openGauss主/备数据节点(DataNode)和本地存贮资源(Storage)等几部分。openGauss体系架构openGauss的体系架构主要是指数据节点的服务器架构,主要由服务器实例(Instance)、数据库(Database)和相关配置文件、日志文件组成。openGauss体系架构openGauss属于单进程多线程模型的数据库,客户端通过驱动程序向数据库后端管理线程GaussMaster发起连接请求,连接成功后GaussMaster线程会分配相应的gaussdb线程给客户端使用,后面该客户端的请求和操作由该业务处理子线程负责。客户端驱动程序JDBC:JavaDatabaseConnectivity,Java数据库连接ODBC:OpenDatabaseConnectivity,开放数据库互连,Microsoft公司Psycopg:openGauss数据库提供统一的Python访问接口Libpq:openGauss的C语言程序接口,没有做使用验证openGauss体系架构服务器实例的内存结构ShareBuffer:行存引擎默认使用的缓冲区CstoreBuffer:列存引擎默认使用的缓冲区MOT:Memory-OptimizedTable,内存优化表,内存引擎默认使用的缓冲区WALBuffer:Write-AheadLoggingBuffer,预写日志缓冲区TempBuffer:用于存储数据库会话期间的临时表数据work_mem:事务执行内部排序或Hash表写入临时文件之前使用的内存缓冲区maintenance_work_mem:一般是在openGauss执行维护性操作时使用,如:CREATEINDEXopenGauss体系架构服务器实例的线程gaussdb线程:负责处理客户端请求的任务WalWriter:日志写线程,负责将内存中的预写日志(WAL)页数据刷新到预写日志文件中PageWriter线程:负责将脏页数据拷贝至双写(double-writer)区域并落盘,然后将脏页转发给BgWriter子线程进行数据下盘操作BgWriter线程:负责对共享缓冲区的脏页数据进行下盘操作Checkpointer:检查点线程,周期性的发起数据库检查点将数据脏页刷新到磁盘的数据文件中openGauss体系架构数据库文件目录名称描述base数据库对象默认存储目录,如postgres数据库、用户创建的数据库global存储openGauss共享的系统表、共享的数据字典表pg_tblspcopenGauss的表空间目录,里面存储openGauss定义的表空间的目录软链接,指向表空间文件的实际存储目录pg_xlog存储openGauss数据库的WAL日志文件pg_clog存储openGauss数据库事务提交状态信息pg_csnlog存储openGauss数据库的快照信息,openGauss事务启动时会创建一个CSN快照,在MVCC机制下,CSN作为openGauss的逻辑时间戳,模拟数据库内部的时序,用来判断其他事务对于当前事务是否可见pg_twophase存储两阶段事务提交信息,用来确保数据一致性pg_serial存储已提交的可序列化事务信息pg_multixact存储多事务状态信息,一般用于共享行级锁(sharedrowlocks)openGauss体系架构数据库文件目录名称描述ArchivedWALopenGauss数据库WAL日志的归档目录pg_audit存储openGauss数据库的审计日志文件pg_replslot存储openGauss数据库的复制事务槽数据pg_llog保存逻辑复制时的状态数据openGauss体系架构参数配置文件目录名称描述postgresql.confopenGauss的配置文件,在GaussMaster线程启动时会读取该文件,获取监听地址、服务端口、内存分配、功能设置等配置信息,并且根据该文件,在openGauss启动时创建共享内存和信号量池等。pg_hba.conf基于主机的接入认证配置文件,主要保存鉴权信息(如:允许访问的数据库、用户、IP段、加密方式等)。pg_ident.conf客户端认证的配置文件,主要保存用户映射信息,将主机操作系统的用户与openGauss数据库用户做映射。gaussdb.state主要保存数据库当前的状态信息(如:主备HA的角色、rebuild进度及原因、sync状态、LSN信息等)。openGauss功能架构openGauss的最小管理单元是实例,一个实例代表了一个独立运行的数据库,每个实例包含不同的功能模块openGauss功能架构通信管理-通信协议处理OpenGauss的通信协议继承自PostgreSQL的前后端协议(Frontend/BackendProtocol),并针对性能与安全性进行了增强。该协议基于消息交换模型,客户端与服务端通过TCP/IP或UnixSocket建立连接,支持同步和异步通信模式。OpenGauss的通信协议在处理客户端与服务端的交互时,涉及多个子协议(或协议阶段),这些子协议共同协作完成连接管理、认证、数据传输、事务控制等功能。协议名称功能启动协议

StartupProtocol客户端发送启动消息(包含协议版本、目标数据库名、用户名等)终止协议

TerminationProtocol客户端发送Terminate消息,服务端立即关闭连接认证协商

AuthenticationNegotiation服务端根据配置的认证策略返回认证请求类型(如SHA-256、MD5)简单查询协议

SimpleQueryProtocol客户端发送单条SQL语句,服务端直接执行并返回结果扩展查询协议

ExtendedQueryProtocol分阶段(Parse/Bind/Execute)调用函数,支持参数化输入和高效复用复制协议

ReplicationProtocol用于主备节点间的数据同步与逻辑解码openGauss功能架构通信管理-控制命令信号处理在Linux系统中,信号(Signal)是一种进程间通信机制,用于通知进程发生了特定事件。openGauss通过捕获和处理这些信号来实现对数据库进程的控制。openGauss的控制命令信号处理是其进程管理的重要组成部分,主要用于控制数据库服务的启动、停止、配置重载等操作。信号名称默认行为典型应用场景SIGTERM智能关闭

SmartShutdown等待所有会话结束,完成事务后关闭。适用于计划维护。SIGINT快速关闭

FastShutdown中断当前连接,回滚未提交事务,立即关闭。用于紧急停止。SIGQUIT立即关闭

ImmediateShutdown直接终止进程,可能导致数据损坏。仅用于调试或极端情况。SIGHUP重载配置文件动态加载postgresql.conf和pg_hba.conf,无需重启服务。SIGUSR1日志轮转

LogRotation触发日志文件切换(如通过pg_rotate_logfile()),便于日志归档。SIGUSR2在线备份配合pg_start_backup()和pg_stop_backup()实现物理备份。openGauss功能架构SQL引擎SQL解析:对接收到的SQL语句进行解析,依次包括词法解析、语法解析、语义解析。SQL查询重写:利用已有语句特征和关系代数运算来生成更高效的等价语句。SQL优化:根据生成的高效等价SQL语句,枚举不同的候选执行路径,经过执行代价的计算,最终获得一个最优的执行路径。SQL执行:对执行树进行迭代遍历,通过从磁盘读取数据,根据执行树的具体逻辑完成查询语义。DDL命令处理:执行基本的词法解析、语法解析和语义解析等操作,查询对应的数据字典后就可以开始执行更新操作。存储过程解析:存储过程只是在第一次执行时进行解析、编译、执行,以后都是对结果进行调用。openGauss功能架构存贮引擎行存引擎:行存引擎是将表按行存储到硬盘分区上,支持高并发读写、低时延。主要面向OLTP场景设计,OLTP即就是在线联机事务处理,它的特点是随机小IO操作频繁,数据变化较大,常见于那些交易型事务处理场景。行存的本地更新和回滚段更新是两种不同的数据修改机制。列存引擎:列存引擎主要面向OLAP场景设计,OLAP即就是在线联机分析处理,常见于分析决策型使用场景。列存引擎的存储基本单位是CU(CompressionUnit,压缩单元),表里面一列的一部分数据组成的压缩数据块就可以称为CU。openGauss功能架构存贮引擎内存表:也就是指MOT内存引擎,作为在openGauss中与传统基于磁盘的行存储、列存储并存的一种高性能存储引擎,基于全内存态的数据存储,为openGauss提供了高吞吐的实时数据处理分析能力和极低的事务处理延时,在不同的业务负载场景下,可以达到其他引擎事务处理能力的3~10倍。CSN快照:CSN(CommitSequenceNumber)即就是待提交事务的序列号(一个64位无符号自增长整数),常用于多版本可见性判断和MVCC机制,在openGauss内部使用CSN作为逻辑的时间戳,模拟数据库内部的时序。空闲空间管理:openGauss使用MVCC多版本并发控制机制,更新和删除操作并不会在页面中删除数据本身,这样在数据库长时间运行后会有大量的历史版本保存在存储空间中,造成空间膨胀。为了解决这一问题,存储引擎内部需要定期对历史数据进行清理,以保证数据库的健康运行。存储空间的清理分为页面级的清理、表级清理、数据库级清理等。锁管理器:锁管理器对事务并发访问过程中数据库对象的加锁操作进行管理,判断两个事务访问同一个对象的时候加的锁的类型是否相容,是否允许事务在相应对象上加锁。锁管理器对事务并发过程中使用的锁进行记录、追踪和管理。openGauss功能架构存贮引擎大内存缓冲区管理:大内存缓冲区介于数据存储引擎和外部文件系统之间,常用来同外部文件系统进行page页面交换并作缓冲,对内存共享页面的脏页进行LRU算法淘汰并刷盘,保证内存使用的高效,减少磁盘的访问。索引管理:索引可以有效提升数据的访问效率,索引管理主要管理的是索引结构,包括索引创建、更改、删除等。存储管理适配:存储管理适配指的就是对存储介质层的管理,对不同的存储介质进行适配封装,对上层数据页面访问屏蔽底层真正存储系统的差异,例如管理HDD的使用、管理SSD的使用。日志管理:传统数据库一般都采用串行刷日志的设计,因为日志有顺序依赖关系,即:一个事务产生的多条redo/undo记录的前后顺序依赖关系很强。在日志管理这部分,openGauss主要对日志系统进行了并行设计,采用多个LogWriter线程并行写的机制,打散串行刷日志的锁控制瓶颈,充分发挥SSD的多通道IO处理能力。openGauss功能架构存贮引擎并行日志回放:并行日志的回放指的是将重做日志中已记录的数据文件变更操作重新应用到系统/页面中的过程,这个过程通常发生在实例故障恢复抑或者是主备实例之间的数据同步过程中的备机实例上(即主实例的改动需要在备机实例回放重做,以达到主备实例状态一致)。增量检查点:增量检查点是对传统全量检查点的优化,核心思想是分批次、持续性地将脏页写入磁盘,而非一次性全量处理。NUMA化数据架构:openGauss根据鲲鹏处理器的多核NUMA(NonUniformMemoryAccess,非一致性内存访问架构)架构特点,做了一系列的相关优化,例如采用NUMA绑核的方式尽量减少跨核内存访问的时延问题;为了充分发挥鲲鹏多核算力优势,使用并行日志系统设计、CLog分区等,大幅提升OLTP系统的处理性能。openGauss功能架构openGauss的最小管理单元是实例,一个实例代表了一个独立运行的数据库,每个实例包含不同的功能模块openGauss功能架构通信管理-通信协议处理OpenGauss的通信协议继承自PostgreSQL的前后端协议(Frontend/BackendProtocol),并针对性能与安全性进行了增强。该协议基于消息交换模型,客户端与服务端通过TCP/IP或UnixSocket建立连接,支持同步和异步通信模式。OpenGauss的通信协议在处理客户端与服务端的交互时,涉及多个子协议(或协议阶段),这些子协议共同协作完成连接管理、认证、数据传输、事务控制等功能。协议名称功能启动协议

StartupProtocol客户端发送启动消息(包含协议版本、目标数据库名、用户名等)终止协议

TerminationProtocol客户端发送Terminate消息,服务端立即关闭连接认证协商

AuthenticationNegotiation服务端根据配置的认证策略返回认证请求类型(如SHA-256、MD5)简单查询协议

SimpleQueryProtocol客户端发送单条SQL语句,服务端直接执行并返回结果扩展查询协议

ExtendedQueryProtocol分阶段(Parse/Bind/Execute)调用函数,支持参数化输入和高效复用复制协议

ReplicationProtocol用于主备节点间的数据同步与逻辑解码openGauss功能架构通信管理-控制命令信号处理在Linux系统中,信号(Signal)是一种进程间通信机制,用于通知进程发生了特定事件。openGauss通过捕获和处理这些信号来实现对数据库进程的控制。openGauss的控制命令信号处理是其进程管理的重要组成部分,主要用于控制数据库服务的启动、停止、配置重载等操作。信号名称默认行为典型应用场景SIGTERM智能关闭

SmartShutdown等待所有会话结束,完成事务后关闭。适用于计划维护。SIGINT快速关闭

FastShutdown中断当前连接,回滚未提交事务,立即关闭。用于紧急停止。SIGQUIT立即关闭

ImmediateShutdown直接终止进程,可能导致数据损坏。仅用于调试或极端情况。SIGHUP重载配置文件动态加载postgresql.conf和pg_hba.conf,无需重启服务。SIGUSR1日志轮转

LogRotation触发日志文件切换(如通过pg_rotate_logfile()),便于日志归档。SIGUSR2在线备份配合pg_start_backup()和pg_stop_backup()实现物理备份。openGauss功能架构SQL引擎SQL解析:对接收到的SQL语句进行解析,依次包括词法解析、语法解析、语义解析。SQL查询重写:利用已有语句特征和关系代数运算来生成更高效的等价语句。SQL优化:根据生成的高效等价SQL语句,枚举不同的候选执行路径,经过执行代价的计算,最终获得一个最优的执行路径。SQL执行:对执行树进行迭代遍历,通过从磁盘读取数据,根据执行树的具体逻辑完成查询语义。DDL命令处理:执行基本的词法解析、语法解析和语义解析等操作,查询对应的数据字典后就可以开始执行更新操作。存储过程解析:存储过程只是在第一次执行时进行解析、编译、执行,以后都是对结果进行调用。openGauss功能架构存贮引擎行存引擎:行存引擎是将表按行存储到硬盘分区上,支持高并发读写、低时延。主要面向OLTP场景设计,OLTP即就是在线联机事务处理,它的特点是随机小IO操作频繁,数据变化较大,常见于那些交易型事务处理场景。行存的本地更新和回滚段更新是两种不同的数据修改机制。列存引擎:列存引擎主要面向OLAP场景设计,OLAP即就是在线联机分析处理,常见于分析决策型使用场景。列存引擎的存储基本单位是CU(CompressionUnit,压缩单元),表里面一列的一部分数据组成的压缩数据块就可以称为CU。openGauss功能架构存贮引擎内存表:也就是指MOT内存引擎,作为在openGauss中与传统基于磁盘的行存储、列存储并存的一种高性能存储引擎,基于全内存态的数据存储,为openGauss提供了高吞吐的实时数据处理分析能力和极低的事务处理延时,在不同的业务负载场景下,可以达到其他引擎事务处理能力的3~10倍。CSN快照:CSN(CommitSequenceNumber)即就是待提交事务的序列号(一个64位无符号自增长整数),常用于多版本可见性判断和MVCC机制,在openGauss内部使用CSN作为逻辑的时间戳,模拟数据库内部的时序。空闲空间管理:openGauss使用MVCC多版本并发控制机制,更新和删除操作并不会在页面中删除数据本身,这样在数据库长时间运行后会有大量的历史版本保存在存储空间中,造成空间膨胀。为了解决这一问题,存储引擎内部需要定期对历史数据进行清理,以保证数据库的健康运行。存储空间的清理分为页面级的清理、表级清理、数据库级清理等。锁管理器:锁管理器对事务并发访问过程中数据库对象的加锁操作进行管理,判断两个事务访问同一个对象的时候加的锁

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论