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. 提交事务使其生效:刷新事务日志到磁盘,更新事务状态,释放锁资源,更新统计信息
Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐