【openGauss-embedded】一条插入语句的旅程

  1. 客户端接口层(包括预处理以提高性能)
  • 2.1 SQL解析阶段,libpg_query库,PostgresParser::Parse,SQL字符串转换为抽象语法树(AST)表示的 PGInsertStmt 节点
  • 2.2 解析器检查表名、列名是否存在,类型是否匹配,处理默认值,构建 InsertStatement 对象,包含表引用、列信息
  • 3.1 逻辑计划生成,创建 InsertPlan 逻辑计划节点
  • 3.2 物理计划生成,生成 InsertExec 物理执行器,根据表类型(行存/列存)、分区情况选择最优执行策略
  • 4.1 检查约束条件:通过 CheckInsert 函数验证CHECK约束,类型转换
  • 4.2 事务处理,处理事务隔离级别,准备回滚日志(undo log)
  • 4.3 执行器通过 TableDataSource 与存储层交互,包括单行插入和批量Batch插入提高性能,对于分区表,还需要确定目标分区
  • 5.1 格式化行数据结构,处理NULL值和变长字段
  • 5.2 查找合适的页面插入数据,必要时分配新页面,更新页面元数据。对于时序表,存储层有专门的处理ts_heap_insert_row
  • 5.3 记录Redo日志,日志包含操作类型、表ID、行数据等。支持批量日志写入以提高性能
  1. 提交事务使其生效:刷新事务日志到磁盘,更新事务状态,释放锁资源,更新统计信息
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值