什么是Vastbase
Vastbase G100是海量数据基于华为OpenGuass内核6推出的商业发行版。
V2.2 Build X
<大版本号>.<Realease>Build <小版本号>
Vastbase 体系结构
Vastbase父线程
监听客户端连接
为每个客户端fork专用的子线程
管理其他线程
Vastbase线程(业务处理线)
对客户端请求进行身份验证
接收请求
调用Vastbase的SQL引擎对SQL进行处理(词法解析、语法解析、语义解析、查询重写等),生成执行计划
根据命令的需要调用各种辅助线程和访问各内存结构执行SQL语句,将执行结果返回给客户端
在客户端断开连接时释放线程
Vastbase内存共享缓冲区缓存数据库常被访问的索引、表数据、执行计划等内容
shared buffer是行存引擎默认使用的缓冲区,大小由shared_buffers参数控制;
cstore buffer 是列存引擎默认使用的缓冲区:大小由cstore_buffers参数控制
MOT 是内存引擎默认使用的缓冲区
wal buffer:用于缓存增删改等写操作产生的事务日志,由wal_buffers参数控制maintenance_work_mem一般是在Vastbase执行维护性操作时使用,大小由参数maintenance_work_mem 控制
temp_buffer是每个数据库会话使用的LOCAL临时缓冲区,主要缓存会话所访问的临时表数据。主要由参数temp_buffers控制
work_mem是事务执行内部排序或Hash表写入临时文件之前使用的内存缓冲区
pagewriter线程:负责将脏页数据拷贝至双写(double-writer)区域并落盘,然后将脏页转发给bgwriter子线程进行数据下盘操作,如果发生数据页”折断”的问题,就会从双写空间里找到完整的数据页进行恢复
bgwriter线程:负责对共享缓冲区的脏页数据持续的进行刷盘操作,目的是让数据库线程在进行用户查询时可以很少或者几乎不等待写动作的发生,这样的机制同样也减少了检查点造成的性能下降walwriter线程: xlog日志写线程,将WAL buffer的内容刷新到磁盘并保存在xlog日志文件中
checkpoint线程:检查点线程,周期性的发起数据库检查点,在这个检查点时刻,所有的数据文件都被更新,脏数据页也被刷新到磁盘,此刻数据库是一致的
jemalloc_bg_thd:管理并实现内存的动态分配
StatCollector:负责统计Vastbase数据库的信息,并将这些收集到的统计信息保存在pgstat.stat文件中
Auditor:审计线程,获取审计数据,并保存到审计文件中
LWLockMonitor:负责检测轻量级锁(LWLock)产生的死锁,轻量级锁主要提供对共享内存的互斥访问控制
sysLogger: 系统日志线程,使用重定向的方式捕获管理线程、后台线程以及其他子线程的stderr输出,并写入日志文件中
Jobworker: JOB线程分为调度线程和工作线程。调度线程(JobScheduler)会根据pg_job表里面定义的JOB周期,对已经过期的JOB进行调用,由工作线程(Jobworker)执行实际的JOB任务
percentworker:根据percentile参数设置的值计算sql响应时间的百分比信息,目前percentile参数仅支持80和95
snapshotworker:收集snapshot信息,Vastbase数据库的WDR报告依赖于snapshotashworker:统计历史活动会话相关信息
alarm:告警检测线程
WalSender:运行在Vastbase主备环境中主节点,发送预写日志给备节点WalReceiver:运行在Vastbase主备环境中备节点,接收预写日志记录
AutoVacLauncher+AutoVacWorker:清理线程。AutoVacLauncher线程由Postmaster线程启动,它不断地将数据库需要做vacuum的对象信息保存在共享内存中,当表上被删除或更新的记录数超过设定的阈值时,会调用AutoVacWorker线程对表的存储空间执行回收清理工作
Vastbase在磁盘上的一整套文件集合叫做database cluster
数据库包含了数据文件、日志文件等多种文件,用于存储用户数据和保证数据一致性
###Vastbase目录结构
pg_control:用于存储全局控制信息
pg_filenode.map:用于将当前目录下系统表的OID与具体文件名进行硬编码映射(每个用户创建的数据库目录下也有同名文件)
pg_internal.init:用于缓存系统表,加快系统表读取速度(每个用户创建的数据库目录下也有同名文件)
全局系统表文件:数字命名的文件,用于存储系统表的内容。它们在pg_class里的relfilenode都为0,是靠
pg_filenode.map:将OID与文件硬编码映射
base目录:用于存放数据库的所有实体文件下属子目录均以数据库OID命名
数据库子目录下是以对象OID命名的文件
PG_VERSION是数据库源于PG的内核版本
名字以_fsm结尾的文件是数据文件对应的FSM(free space map)文件,用位图方式来标识哪些block是空闲的
以_vm结尾的文件是数据文件对应的VM(visibility map),在做多版本并发控制时是通过在元组头上标识“已无效”来实现删除或更新的,最后通过VACUUM功能来清理无效数据回收空闲空间
pg_xlog:WAL日志目录,非常重要
pg_clog:Commit log目录,非常重要
pg_csnlog:存储Vastbase数据库的快照信息
pg_twophase:存储两阶段事务提交信息,用来确保数据一致性
pg_serial:存储已提交的可序列化事务信息
pg_multixact:存储多事务状态信息,一般用于共享行级锁(shared
pg_llog:保存逻辑复制时的状态数据
pg_replslot:存储Vastbase数据库的复制事务槽数据
pg_perf:存储Vastbase数据库性能相关的统计信息
pg_hba.conf:客户端认证配置文件,可以配置客户的连接协议、加密方式、ACL等等
postgresql.conf:该database cluster的配置文件,文本格式,可以通过alter命令修改
mot.conf:MOT配置文件postmaster.pid