经过8小时的学习收获颇丰,因为有多年Oralce DBA的工作经验,拿来任何数据库都想跟Oracle做对比。
通过学习知道了华为人的努力和付出,给我国产数据库又添砖加瓦。
田老师讲解openGauss体系架构分为三个章节
openGauss体系架构,主要引擎,主要原理
openGauss VS PG架构和关键技术对比
关键差异因素:
运行时模型,事务处理机制,数据存储和组织,查询优化器。
线程池模型,高并发连接切换代价小、内存损耗小,执行效率高,一万并发连接比最优性能损耗<5%
64位事务ID,使用CSN解决动态快照膨胀问题;NUMA-Aware引擎优化改造解决“五把大锁”
增量Checkpoint机制,实现性能波动<5%
NUMA改造、cache-line padding、原生spin-lock
行存、列存、内存引擎,在研DFV存储和原位更新
支持SQL Bypass, CBO吸收工行等企业场景优化能力
ANSI/ISO标准SQL92、SQL99和SQL2003和企业扩展包
openGauss逻辑模块:
客户端驱动,线程管理,通信管理,SQL引擎,存储引擎,安全管理,通用组件和工具。
openGauss查询优化:
统计信息,行数估算,代价估算,路径搜索,计划生成。
openGauss执行引擎:
扫描算子,控制算子,物化算子,连接算子
openGauss NUMA内核数据结构
1、线程绑核,避免线程在核间偏移。
2、NUMA化数据结构改造,减少跨核访问。
3、数据分区,减少线程访问冲突。
4、算法调整,减少单点瓶颈。
5、借助ARM原子指令,减少计算开销。
openGauss 大并发问题解决方案
1、连接池一般在客户端设置,连接池避免了连接的频繁创建和销毁。连接复用。
2、线程池在数据库服务器上配置,控制数据库服务器活动线程数目。线程复用。对系统的业务起到流控作用,防止出现雪崩。
3、在高并发场景下,可以将连接池和线程池结合起来使用。
openGauss 线程池实现原理
1、主线程监听连接请求,分配会话,把会话分配给一个线程组。
2、每个线程池组有一个监听线程负责监听epoll列表中所有的客户连接,避免“惊群”效应。
3、每个线程组可以和一个NUMA 节点绑定。
openGauss 数据库事务机制
1、事务的持久性(Durability)主要通过预写式日志WAL算法实现。在事务提交时,采用预写式日志方式,把REDO日志写到磁盘。
2、检查点:将脏缓冲队列上的全部数据写出到数据文件。